所以我发现了很多文章,人们在使用rails将大数据导出到CSV时遇到问题。我能够做到这一点,但每20k行需要大约40秒。
是否有人克服了这个问题?我在过去的几个小时到处搜索,找不到适合我的东西。
谢谢!
答案 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。继续这个直到数组为空,即所有耙都完成,然后按索引合并文件。 希望这会对你有所帮助。谢谢!