使用带有Rails的FasterCSV导出大量数据

时间:2010-02-24 15:39:47

标签: ruby-on-rails fastercsv

我在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'

1 个答案:

答案 0 :(得分:0)

我会尝试使用find_in_batches,一次性消除内存中的那么多ActiveRecord对象。

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

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