我有一个应用程序,可以向Whole Foods的供应商提供销售,并按商店和商品处理每日销售数据。所有父信息都存储在一个下载的CSV中,每月约10,000行。
导入过程在导入销售信息之前检查新商店。
我不知道如何跟踪ruby和rails中进程的“时间”,但我想知道一次处理一行到每个表或处理一个表的文件是否“更快”(商店)然后到另一个表(销售)
如果它在任何事情上都很重要,虽然商店可能会被关闭(并且导入也会检查这些商店),但通常不会添加新商店,因此通过商店的扫描可能只会添加一些新条目,而csv的每一行被添加到销售中。
如果这不合适 - 我道歉 - 仍在解决规则的问题
答案 0 :(得分:1)
当使用Ruby处理数据时,你应该关注内存消耗。
使用Ruby中的csv处理,你可以做的最好是逐行阅读:
file = CSV.open("data.csv")
while line = file.readline
# do stuff
end
这种方式无论文件中有多少行,一次只有一个(+先前处理过的)加载到内存中 - GC将在程序执行时收集已处理的行。这种方式几乎没有内存消耗+它也会加速解析过程。
我想知道它是否会更快'一次处理一行 到每个表或处理一个表(存储)的文件,然后 到另一张桌子(销售)
我会一次一行地去每张桌子。