如何使用rails最好地导入和处理非常大的csv文件

时间:2017-08-16 16:44:51

标签: mysql ruby-on-rails ruby heroku delayed-job

我正在构建一个我使用Heroku部署的rails应用程序,我需要能够导入和处理大型csv文件(5000多行)。

使用内置的ruby csv解析器在控制器中执行它需要30秒以上并导致Heroku dyno超时

我正在考虑将csv放入数据库,然后使用delayed_job处理它,但这种方法仅限于4200行。

我对包含该文件的列使用mysql和longtext,因此db应该能够处理它

有关此用例的任何想法吗?

1 个答案:

答案 0 :(得分:2)

  • 更快地导入csv,我的建议是使用gem smarter_csv,你可以从他们的网站tilo/smarter_csv
  • 如其网站所述:> smarter_csv是一个Ruby Gem,用于将CSV文件更智能地导入为Hashes数组,适用于使用Mongoid或ActiveRecord进行直接处理,以及使用Resque或Sidekiq进行并行处理
  • 我使用这个宝石并结合resque
下面的

是导入文件的示例代码

  n = SmarterCSV.process(params[:file].path) do |chunk|
    Resque.enqueue(ImportDataMethod, chunk)
  end

读取文件后,将数据记录传递给resque,然后在后台导入(如果使用上面的rails 4.2,则可以与rails active job结合使用)