为了打破数据的长时间迁移,我使用了一个仅限于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时是否有余数,是否有捷径或更好的方法进行计数?感觉好像我忘记了一个简单的方法(除了舍入看起来慢一些,但也许不是)。
发布于 2015-04-10 01:14:12
是。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发布于 2015-04-10 01:15:52
Rails有几种在批次中加载记录的方法。find_each在这里会工作得很好。它默认为1000批,但您可以指定批处理大小:
Model.find_each(batch_size: 100) do |record|
...
end https://stackoverflow.com/questions/29551449
复制相似问题