find_in_batches:如何以特定的id结束?

时间:2013-12-06 07:07:25

标签: ruby-on-rails ruby

我有一百万条记录,我想通过10个不同的工人一次处理100k。

文档:

  

“您可以通过控制批处理的起点   提供:启动选项。如果您愿意,这尤其有用   多个工人处理相同的处理队列。你(们)能做到   worker 1处理id 0和10,000以及worker 2之间的所有记录   处理10,000以上(通过设置:start选项)   工人)。“

当我们只能提供:start选项但不能提供:end选项时,如何执行上述操作。

2 个答案:

答案 0 :(得分:2)

find_in_batches将遍历所有记录并批量生成它们。

  

“每个批次的大小由:batch_size选项设置;默认值   是1000。“

因此设置{100}的:batch_size,然后您需要输入代码以将每个批次分配给您的工作人员。所以像这样:

i = 0
Model.find_in_batches(batch_size: 100000) do |batch|
  # code to assign batch to worker i
  i += 1
end

答案 1 :(得分:0)

Hooray的对称性,现在有一个finish param

  

find_each(start:nil,finish:nil,batch_size:1000,error_on_ignore:nil)

     

:finish - 指定要结束的主键值,包括值。

Pull request