我有一百万条记录,我想通过10个不同的工人一次处理100k。
文档:
“您可以通过控制批处理的起点 提供:启动选项。如果您愿意,这尤其有用 多个工人处理相同的处理队列。你(们)能做到 worker 1处理id 0和10,000以及worker 2之间的所有记录 处理10,000以上(通过设置:start选项) 工人)。“
当我们只能提供:start
选项但不能提供:end
选项时,如何执行上述操作。
答案 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 - 指定要结束的主键值,包括值。