我有一个大的csv文件(大约700MB),我试图解析并插入到MySQL数据库中。我逐行读取csv(大约4x10 ^ 6行)并解析要插入的记录。然后,我将记录插入到数据库中,每批约10k条记录。解析期间有一些事情,例如使用11d 12:34:56
将格式preg_match
的持续时间转换为小时数。
preg_match('/(?P<days>\d+)d (?P<hours>\d+)?P<minutes>\d+)?P<seconds>\d+)/', $hoursUsed, $matches);
脚本大约需要40分钟才能完全解析文件并将所有记录插入数据库。我在这里的问题是: *预计什么时间?我想知道40分钟是否正常? *解析csv文件是否可以
我在PHP中解析大小约为700MB的文件(csv)(大约4x10 ^ 6行),但解析文件需要大约40分钟。我正在尝试优化解析,但只能在45到40分钟内优化它。我的问题是:
仅供参考我正在使用CakePHP。
答案 0 :(得分:2)
使用LOAD DATA INFILE
会大大加快速度。只需在CHAR
字段中加载持续时间值,让MySQL稍后处理它。
这样,您就可以将数据处理留给数据库,这将比PHP快得多。
此外,对于700MB和400万条记录,40分钟听起来并不算太糟糕。当然这一切都取决于代码,机器等。
答案 1 :(得分:0)
尽可能使用LOAD DATA INFILE
命令。这很疯狂。
http://dev.mysql.com/doc/refman/5.1/en/load-data.html
您可以使用选项FIELDS TERMINATED BY ','
和LINES TERMINATED BY '\n'
您应该能够从PHP执行此类语句,但请注意,文件路径必须已满且可供MySQL访问。此外,如果您的mysql服务器位于PHP文件系统的另一台主机上,您可能需要一种解决方法。