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条也是可以的。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/499802.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[转载] --- 数据库基本知识

里面的很多点&#xff0c;我之前都总结过&#xff0c;但是感觉这篇把这些都连起来了&#xff0c;总结的挺好&#xff0c;转载保存一下 【从入门到入土】令人脱发的数据库底层设计前言 说到数据库这个词&#xff0c;我只能用爱恨交加这个词来形容它。两年前在自己还单纯懵懂的时…

java中使用lua脚本

第一步&#xff1a; windows下&#xff0c;先下载安装lua&#xff08;其他操作系统自行百度&#xff0c;我只说主要基本的流程&#xff09; 下载地址 我选了lua-5.3.4_Win64_bin.zip为例 第二步&#xff1a; 解压到D盘根路径的lua文件夹中 配置环境变量&#xff0c;增加D:\l…

java中使用lua操作redis

java中使用lua脚本参见我的上一篇文章 lua基础 本篇简单说下java中使用lua操作redis的示例&#xff0c;如下&#xff1a; 先引入jedis <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.9.0</…

spring-boot发送邮件失败 AuthenticationFailedException: 535 Authentication Failed

发送邮件失败&#xff0c;平时一直是好的&#xff0c;突然有天开始失败了&#xff0c;最后是发现邮箱密码失效了。。。 有的邮箱&#xff0c;需要定期更改密码。

windows本地项目开机自启动设置

记录下&#xff0c;本地项目开机自启动 vue项目 新建vue.bat文件 echo off :: nodejs安装目录下的nodevars.bat set nodevars "D:\Program Files\nodejs\nodevars.bat" :: 切换到D盘 d: :: 移动到需要启动的目录 cd D:\Users\curry.zhang\IdeaProjects\data-chec…

互联网广告行业(01)------ 初识了解DSP、SSP、ADX

最近有幸接触到公司的一个实时竞价系统&#xff0c;也算是公司的核心系统之一了&#xff0c;增加了很多新的知识&#xff0c;可能有点乱&#xff0c;先总结一波&#xff1a; 广告行业&#xff0c;先介绍概念 广告主&#xff1a;需要打广告的站点&#xff0c;一般就是卖东西的…

互联网广告行业(02)------OpenRTB(实时竞价)规范解读

RTB&#xff1a;(Real Time Bidding实时竞价)&#xff0c;RTB是一种广告交易的方式 OpenRTB&#xff1a;简单理解就是一个行业规范&#xff0c;是一个为了促进RTB方式广告的标准&#xff0c;有对应的api文档&#xff0c;大家都按照这个规范去传参数&#xff0c;那么发送方和接收…

[go]---从java到go(01)---基础与入门上手

为什么用go&#xff0c;就是为了快速响应并且高并发。 一样的逻辑&#xff0c;用java也能实现&#xff0c;但用go可能就比java快点。 如果你很熟练java了&#xff0c;那么学习go就会很快。 go的社区环境相比java没那么大&#xff0c;但一般问题都足够了。 go是谷歌出品&#xf…

[go]---从java到go(02)---一个简单的handler模式的实现

类似于责任链模式吧&#xff0c;不同类实现相同的入参&#xff0c;执行不同的操作&#xff0c;一个执行完再确定要不要执行下一个。 用go实现&#xff1a; 1.定义一个接口 后面所有的handler都要实现这个接口的handler方法 type IHandler interface {/**true 表示通过 false…

[数据库] --- clickhouse

clickhouse是一个列式数据库&#xff08;系统&#xff09;。 官方文档 官网比较全&#xff0c;但也可以说比较杂&#xff0c;下面就是我个人的一些总结&#xff0c;以及在实际工作中的应用场景。 1.clickhouse适用场景 clickhouse主要适合那种大量数据做分析的场景。 一般数据…

错误记录:expected single matching bean but found 2

springboot项目&#xff0c;之前有mysql数据源&#xff0c;现在又新增了clickhouse数据源&#xff0c;于是 新增了一个clickhouseDatasource的配置bean&#xff0c;如下&#xff1a; Beanpublic DataSource dataSource() throws PropertyVetoException {HikariConfig config …

消息队列(5):RocketMQ

介绍 RocketMQ是一款成熟的分布式消息中间件。 由阿里2012年开源&#xff0c;2017年成为Apache顶级项目。 源码是java写的。 高性能&#xff0c;低延迟&#xff0c;高可靠。历经多次双十一大促&#xff0c;整体很稳定。 RocketMQ对比其他mq的优势 对比kafka和Rabbitmq&#…

[错误记录] --- clickhouse报错Decimal value is too small

java操作clickhouse数据库&#xff0c;执行insert的时候&#xff0c;报错&#xff1a; Exception in thread "main" ru.yandex.clickhouse.except.ClickHouseException: ClickHouse exception, code: 69, host: xx.xx.xx.xxx, port: xxxx; Code: 69, e.displayText(…

[错误记录] --- rocketmq批量消费设置参数的问题

rocketmq想支持批量消费&#xff0c;于是便设置以下参数&#xff1a; consumer.setConsumeMessageBatchMaxSize(1000);这样是正确的&#xff0c;但由于业务要求&#xff0c;还想再设置大点&#xff0c;于是设置成这样&#xff1a; consumer.setConsumeMessageBatchMaxSize(10…

rocketmq批量消费

rocketmq默认就是可以批量消费的&#xff0c;但需要设置多个参数一起配合。 我们只需要知道他是怎么消费的&#xff0c;就可以很精准的设置他的批量消费参数。 我们看看DefaultMQPushConsumer源码中的这几个参数&#xff1a; /*** 消费消息线程&#xff0c;最小数目*/private …

阿波罗配置中心(apollo)的个人看法

阿波罗应该是近几年比较火的一个分布式配置中心了&#xff0c;说说我个人的理解&#xff0c;希望对一些人有用吧。 首先从使用者的角度想 我们怎么用配置中心的&#xff1f; 1.得有个页面&#xff0c;能有权限管理&#xff0c;能有创建配置key-value。 在阿波罗中&#xff…

架构师成长之路

一个架构师要掌握的最基本的数学知识 知识点备注log三角函数二项式定理多项式合并极限幂函数泰勒级数傅里叶级数概率

消息队列(4):Kafka

介绍 kafka是一个支持分布式的消息系统&#xff0c;基于发布/订阅模式。 kafka由LinkedIn公司开发&#xff0c;2010年成为Apache顶级项目。 源码是由java写的。 基本概念 1、Broker kafka集群中的每台机器&#xff0c;都叫一个broker. 2、Topic&#xff08;主题&#xff0…

clickhouse的ReplacingMergeTree引擎实战

学习ReplacingMergeTree引擎&#xff0c;首先你得了解clickhouse的MergeTree引擎&#xff0c;因为ReplacingMergeTree引擎是MergeTree引擎的一个扩展版引擎&#xff0c;他拥有和MergeTree一样的功能&#xff0c;同时新增了一个删除相同主键数据的功能。 我们知道&#xff0c;cl…

clickhouse 分片

我们知道mysql数据库如果想做分片&#xff0c;需要使用第三方组件&#xff0c;这是因为mysql在设计之初就没有太多考虑分布式等问题。而clickhouse作为新生代性能之王&#xff0c;分片也是必须的功能。基本上从2015年之后的各种数据库也罢&#xff0c;框架也罢&#xff0c;都开…