0

FasterCSV を使用して CSV レポートを生成するコントローラーが Rails にあります。これらのレポートには、約 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

一度にメモリ内の多くの ActiveRecord オブジェクトを削除するために、find_in_batches を使用してみます。

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

多くの ActiveRecord オブジェクトを作成してメモリ内に保持することは、かなり役立つと思います。

于 2010-02-24T16:36:50.520 に答える