2010-02-24 3 views
0

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

При создании 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' 

ответ

0

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

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

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

Смежные вопросы