我正在构建一个使用 Heroku 部署的 Rails 应用程序,我需要能够导入和处理大型 csv 文件(5000 多行)。
使用内置 ruby csv 解析器在 Controller 中执行此操作需要 30 秒以上,并导致 Heroku dyno 超时
我正在考虑将 csv 放入数据库,然后使用elasted_job对其进行处理,但这种方法限制在 4200 多行。
我正在使用 mysql 和 longtext 作为包含文件的列,因此数据库应该能够处理它
对此用例有什么想法吗?
最佳答案
- 为了更快地导入 csv,我的建议是使用 gem smarter_csv,您可以从他们的网站 tilo/smarter_csv 中进行 cek
- 如其网站所述:> 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事件作业结合使用)
关于mysql - 如何使用 Rails 最好地导入和处理非常大的 csv 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45718986/