0

我在 Rails 中有一个控制器,它使用 FasterCSV 生成 CSV 报告。这些报告将包含大约 20,000 行,甚至更多。

csv_string在我下面的实现中创建它大约需要 30 秒或更长时间。有没有更好/更快的方法来导出数据?有什么方法可以输出数据而不必将其全部存储在内存中csv_string

我目前的实现如下:

@report_data = Person.find(:all, :conditions => "age > #{params[:age]}")
csv_string = FasterCSV.generate do |csv|
    @report_data.each do |e|
        values = [e.id, e.name, e.description, e.phone, e.address]
        csv << values
    end
end
send_data csv_string, :type => "text/plain", 
    :filename=>"report.csv", :disposition => 'attachment'
4

1 回答 1

0

我会尝试使用 find_in_batches 来一次消除内存中的许多 ActiveRecord 对象。

http://ryandaigle.com/articles/2009/2/23/what-s-new-in-edge-rails-batched-find

我相信这应该会有所帮助,在内存中创建和拥有许多 ActiveRecord 对象是 slooowww。

于 2010-02-24T16:36:50.520 回答