【发布时间】:2017-06-06 13:41:45
【问题描述】:
好的,所以我得到了大约 100k-1M 行的文本,我总是将它们导入数据库。我使用的代码如下:
$lines = new SplFileObject('/home/file.txt');
while(!$lines->eof()) {
$lines->next(); //Skipping first line
$row = explode(',',$lines);
for($i = 0; $i<4; $i++){
if(!isset($row[$i])){
$row[$i] = null;
}
}
$y = (float) $row[1];
$z = (float) $row[2];
$load_query = "INSERT IGNORE INTO new (datetime_gmt,field2,field3)
VALUES ('".$row[0]."','".$y."','".$z."');";
if(!$mysqli->query($load_query)){
die("CANNOT EXECUTE".$mysqli->error."\n");
}
}
$lines = null;
但是,它花费的时间太长了。有没有更快的方法,还是我坚持使用这种方法?
PS。我不想使用 MySQL 的“INSERT DATA INFILE”。
【问题讨论】:
-
您只需要阅读 castis 引用的内容,但您还应该将批次限制为 20-50 个值(例如)
-
您可以分块编写批量插入语句,以尽量减少对数据库的调用次数。如果你不关心插入数据库的顺序,那么你可以使用支持线程的语言如C(++,#)、Go、Rust、Java、D、Swift、Scala等... .
-
@castis 对不起,我很难找到这有什么帮助。我知道我可以使用插入添加多行,但是对于 100k 行我该怎么做呢?
-
如何将数据插入数据库?在每个 $load_query 之后?
标签: php mysql splfileobject