mongodb数据库,批量插入性能测试记录

spring boot 框架下,操作mongodb数据库
maven:spring-data-mongodb:2.1.3.RELEASE

mongo数据库用的是本地的mongo,所以环境不一样,可能结果不一样。但趋势应该是一样的。

测试保证每次批量插入时,库里的数据量都是一样的,大概是50万左右。

每条数据大概15个字段左右,存的都是普通的数据,没有过长的数据。每条数据转换成行数据,大概就是100字节左右。

除了id索引外,还有两个字段有索引。

简易代码如下:

//CheckedData是存入mongo对应的实体类
List<CheckedData> checkedDataList = new ArrayList<>();
checkedDataList.add(...);
long start01 = System.currentTimeMillis();
mongoTemplate.insert(checkedDataList, CheckedData.class);
long start02 = System.currentTimeMillis();
log.info("每次插入时间:"+(start02-start01));

我批量上传,每批list的大小分为1条,100条,500条,1000条,2000条,5000条,10000条,15000条,30000条这些维度去试的。

结果如下:

1、批量上传1条,其实就是单条插入,插入时间基本在1ms~5ms内
在这里插入图片描述
2、批量上传100条,插入时间基本在10ms~20ms内
在这里插入图片描述
3、批量上传500条,插入时间基本在50ms~60ms内
在这里插入图片描述
4、批量上传1000条,插入时间基本在400ms~450ms内
在这里插入图片描述
5、批量上传2000条,插入时间基本在800ms~900ms内
在这里插入图片描述
6、批量上传5000条,插入时间基本在1100ms~1200ms内
在这里插入图片描述
7、批量上传10000条,插入时间基本在1600ms~1700ms内
在这里插入图片描述
8、批量上传15000条,插入时间基本在2100ms~2300ms内
在这里插入图片描述
9、批量上传30000条,插入时间基本在3900ms~4000ms内
在这里插入图片描述

根据上面的测试,如果我们需求是插入30万条数据,那么批量插入不同的条数,对应的时间如下,我们取上面时间区间的最大值计算:

300000数据,如果每批1条,按1条1ms算,那么共花费1*300000ms=300000ms;

如果每批100个,那么需要3000批,即花费3000*20ms=60000ms;

如果每批500个,那么需要600批,即花费600*60ms=36000ms;

如果每批1000个,那么需要300批,即花费300*450ms=135000ms;

如果每批2000个,那么需要150批,即花费150*900ms=135000ms;

如果每批5000个,那么需要60批,即花费60*1200ms=72000ms;

如果每批10000个,那么需要30批,即花费30*1700ms=51000ms;

如果每批30000个,那么需要10批,即花费10*4000ms=40000ms;

结论:

综上,500条左右是最优批量插入的条数,
单条插入是最慢的,
超过1000条会变慢许多,
但到了30000条一批,速度又会快起来,
所以如果内存足够大,服务器足够好,而要插入的数据又特别多的时候,一批30000条也是可以的。

以上数据仅仅是在我的电脑上测试的,可能会有误差,仅供参考。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值