Ruby on rails 在Rails中处理大型记录集

Ruby on rails 在Rails中处理大型记录集,ruby-on-rails,database,scaling,Ruby On Rails,Database,Scaling,我试图在一个比正常数据集(2m+记录)更大的数据集上执行日常操作。然而,Rails在这样的数据集上执行操作似乎需要很长时间。操作如 Dataset.all.each do |data| ... end 需要很长时间才能完成(我想这是因为它不能同时将所有项目放入内存,对吗?) 有人对我如何处理这种情况有什么策略吗?我知道SQL可能会加快处理速度,但我希望使用Rails环境,因为我可以对数据执行比仅使用SQL语句更复杂的操作。当处理大量行时,数据库非常快速高效,这正是它们的设计目的。如果希望获

我试图在一个比正常数据集(2m+记录)更大的数据集上执行日常操作。然而,Rails在这样的数据集上执行操作似乎需要很长时间。操作如

Dataset.all.each do |data|
  ...
end
需要很长时间才能完成(我想这是因为它不能同时将所有项目放入内存,对吗?)


有人对我如何处理这种情况有什么策略吗?我知道SQL可能会加快处理速度,但我希望使用Rails环境,因为我可以对数据执行比仅使用SQL语句更复杂的操作。

当处理大量行时,数据库非常快速高效,这正是它们的设计目的。如果希望获得最高性能,我建议您尝试在SQL中执行所有这些处理。如果您更喜欢使用Rails,或者不可能在SQL中完成所有您想做的事情,那么您可以尝试在SQL中执行一些预处理,在Rails中执行其余的操作。除此之外,2m+行是一个很大的循环,即使每一行只需要很短的一秒钟,它加起来就是一个很长的时间。

您想使用的
find_each

Dataset.find_each do |data|
  ...
end

Dataset.find_each(:batch_size=>5000){process…}(默认批处理大小1000)获取切片中的记录并对其进行处理,这样您就不会立即在内存中加载整个内容了啊,太好了,我从未听说过这种方法。谢谢那么,出于好奇,这之前花了多长时间,现在又花了多长时间?