CSV 生成速度慢得可怕

Dreadfully slow CSV generation

前言:我们正在努力升级我们的应用程序 Ruby 和 Rails 版本,但需要与我们目前正在使用的东西一起工作。

我们的 RoR 应用程序具有将数据导出为 CSV 的功能。

我们最近升级到 Ruby 1.8.7,Rails 3.1,这个 CSV 输出的性能非常慢。我们谈论的是超过一分钟的 ~2000 条记录,这似乎有点荒谬。

此外,在处理对此的请求时,它基本上会关闭服务器以处理对此应用程序和其他应用程序的其他请求。

我有:

我很确定达到 Ruby 1.9.x 和更高的 Rails 版本将允许更好的性能,但确实需要能够达到可接受的响应时间(至少 <30 秒)现在。

非常感谢help/guidance。

使用 "standard" 时遇到 CSV 导出速度慢的相同问题 csv 转储

看起来像这样:

CSV.generate do |csv|
  csv << self.column_names

  self.all.find_in_batches(:batch_size => 10000).with_index do |batch,batch_index|
    puts (self.model_name.human.to_s + ": batch " + batch_index.to_s)
    batch.each do |row|
      csv << row.attributes.values_at(*column_names)
    end
  end
end

不幸的是,使用批处理没有帮助。 我注意到性能受到 Rails ActiveRecord 的影响 制作简单的数据库转储时不需要它

解决方案是在绕过 activerecord 对象创建的同时使用 select_all SQL 查询,如下所示:

CSV.generate do |csv|
  csv << self.column_names
  self.connection.select_all("select * from #{self.table_name}").each do |row|
    csv << row.values
  end
end

在非常基本的服务器上导出大约 130K 行的性能从 120 秒显着提高到大约 2 秒的原因是什么

希望对您有所帮助