【问题标题】:Processing large recordsets in Rails在 Rails 中处理大型记录集
【发布时间】:2011-02-05 21:42:05
【问题描述】:

我正在尝试对比正常数据集更大的数据集(200 万多条记录)执行日常操作。然而,Rails 似乎需要很长时间才能对这样的数据集执行操作。像

这样的操作
Dataset.all.each do |data|
  ...
end

需要很长时间才能完成(我认为这是因为它不能一次将所有项目都放入内存中,对吧?)。

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

【问题讨论】:

  • 那么,只是为了好奇,以前用了多长时间,现在用了多长时间?

标签: ruby-on-rails database scaling


【解决方案1】:

您想为此使用ActiveRecordfind_each

Dataset.find_each do |data|
  ...
end

【讨论】:

  • Dataset.find_each(:batch_size => 5000) { process ... } (默认批量大小 1000) 获取切片中的记录并处理它们,因此您不会将整个内容加载到内存中立即guides.rubyonrails.org/…
  • 啊,太好了,我从来没有听说过这种方法。谢谢!
【解决方案2】:

在处理大量行时,数据库非常快速和高效,这正是它们的设计目的。如果您想要最大性能,我建议您尝试在 SQL 中进行所有这些处理。如果您更喜欢使用 Rails,或者无法在 SQL 中完成所有您想要的操作,您可能会尝试在 SQL 中进行一些预处理,而在 Rails 中进行其余的处理。除此之外,2m+ 行需要循环很多,即使每行只需要几分之一秒,但加起来会很长。

【讨论】:

    猜你喜欢
    • 2013-11-23
    • 1970-01-01
    • 2016-12-22
    • 2011-01-11
    • 2011-03-14
    • 2017-09-24
    • 2019-12-27
    • 1970-01-01
    相关资源
    最近更新 更多