向 couchbase 添加 "too" 多件物品时没有任何保存
Nothing is saved when adding "too" many items to couchbase
我已经开始将我们的数据从旧的键值存储转移到 couchbase(couchbase 类型的存储桶)。我制作了最简单的 ruby 脚本,它循环键,从旧数据库中读取值,并将其添加到 couchbase:
item_count = 0
cb = Couchbase.connect(bucket:"ep", password:"secret")
cb.run do |ep|
old_db.read do
key = ... # next key from old DB
json = ... # next value from old DB
ep.set(key, json.to_s)
item_count += 1
end
end
puts item_count
我冲洗我的桶,然后在 运行 我的脚本之后,我查看 couchbase 网络控制台中 ep 桶中的项目计数。
当我添加约 2000 个或更少的项目时,一切看起来都不错。但是当我添加超过 2000 个项目时,存储桶仍然是空的!
当我的存储桶中有大约 1900 件物品时,它的容量大约为 50%,所以这并不是因为它变满了。 (即便如此,我还是希望第一批项目能被保存下来)
好的,我找到了可能的解决方案。 cauchbase 文档讨论了 set() 并且据说它可以同时用于同步和异步,并且从没有很好记录的示例中我认为如果我不传递一个块,那么它将是同步的。似乎不是这样,所以我更改了代码以使用回调:
def copy_next(old_db, cb, ep)
key = old_db.next_key # next key from old DB
if key
json = old_db.get(key) # next value from old DB
ep.set(key, json.to_s) do |cas, k, op|
copy_next(old_db, cb, ep)
end
end
end
cb = Couchbase.connect(bucket:"ep", password:"secret")
cb.run do |ep|
copy_next(old_db, cb, ep)
end
我已经开始将我们的数据从旧的键值存储转移到 couchbase(couchbase 类型的存储桶)。我制作了最简单的 ruby 脚本,它循环键,从旧数据库中读取值,并将其添加到 couchbase:
item_count = 0
cb = Couchbase.connect(bucket:"ep", password:"secret")
cb.run do |ep|
old_db.read do
key = ... # next key from old DB
json = ... # next value from old DB
ep.set(key, json.to_s)
item_count += 1
end
end
puts item_count
我冲洗我的桶,然后在 运行 我的脚本之后,我查看 couchbase 网络控制台中 ep 桶中的项目计数。
当我添加约 2000 个或更少的项目时,一切看起来都不错。但是当我添加超过 2000 个项目时,存储桶仍然是空的!
当我的存储桶中有大约 1900 件物品时,它的容量大约为 50%,所以这并不是因为它变满了。 (即便如此,我还是希望第一批项目能被保存下来)
好的,我找到了可能的解决方案。 cauchbase 文档讨论了 set() 并且据说它可以同时用于同步和异步,并且从没有很好记录的示例中我认为如果我不传递一个块,那么它将是同步的。似乎不是这样,所以我更改了代码以使用回调:
def copy_next(old_db, cb, ep)
key = old_db.next_key # next key from old DB
if key
json = old_db.get(key) # next value from old DB
ep.set(key, json.to_s) do |cas, k, op|
copy_next(old_db, cb, ep)
end
end
end
cb = Couchbase.connect(bucket:"ep", password:"secret")
cb.run do |ep|
copy_next(old_db, cb, ep)
end