前言:我们正在努力升级我们的应用程序Ruby和Rails版本,但需要处理我们目前所处的内容。
我们有在RoR应用程序中将数据导出为CSV的功能。
我们最近升级到Ruby 1.8.7,Rails 3.1,这个CSV输出的性能令人难以置信。我们谈论约2000分钟的记录,这看起来有点荒谬。
此外,当处理此请求时,它会基本上关闭服务器以获取此应用和其他人的其他请求。
我有:
我很确定使用Ruby 1.9.x及更高版本的Rails版本可以获得更好的性能,但是现在需要能够实现可接受的响应时间(至少<30秒)。
非常感谢任何帮助/指导。
答案 0 :(得分:2)
使用&#34;标准&#34;时出现慢速CSV导出存在同样的问题 csv dump
看起来像这样:
CSV.generate do |csv|
csv << self.column_names
self.all.find_in_batches(:batch_size => 10000).with_index do |batch,batch_index|
puts (self.model_name.human.to_s + ": batch " + batch_index.to_s)
batch.each do |row|
csv << row.attributes.values_at(*column_names)
end
end
end
不幸的是,使用批次没有帮助。
我注意到Rails ActiveRecord的性能受到了影响
在进行简单的数据库转储时不需要它
解决方案是在绕过activerecord对象创建时使用select_all SQL查询,如下所示:
CSV.generate do |csv|
csv << self.column_names
self.connection.select_all("select * from #{self.table_name}").each do |row|
csv << row.values
end
end
在非常基本的服务器上导出大约130K行的情况下,性能从120秒大幅提升到大约2秒
希望有所帮助