下载的CSV报告使服务器超载,如何有效地获取数千条记录?

时间:2016-10-28 16:58:55

标签: sql ruby-on-rails activerecord orm

假设我有一个页面,可让您下载用户帐户评论的CSV报告,这些评论可能包含数千条记录。是否有更快的方式来审核每个用户的评论?现在我只是做一个简单的循环。

@user.comments.each do comment
 # create csv
end

2 个答案:

答案 0 :(得分:0)

在DB特定查询之外直接转储到CSV,并且假设您确实只是立即转储单个用户的注释,我将使用pluck来避免实例化所有这些AR对象的开销。这也意味着您可以将返回的列限制为仅真正需要导出的列。

@user.comments.pluck(:id, :body).each do |comment|
  # add to csv here
end

答案 1 :(得分:0)

类似的东西:

require 'csv'
sql = "Select * from comments"
records = ActiveRecord::Base.connection.execute(sql)
CSV.open("path/to/file.csv", "wb") do |csv|
  records.each do |rec|
    csv << rec
  end
end

比为每行创建AR对象要快几个数量级。 Haven没有测试过这段代码,但是你明白了。