代码之家  ›  专栏  ›  技术社区  ›  Trevor

使用FasterCSV和Rails导出大量数据

  •  0
  • Trevor  · 技术社区  · 14 年前

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

    创建 csv_string 在我下面的实现中。是否有更好/更快的方法导出数据?无需将数据全部存储在内存中即可输出数据的任何方法 csv_字符串 ?

    我目前的执行情况如下:

    @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 回复  |  直到 14 年前
        1
  •  0
  •   Ben Crouse    14 年前

    我会尝试在批处理中使用find_,一次删除内存中的那么多ActiveRecord对象。

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

    我相信这会有很大帮助,在内存中创建和拥有许多ActiveRecord对象是很慢的。