Enumberable的each_slice方法什么时候开始对大型数组有意义?

时间:2016-05-24 20:21:53

标签: arrays ruby

我正在使用包含大约400,000个项目的数组。我在ruby docs上查看了Enumerables each_slice方法,并且想知道如果将它用于这个大小的数组会有什么不同。

根据Rails文档:

  

1.2批量检索多个对象我们经常需要迭代一大堆记录,就像我们向大型记录发送简报一样   用户集,或者我们导出数据时。

     

这可能看起来很简单:

# This is very inefficient when the users table has thousands of rows. 
User.all.each do |user|   
  NewsMailer.weekly(user).deliver_now 
end
     

但是   这种方法随着桌子的大小变得越来越不切实际   因为User.all.each指示Active Record获取,所以会增加   整个表在一次传递中,每行构建一个模型对象,然后   将整个模型对象数组保留在内存中。的确,如果我们有一个   大量记录,整个集合可能超过金额   可用的内存。

     

Rails提供了两种方法来解决这个问题   记录到内存友好的批处理中。第一种方法,   find_each,检索一批记录,然后将每条记录生成   块作为模型单独。第二种方法,find_in_batches,   检索一批记录,然后将整个批次生成到   阻止作为一系列模型。

     

find_each和find_in_batches方法适用于   批量处理大量不适合的记录   记忆一下子。如果你只需要循环上千条记录   常规查找方法是首选方法。

根据此文档,如果我有超过1,000个数组项,那么我是否会开始研究each_slice?另外,我怎么知道我应该将它分成多少以帮助节省内存?有没有办法解决这个问题?

0 个答案:

没有答案