Экспорт больших объемов данных с использованием FasterCSV с Rails - PullRequest
0 голосов
/ 24 февраля 2010

У меня есть контроллер в Rails, который генерирует отчеты CSV, используя FasterCSV. Эти отчеты будут содержать приблизительно 20 000 строк, а может и больше.

Это займет около 30 секунд или больше при создании csv_string в моей реализации ниже. Есть ли лучший / более быстрый способ экспорта данных? Любой способ вывести данные без необходимости хранить все это в памяти в 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 голосов
/ 24 февраля 2010

Я бы попытался использовать find_in_batches, чтобы исключить столько объектов ActiveRecord в памяти одновременно.

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

Я считаю, что это должно немного помочь, создание и хранение многих объектов ActiveRecord в памяти - это slooowww.

...