CSV导入到多个表 - 速度考虑

时间:2016-10-24 20:02:36

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

我有一个应用程序,可以向Whole Foods的供应商提供销售,并按商店和商品处理每日销售数据。所有父信息都存储在一个下载的CSV中,每月约10,000行。

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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

  

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

我会一次一行地去每张桌子。