我已经开始将我们的数据从旧的键值存储转移到couchbase(couchbase类型存储桶)。我创建了最简单的ruby脚本循环遍历键,从旧DB读取值,并将其添加到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
我冲洗我的桶,然后在运行我的脚本后,我在ep bucket中的项目计数处查看了couchbase web控制台。
当我添加〜2000或更少的物品时,一切看起来都不错。但是当我添加超过2000个项目时,该桶仍然是空的!
当我在桶中有大约1900件物品时,它的容量大约是50%,所以不是因为它已经满了。 (即便如此,我希望保存第一批项目)
答案 0 :(得分:0)
好的,我找到了一个可能的解决方案。 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