解决大量数据插入数据库导致报错、超时

1.设置内存大小,防止内存溢出

ini_set('memory_limit','1024M');

2.利用缓存:redis管道(Pipelining)。非阻塞请求/响应服务器能够实现异步处理,即使旧的请求还未被响应,也能处理新的请求。

a.首先构造redis命令的文本文件:set key value......
b.将这些命令转化成Redis Protocol :"3\r\n$3\r\nset\r\n$3\r\nkey\r\n$5\r\n$5\r\nvalue\r\n"...
c.redis-cli --pipe执行大量数据插入命令

3.批次插入,如:每1000条执行一次批量插入语句

$arr = array_chunk($array,5000);
foreach($arr as $k=>$v){
    $sql = $queryBuilder->batchInsert('user', ['name', 'age'], $v);
}

4.使用事务提高插入性能
使用事务可以在插入出错时进行回滚。
且在进行一个INSERT操作时,MySQL内部会建立一个事务,在事务内才进行真正插入处理操作。通过使用事务可以减少创建事务的消耗,所有插入都在执行后才进行提交操作。

你可能感兴趣的:(解决大量数据插入数据库导致报错、超时)