如何通过读取CSV文件(比如2000万行)来保留大量数据。 到目前为止,这已经持续了近1 1/2天并且仅持续了1000万行,我如何批量处理它以使其变得更快并且有可能以并行方式运行它。
我在这里使用代码来阅读CSV,我想知道是否有更好的方法来实现这一点。
答案 0 :(得分:4)
您可以尝试先将文件拆分为几个较小的文件,然后就可以并行处理多个文件。
可能对于文件夹具来说,使用分割
等工具会更快split -l 1000000 ./test.txt ./out-files-
然后,当您处理每个文件并假设您正在插入记录而不是逐个插入它们时,您可以将它们组合成批并进行批量插入。类似的东西:
INSERT INTO some_table
VALUES
(1,'data1'),
(2, 'data2')
为了获得更好的性能,您需要自己构建SQL语句并执行它:
ActiveRecord::Base.connection.execute('INSERT INTO <whatever you have built>')
答案 1 :(得分:2)
由于您希望将数据保存到MySQL进行进一步处理,因此使用MySQL的Load Data Infile会更快。您的架构如下所示:
sql =&#34; LOAD DATA LOCAL INFILE&#39; big_data.csv&#39; INTO TABLE测试 FIELDS终止于&#39;,&#39;包含在&#39; \&#34;&#39; 线路终止于&#39; \ n&#39; (FOO,foo1)&#34;
con = ActiveRecord :: Base.connection
con.execute(SQL)
答案 2 :(得分:1)
关键点:
抱歉我的英语不好。