find_in_batches

在Rails中,我们经常要取出大量的数据进行一定的操作,例如这样的:

Project.all.each do |project| 
    ...
end

如果Project这张表有上千条上万条甚至更多的数据,会发生什么情况?Rails会将所有的数据取出,加载在内存里面,然后再进行循环。这个时候你会发现Rails的进程内存占用急剧增大,程序卡住许久才开始执行循环里面的代码,甚至有可能机器配置不够引起程序崩溃!

于是便有了find_in_batches这个方法,顾名思义,它就是按批次来取数据,避免一次性加载过多的数据。

这里是Rails的官方文档:http://api.rubyonrails.org/classes/ActiveRecord/Batches.html

使用起来是这样的:

Person.find_in_batches(start: 2000, batch_size: 2000) do |group| 
    group.each { |person| person.party_all_night! }
end

有两个参数
::batch_size - Specifies the size of the batch. Default to 1000. 每批次取出的数据数量

:start - Specifies the starting point for the batch processing. 开始的位置

另外还有一个更简洁的方法,find_each,实质上也是使用find_in_batches方法的封装:

Person.find_each(start: 2000, batch_size: 2000) do |person| person.party_all_night!
end
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容