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

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

我正在构建一个使用 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/

相关文章:

php - 行之间的时间差

php - SQL CSV 文件 - 跳过特定列号之后的所有列

python - pymysql SELECT 查询,其中包含用户作为输入提供的表字段

PHP MySQL 嘉宾出席名单

ruby-on-rails - rails 中的 ruby​​ 字符串格式

ruby-on-rails - 我如何构造此 Rails/PostgreSQL 查询以根据模型子项的属性返回模型实例?

ruby-on-rails - 一次将 CSV 文件导入多个模型

ruby-on-rails - 为返回 XML 的 Controller 操作编写规范 -- Ruby on Rails

java - 苹果推送通知服务(APNS): Feedback Service Response has missing byte?

ruby-on-rails - 如何设置两个域以使用 Passenger 指向同一个应用程序但具有不同的 Rails 功能?