每秒插入8.5w条数据不再是mysql单表insert的极限
很多同学都有这样的困扰:
确实,如果你的项目体量不大,不管是数据层还是应用层,都很难接触到性能优化
但是
我们可以自己造数据啊
今天我带来了一个demo,不仅让你能把多线程运用到实际项目中,还能用它往数据库造测试数据,让你体验下大数据量的表优化
定个小目标,今天造它一亿条数据
首先搞清楚,不要为了用技术而用技术,技术一定是为了实现需求:
1、为了尽可能模拟真实场景,我们new个对象
靠phone和createTime俩字段,能大大降低数据重复度,抛开别的字段不说,这俩字段基本能保证没有重复数据,所以我们最终的数据很真实,没有一条是重复的,而且,最后还能通过createTime来统计每秒插入条数,nice~
2、想要插的更快,我们得使用MyISAM引擎,并且要主键自增(不知道为什么的兄弟私聊我或者评论区留言,咱们今天主题不是讲数据库本身)
ddl:
3、为了模拟真实数据,我们得用到一些枚举值和随机算法
部分属性枚举值:
随机获取person
5、orm层用的mybatis
准备工作完成,开始写核心逻辑
思路:1、想要拉高插入效率,肯定不能够一条一条插了,必须得foreach批量插入,经测试,单次批量3w条以下时性价比最高,并且不用修改mysql配置 2、文章开头说了,得开多个线程异步插入,我们先把应用层效率拉满,mysql顶不顶得住 3、我们不可能单次提交一亿次insert,这谁顶得住,而且大量插入操作会很耗时,短时间内完不成,我们不可能一直守着,我的方案是用定时任务 。。。
算了屁话不多说,直接上demo
我的线程池配置,我电脑配置比较拉跨,只有12个线程…
测试

在这里插入图片描述
现在表是空的

在这里插入图片描述
看下数据库

在这里插入图片描述
已经插入了1.04亿条数据,需求完成
第一条数据是15:54:15开始的,耗时大概25min

在这里插入图片描述
再来从数据库中看下一秒插入多少条,直接count某秒即可

在这里插入图片描述
一秒8.5w,嘎嘎快
来说下demo中核心的几个点:
可以看看之前的测试效率记录
10 * 100 * 1000:22-23s 10 * 50 * 2000:19-20s 10 * 10 * 10000 :18-20s
可以参考记录进行深度调优
哦对了,想效率更快的话,表不要建索引,insert时维护索引也是一笔不小的开销
完整demo给你们放码云了 博主贼贴心,clone下来改下jdbc就能跑,记得建表~
ok我话说完
另外在寻找专业定制网站,微信小程序,APP开发定制企业官网,小程序开发 APP开发及微信商城开发以及定制营销型网站、品牌官网、小程序、手机网站、APP 微信网站的策划设计这一类定制开发时,一定要仔细筛选并辨认,没有实际技术人员的千万不要合作。
网友评论