记一次Mock100万数据到数据库遇到的问题

本文记录了一次在Mock100万数据到MySQL时遇到的批量插入速度慢的问题。通过Google搜索、加Log和Debug,发现问题是由于内部的慢查询拦截器导致的大量内存复制。解决方案是优化String替换操作,使用Pattern和Matcher提高性能。批量插入能显著减少日志量和解析次数,提高效率,最终成功解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


背景


需要Mock100万数据到数据库。


逐条插入


如果一条一条的插入,模拟1000条,花费了8秒,100万的话,大约花费3个小时,太慢。


批量插入


问题出现

1000条一次进入插入。

consoleLogger.info("This Batch, {}, Time start : {}", batchTotal, s);
orderMapper.batchInsert(orderList);
consoleLogger.info("This Batch, {}, Time elapsed : {}", batchTotal, System.currentTimeMillis() - s);

按照理论,应该比逐条快很多,但是,结果花费了14秒,非常奇怪,开始查找原因。


求助Google

看到两篇有价值的帖子:

http://www.cnblogs.com/aicro/p/3851434.html

http://blog.jobbole.com/85657/

试着改成100条一个批次,很神奇,1000条数据插入,10个循环,总计60毫秒就完成了。难道用MyBatis操作MySQL数据库的批量操

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值