每秒插入8.5w条数据不再是mysql单表insert的极限

每秒插入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  微信网站的策划设计这一类定制开发时,一定要仔细筛选并辨认,没有实际技术人员的千万不要合作。

你可能感兴趣的:(每秒插入8.5w条数据不再是mysql单表insert的极限)