【问题标题】:rails csv import ram consumption issue postgresrails csv import ram消费问题postgres
【发布时间】:2016-08-19 14:15:25
【问题描述】:

我已经在我的 rails 应用中实现了 CSV 导入。现在的问题是内存消耗太高。总数我的 CSV 中的记录数约为 3600,我的 ram 消耗量约为 600MB - 800MB,并且在退出导入方法后甚至没有被刷新。

我可以在 roo 问题列表https://github.com/roo-rb/roo/issues/179 中看到类似的问题

我正在努力 导轨 4.2.6 红宝石 2.2.4

代码:

data = CSV.foreach(file.path, headers: true)

data.each do |row|

    Model.create(row ....)

    .........

end

最初我的内存消耗是:

GetProcessMem:0x7fd3083b2a30 @mb=204.52734375

退出方法前:

GetProcessMem:0x7fd30ae1a7a0 @mb=289.60546875

完成并重定向到主页后:

GetProcessMem:0x7fd2fb3913d8 @mb=629.61328125

有了这么多内存消耗,我无法在 heroku 上部署它。 这个消耗的内存甚至没有被清理,必须重新启动我的服务器。

任何有解决方案或任何替代方式来导入 csv 的人。

【问题讨论】:

标签: ruby-on-rails postgresql csv memory-leaks


【解决方案1】:

使用此 gem smarter_csv 并使用批处理过程。这会将导入分成组并减少操作所需的内存量

例如。在 500 行组中

    SmarterCSV.process(file, {chunk_size: 500 }) do |array|
      array.each do |sub_array|
        if User.find_by_order_id(sub_array[:order_id]).present?
          User.update_attribute :shipping_id, sub_array[:order_id]
        end
      end
    end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-07
    • 2020-06-28
    • 1970-01-01
    • 2017-12-02
    • 1970-01-01
    • 2019-03-03
    • 1970-01-01
    相关资源
    最近更新 更多