为了打破长时间的数据迁移,我使用限制为100的组的查询,然后处理这100条记录。
count = Model.where("conditions").count
count = count / 100
count = count+1 if count%100 != 0
count.times do
#do my data migration steps .limit(100)...
end
是否有一种快捷方式或更好的方法来根据是否有除以100时的余数来计算?感觉像我忘记了一个简单的方法(除了舍入似乎更慢,但也许它不是)。
答案 0 :(得分:2)
是。 Rails非常支持这一点,您不必滚动自己的代码来查找批量记录。
最简单的方法是使用find_each
,一次无缝加载1000条记录:
Model.find_each do |model|
# ...
end
基础机制为find_in_batches
,默认批量大小为1000.您可以直接使用find_in_batches
,但您不必使用find_each
就足够了:
Model.find_in_batches(batch_size: 100) do |batch|
batch.each do |model|
# ...
end
end
答案 1 :(得分:1)
Rails有几种方法可以在batches中加载记录。 find_each
在这里会很好用。它默认为批量1000,但您可以指定批量大小:
Model.find_each(batch_size: 100) do |record|
...
end