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

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内部会建立一个事务,在事务内才进行真正插入处理操作。通过使用事务可以减少创建事务的消耗,所有插入都在执行后才进行提交操作。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,268评论 19 139
  • 文章转摘自:http://www.cnblogs.com/mushroom/p/4738170.html 性能相关...
    奋斗live阅读 7,043评论 2 10
  • 转载:Redis性能问题排查解决手册(七) 阅读目录: 性能相关的数据指标 内存使用率used_memory 命令...
    meng_philip123阅读 4,287评论 0 30
  • # 004Ta要的是陪伴,而不是600块 不要用钱,打发你的家人 ——周董《外婆》:他要的是陪伴,而不是600块,...
    打嚏喷阅读 656评论 0 0
  • 大家好 我叫王芮加 我今天上一年级了 上午老师给我们看的猫和老鼠 还玩了贴鼻子的游戏 老师还夸奖我两次 下午我们发...
    王芮加阅读 182评论 0 0