需要将大量csv文件插入数据库

时间:2012-03-06 23:10:58

标签: php mysql performance csv bigdata

我被要求做一个csv - >在CSV文件上插入mysql。

他们拥有20k的csv文件,其中包含100到100k行的数据。

所以这就是我认为我可以做的事情:

在我的机器上,我可以使用一个简单的命令将所有文件加入到1中:

 copy *.csv  combined.csv 

然后处理该文件,然后使用php fgetcsv处理该文件并将其插入数据库。

我可以编写一个php程序来读取目录处理每个文件,并在完成后将其传输到另一个文件夹。

专用服务器可用

具有8gb可用内存的良好PC;

你有什么建议?

2 个答案:

答案 0 :(得分:3)

使用LOAD DATA INFILE。最好逐个文件插入数据。

LOAD DATA INFILE '/path/to/data.csv' 
INTO TABLE `table` 
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\n' 

以批处理模式运行20k文件。将密码放入命令以防止它被询问。

#!/bin/bash

for f in /path/to/*.csv;
do 
    mysql -uroot -pPASSWORD DATABASE \
    -e "LOAD DATA INFILE '$f' 
        INTO TABLE `table` 
        FIELDS TERMINATED BY ',' 
        LINES TERMINATED BY '\n'"
    echo $f is imported ...
done;

答案 1 :(得分:0)

按文件逐个进行是一个更好的主意。如果出现问题,这允许重新启动,并且所有文件都相同吗?

您可以使用php脚本生成sql命令并执行它们。