Rails CSV导入ram消耗问题postgres



我已经在rails应用程序中实现了CSV导入。现在的问题是ram消耗太高。总编号。我的CSV中记录的数量大约是3600,我的ram消耗大约是600MB - 800MB,甚至在导出导入方法后都没有刷新。

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

我正在做Rails 4.2.6Ruby 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的解决方案或其他方法

使用这个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

最新更新