添加"也没有任何东西保存#34;很多物品到沙发基地

时间:2015-12-30 09:53:56

标签: ruby couchbase

我已经开始将我们的数据从旧的键值存储转移到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%,所以不是因为它已经满了。 (即便如此,我希望保存第一批项目)

1 个答案:

答案 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