在Riak Python客户端中读取/存储多个对象的有效方法?

在Riak Python客户端中读取/存储多个对象的有效方法?,python,riak,Python,Riak,我正在编写一个restore riak数据库工具,我需要将数十万个密钥从一个riak服务器写入另一个riak服务器。大约91000把钥匙需要11分钟(根本没有效率)。我的代码的基本概要如下: data_objects = bucket.multiget(keys) for data_object in data_objects: newEntry = bucket.new(data_object.key, data=data_object.data) newEntry.store

我正在编写一个restore riak数据库工具,我需要将数十万个密钥从一个riak服务器写入另一个riak服务器。大约91000把钥匙需要11分钟(根本没有效率)。我的代码的基本概要如下:

data_objects = bucket.multiget(keys)
for data_object in data_objects:
    newEntry = bucket.new(data_object.key, data=data_object.data)
    newEntry.store()
python应用程序在单个multiget()函数调用中花费约7分钟,该函数创建91000个Riak对象的数据对象列表,在91000个store()函数调用中花费约4分钟


有没有更有效的方法来读取对象?一种更有效的存储对象的方法?riak python库中有一个multiget函数,但不是multistore函数。

不要使用multiget,创建自己的线程,平等地共享它们的密钥,从旧存储区获取,存储到新存储区。gevent.monkey\u patch.all()可能也会有帮助。

riak的复制不是在失败时负责恢复吗?只是好奇工具的用途是什么。是的,但我还需要能够通过特定的存储桶/索引过滤备份,如果我复制整个riak数据库,这是不可能的。现在我明白了您要做的事情。只是想知道,有效的数据子集/您对整个数据集问题感兴趣的数据子集的百分比是多少?对于任何给定的备份,复制riak是否需要复制/usr/local/var/lib/riak/leveldb(或类似的地方)中目录的内容,可能有20%的数据是有意义的,但这并不能回答这个问题。要评论或要求作者澄清,请在他们的帖子下方留下评论-你可以随时在自己的帖子上发表评论,一旦你有足够的评论,你就可以发表评论。可能不够详细或不够好,但我的回答肯定是为了“更有效地解决”这个问题。riak客户端的multiget方法使用相同的python线程来加速批量读取,因此不必等待整个multiget操作的完成,而是可以在我们自己的线程中完成读取和写入。可以使用gevent,因为这是一个IO绑定的操作,异步工作进程是提高性能的最合适的选择。