Rails:将数百万行导出到csv

时间:2015-10-13 14:24:11

标签: ruby-on-rails csv export

所以我发现了很多文章,人们在使用rails将大数据导出到CSV时遇到问题。我能够做到这一点,但每20k行需要大约40秒。

是否有人克服了这个问题?我在过去的几个小时到处搜索,找不到适合我的东西。

谢谢!

1 个答案:

答案 0 :(得分:1)

假设您要将1k行加载到CSV中。您可以编写一个rake任务,该任务接受限制和偏移量以从表中提取数据。然后写一个类似下面的ruby脚本

batch_size = 100
offset = 0
for i in 0..9
  nohup rake my_task:to_load_csv(batch_size, offset, index) > rake.out 2>&1 &
  offset += batch_size
end

**请参阅this链接,了解有关如何在后台运行rake的更多信息

rake任务将类似于

namespace :my_task
  task :load_csv, [:limit, :offset, :index] :environments do
    # write code here load data from table using limit and offset
    # write the data returned in above query to FILE_NAME_#{index}.csv
  end
end

一旦看到所有rake任务完成,请按索引组合所有文件。如果要自动化组合文件的过程,则需要编写一些用于过程监视的代码。您必须grep所有活动的rake任务并将其PID存储在数组中。然后每15秒或者其他东西尝试使用来自数组的PID来获取进程的状态。如果进程不再运行,则从数组中弹出PID。继续这个直到数组为空,即所有耙都完成,然后按索引合并文件。 希望这会对你有所帮助。谢谢!