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

How to best import and process very large csv files with rails

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

使用内置的 ruby csv 解析器在控制器中执行此操作需要 30 多秒并导致 Heroku dyno 超时

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

我正在为包含文件的列使用 mysql 和长文本,因此数据库应该能够处理它

对这个用例有什么想法吗?

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

下面是导入文件的示例代码

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

读取文件后,将数据记录传递给resque,然后在后台导入(如果您使用rails 4.2 以上,您可以结合rails 活动作业)