【问题标题】:CSV Import to multiple tables - speed considerationCSV 导入到多个表 - 速度考虑
【发布时间】:2017-03-06 17:06:26
【问题描述】:

我有一个应用程序,它将获取 Whole Foods 供应商的销售数据,并按商店和商品处理每日销售数据。所有家长信息都存储在一个下载的 CSV 文件中,每月约有 10,000 行。

导入过程会在导入销售信息之前检查新商店。

我不知道如何在 ruby​​ 和 rails 中跟踪进程的“时间”,但我想知道一次处理每个表的一行或处理一个表的文件是否会“更快”(商店),然后到另一张桌子(销售)

如果它对任何事情都很重要,尽管商店可能已关闭(并且导入也会检查),但通常不会添加新商店,因此扫描商店可能只会添加一些新条目,而 csv 的每一行已添加到销售额中。

如果这不合适 - 我道歉 - 仍在制定规则的问题

【问题讨论】:

  • 10k 行 csv 即使有效率较低的解决方案也无需担心 :)
  • @AndreyDeineko 那么我应该开始担心什么级别的行呢?
  • 我的意思是你总是担心效率是对的——这绝对是一件好事。但我会说至少几十万是合适的时间。但我会在稍后添加一些建议的答案

标签: ruby-on-rails csv file-upload


【解决方案1】:

在使用 Ruby 处理数据时,您应该关注内存消耗。

使用 Ruby 中的 csv 处理,你能做的最好的就是逐行阅读:

file = CSV.open("data.csv")
while line = file.readline
  # do stuff
end

这样,无论文件中有多少行,一次总是只有一个(+ 先前处理的)加载到内存中 - GC 将在您的程序执行时收集已处理的行。这种方式几乎不消耗内存+它也会加快解析过程。

我想知道一次处理一行是否会“更快” 到每个表或处理一个表(存储)的文件,然后 到另一张桌子(销售)

我会在每张桌子上一次一行。

【讨论】:

  • 我实际上在我的代码中使用了每一行。我担心的是,循环一次以在一个表中查找新记录,然后再次循环以从每一行输入不同的数据,或者在每一行上同时执行这两个操作,是否“更有效”。也许您认为 10K 行不会产生太大影响的评论就是该问题的答案
  • @MageeWorld 我肯定会去单循环而不是两个循环,无论如何都会完成,那么为什么要打扰两个循环呢?只需在处理每一行时放置整个逻辑就可以了。
  • @Andrey-Dineko 谢谢你——当我运行我的测试时,我分别运行了它们——但总的来说我确实将它们结合起来(我有另一个应用程序可以多次调用不同的 json 文件的在线资源并将它们处理到不同的表中,所有这些都依赖于较早的数据并在一个循环中运行)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-06
相关资源
最近更新 更多