2012-10-24 29 views
0

我有一个包含日志数据的桶b1。现在我试图通过添加辅助索引将它们复制到新存储区。在旧存储区中,每个条目都具有60个块的JSON。我希望每个块都被写入新桶中的新条目。在桶之间复制数据 - RIAK

我使用riak java客户端,从旧桶中读取每个条目,解析JSON并通过添加secIndex为新桶创建60个写入调用[json中的每个块]。这工作得很好。但是整个过程非常缓慢,而我的老桶有近1000万条记录。

有没有更有效的方式做到这一点,可能可能加速它(但也发生了很多的集群负载)

回答

1

的一种方法是开发一个或两个自定义地图和/或减少阶段函数并执行拆分和插入作为一个大型mapreduce作业的一部分。有可能通过例如将它分成几个较小的任务。使用密钥过滤。

由于您需要访问内部Riak客户端以插入新记录,因此这些函数(至少是插入函数)需要在Erlang中开发,因为目前无法从JavaScript执行插入操作。

这需要一些时间来开发和测试,所以如果这是一次性活动(听起来像),它可能不值得。

如果您尚未执行此操作,则最好尝试对数据进行分区并尝试在多个并行流中执行迁移。

+0

感谢Christian。是的,你是绝对正确的,这是一次性活动。有了java的客户端,看起来这个过程需要几周的时间。当你说在多个并行数据流中进行迁移时,你是指运行多个进程,将流式传输的部分密钥从旧桶中移出,并将它们移动到新的桶中? –

+0

如果您在记录上有任何二级索引,则可以使用此索引将数据分割为多个范围。如果没有,您可以让一个线程检索数据并由一个池处理它们。我认为处理和插入是时间最长的一步。 –

+0

如果您尚未执行此操作,则可能需要在集群中传播负载。 –