前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >mongodb 3.4与 mongodb 3.2性能对比

mongodb 3.4与 mongodb 3.2性能对比

原创
作者头像
周奇
修改于 2017-07-10 02:14:29
修改于 2017-07-10 02:14:29
6.4K0
举报
文章被收录于专栏:周奇的专栏周奇的专栏

2016年12月1日,mongodb 发布 3.4 版本,按照官方 release note,分片集群和复制集合相较 3.2 版本主要有如下改动:

分片集群(Sharded Cluster)部分:

  • Membership Awareness

MongoDB 3.4 里,分片集群的所有组件,Config server、mongod、mongos 都能相互感知整个分片集群的存在,了解整个分片集群的配置信息,这样能避免分片集群的误配置,比如在现在的版本,有可能会将一个 shard 错误的加到多个 sharded cluster 了。这个特性引入了如下限制:分片集群里 mongod 启动时,必须显式配置 sharding.clusterRole 为 shardsrv;3.4 版本的 mongos 不能连接低版本的 mongod。

MongoDB 3.2 及以前版本里,分片集群的负载均衡由 mongos 负责,多个 mongos 会抢一个分布式锁,抢锁成功的 mongos 会对执行负载均衡任务,在 shard 间迁移 chunk;在 3.4 版本里,负载均衡将由 Config server 的 Primary 节点负责,预计会在负载均衡并发度及效率上会有大的提升。

  • 不再支持 SCCC Config server 的模式

MongoDB 3.2 版本引入了复制集模式的 Config Server(CSRS 模式),在此之前,Config server 由多个镜像的单节点组成(SCCC 模式),3.4 版本里,MongoDB 将不再支持 SCCC 模式的 Config server。所以往 3.4 版本升级时,如果 Config server 还是 SCCC 模式,需要先 升级为 SCRS 模式

  • Sharding Zones

分片集群里引入了 Zone 的概念,主要取代现在的 tag-aware sharding 机制,能将某些数据分配到指定的一个或多个 shard 上,这个特性将极大的方便 sharding cluster 的跨机房部署,详细了解 Sharding zone 机制

  • Faster Balancing

使用 wiredtiger 引擎时,moveChunk 的 secondaryThrottle 选项默认设置为 false,即不用等待迁移的数据复制到 secondary 节点 ; 支持并行的 chunk 迁移,对于包含 N 个 shard 的 sharding 集群,MongoDB 最多可以同时跑 N/2 个迁移任务。

复制集(Replica Set)部分

  • majority WriteConcern 支持配置是否刷 journal

配置复制集时,增加 writeConcernMajorityJournalDefault 选项,默认为 true,即当指定 WriteConcern 为 majority 时,数据写到大多数节点并且 journal 成功刷盘后,才向客户端确认成功;如果为 false,数据写到大多数节点的内存,就向客户端确认。

  • 支持配置 Primary 追数据的时间

配置复制集时,增加 catchUpTimeoutMillis 选项,默认为 2s,来指定新选举出来的 Primary 从其它拥有更新数据的节点追数据的时间,增加该时间能最大限度的减少需要 rollback 的数据,但可能增加整个 failover 的时间,该选项只能在 protocolVersion 为 1 时使用。

  • 支持 Linearizable Read Concern

"linearizable" Read Concern 级别保证,一定能读到 WriteConcern 为 majority,并且确认时间在读请求开始之前的数据,该级别仅在查询结果只有单个文档的情况下有效。

  • 提升全量同步

在拷贝数据的时候,同时建立所有的索引(以前版本只有id 索引是在同步数据时建立的);拷贝数据的阶段,secondary 不断拉取新的 oplog,确保 secondary 的 local 数据库有足够的空间来存储这些临时数据。

  • Decimal Type

MongoDB 3.4 新增对 decimal128 format的支持,最多支持 34 位小数位。跟 Double 类型不同,decimal 数据存储的是实际的数据,无精度问题,以 9.99 为例,decimal NumberDecimal("9.99") 的值就是 9.99; 而 Double 类型的 9.99 则是一个大概值 9.9900000000000002131628......

  • Aggregation

MongoDB 在 3.4 版本增加了大量的 aggregation 操作符,功能更加强大了,举几个例子 bucket 能对方便的对数据进行分类;

$grahpLookup 在 3.2 的$lookup 的基础上更进一步,能支持更复杂的关系运算了;

$addFields 使得文档操作更丰富了,比如将某些字段求和存储为新的字段。

详细的介绍请参考 Aggregation 部分

  • Collation and Case-Insensitive Indexes

MongoDB 3.4 开始支持 collation,在之前的版本里,文档里存储的字符串,不论是中文还是英文,不论大小写,一律按字节来对比,引入 collation 后,支持对字符串的内容进行解读,可以按使用的 locale 进行对比,也支持对比时忽略大小写。

create、createIndexes、find、aggregate 等涉及字符串操作的命令都支持 collation。

  • 视图(Views)

MongoDB 3.4 里增加了对 只读视图的支持,视图将集合里满足某个查询条件的数据虚拟成一个特殊的集合,用户可以在特殊的集合上做进一步的查询操作。

  • 安全提升(Security Enhancement)

MongoDB 3.4 支持轮转的将复制集、或分片集群的各个节点开启鉴权,不需要停服务,详细步骤参考 Enforce Keyfile Access Control in a Replica Set without Downtime

  • 工具(MongoDB Tools)

MongoDB 3.4 引入 mongoreplay 工具,可用于监控并记录 mongod 上执行的命令并 replay 到另一个 mongod 实例上,该工具可用于代替 mongosniff。

下面针对 Mongodb3.2 和 Mongodb3.4 在 kw 级文档记录下,不同并发时 读写性能的表现进行评测:

测试条件:

ts90 机型,256g 内存,12*800G SSD,2 个 12 核 cpu(已开启超线程)

系统参数:关闭 numa、设置 THP(transparent_hugepage)为 never,swappiness 设置为 0,文件系统 ext4,关闭 atime

mongodb 配置:3.2 和 3.4 版本配置一致,核心参数如下 syncPeriodSecs: 60 journal:enabled: true wiredTiger:engineConfig:cacheSizeGB: 35

测试方法:

1、用 100-200-500-1000 并发,分别导入 1000000w 文档,测试不同并发下写入性能差异;

2、在 1000000 文档基础上,用 100-200-500-1000 并发,80%读取请求,20%更新请求,测试不通并发下,混合场景 mongodb 的吞吐和读取时延。

一、写入速度对比:

二、80%写入、20%读取情况下,系统吞吐(ops/sec)对比

三、混合读写情况相爱,系统读取平均响应耗时对比

结论:

  • 在当前测试的 4 种并发场景下,100 并发时, mongdodb3.4 和 3.2 的表现性能最优;
  • 写入性能上,mongodb3.4 和 3.2 提升有限,约 2%;
  • 混合场景中,mongodb3.4 吞吐高于 3.2,约 7%;
  • 虽然 mongodb3.4 相较于 3.2 在读写性能上提升有限,但 WT 引擎一直在不断优化,且如文初描述 3.4 新版本在同步性能、Aggregation 操作、视图、分片规范和安全性上还是有很多改动,对同步压力大、嵌套 query 较多等业务场景依然建议予以升级尝试。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
高可用mongodb集群(分片+副本):规划及部署
mongodb是最常用的nosql数据库,以下记录如何搭建高可用mongodb集群(分片+副本)
雪人
2022/10/13
3.6K0
MongoDB 分片集群技术
---- 在了解分片集群之前,务必要先了解复制集技术! ----  1.1 MongoDB复制集简介   一组Mongodb复制集,就是一组mongod进程,这些进程维护同一个数据集合。复制集提供了数据冗余和高等级的可靠性,这是生产部署的基础。 1.1.1 复制集的目的   保证数据在生产部署时的冗余和可靠性,通过在不同的机器上保存副本来保证数据的不会因为单点损坏而丢失。能够随时应对数据丢失、机器损坏带来的风险。   换一句话来说,还能提高读取能力,用户的读取服务器和写入服务器在不同的地方,而且,由不同的
惨绿少年
2018/03/30
2.5K0
Mongos 与集群均衡
孔德雨
2016/10/31
12.6K2
Mongos 与集群均衡
MongoDB 基础浅谈
作者:hazenweng,腾讯 QQ 音乐后台开发工程师 MongoDB 作为一款优秀的基于分布式文件存储的 NoSQL 数据库,在业界有着广泛的应用。下文对 MongoDB 的一些基础概念进行简单介绍。 1 MongoDB 特点 面向集合存储:MongoDB 是面向集合的,数据以 collection 分组存储。每个 collection 在数据库中都有唯一的名称。 模式自由:集合的概念类似 MySQL 里的表,但它不需要定义任何模式。 结构松散:对于存储在数据库中的文档,不需要设置相同的字段,并且
腾讯技术工程官方号
2021/09/18
1.5K0
MongoDB从入坑到入迷
背景:我司是一家正处于高速发展,目前拥有数百万用户,年销售额近五十亿的社交电商公司。公司技术部建立之初,为了适应用户量的高速增长,与业务的不断变更迭代,在选用数据库的时候,经过调研对比我们选择了MongoDB。
MongoDB中文社区
2020/06/16
1K0
009.MongoDB分片群集部署
shard:每个分片是分片数据的子集。从MongoDB 3.6开始,必须将分片部署为副本集。
木二
2019/07/01
1.7K0
Mongodb7.0.14集群分片部署
MongoDB 集群分片是一种水平扩展数据库的方法,通过将数据分布在多个物理服务器上,提高系统的性能和可扩展性。分片的核心思想是将数据分成多个部分(称为“分片”),每个分片存储在不同的服务器上,从而分散负载,提高查询和写入性能。
DBA实战
2024/10/10
2590
Mongodb7.0.14集群分片部署
MongoDB分片集群安装部署教程
注:这里我为了节省虚机数量,单台虚机会部署多个MongoDB节点,生产环境中,建议每台机器部署一个节点。
Power
2025/03/02
1570
MongoDB分片原理篇
MongoDB目前3大核心优势:『灵活模式』+ 『高可用性』 + 『可扩展性』,通过json文档来实现灵活模式,通过复制集来保证高可用,通过Sharded cluster来保证可扩展性。
林老师带你学编程
2019/05/25
5.9K0
MongoDB 常用运维实践总结
MongoDB是一个基于分布式文件存储的数据库,其目的在于为WEB应用提供可扩展的高性能数据存储解决方案。下面将以3台机器介绍最常见的集群方案。具体介绍,可以查看官网 https://docs.mongodb.com/v3.4/introduction/。
我是阳明
2021/03/18
2.3K1
MongoDB 常用运维实践总结
mongodb高可用集群部署
计划分几篇文章把近一个月技术上的一些实践记录一下,这第一篇记录一下mongodb的高可用集群部署。
jeremyxu
2019/03/13
2.8K1
MongoDB 分片
当MongoDB存储海量的数据时,一台机器可能不足以存储数据,也可能不足以提供可接受的读写吞吐量。这时,我们就可以通过在多台机器上分割数据,使得数据库系统能存储和处理更多的数据。
为为为什么
2024/09/28
1820
MongoDB 分片
【MongoDB】mongodb4.4版本新特性
MongoDB 4.4 作为每年一度的大版本更新,已经在 7.30 号正式宣布 GA,不像之前的大版本,总是有一些重磅 Feature 的发布,比如 3.6 的 Change Stream & Causal Consistency,4.0 的多文档事务,4.2 的分布式事务,这次的 4.4 版本更像是一个维护性的版本,而且是一个用户期待已久的维护性版本,MongoDB 官方也把这次发布称之为「User-Driven Engineering」,说明新版本主要是针对用户呼声最高的一些痛点,重点进行了改进。
用户5522200
2020/09/24
3.3K0
【MongoDB】mongodb4.4版本新特性
Mongodb分片集群部署
对于单台数据库服务器,庞大的数据量及高吞吐量的应用程序对它而言无疑是个巨大的挑战。频繁的CRUD操作能够耗尽服务器的CPU资源,快速的数据增长也会让硬盘存储无能为力,最终内存无法满足数据需要导致大量的I/O,主机负载严重。为了解决这种问题,对于数据库系统一般有两种方法:垂直扩展和分片(水平扩展)。
拓荒者
2019/09/10
2K0
Mongodb分片集群部署
快速体验mongoDB分片
1、mongodb分片的实质是将数据分散到不同的物理机器,以分散IO,提供并发与吞吐量 2、mongodb分片依赖于片键,即任意一个需要开启的集合都需要创建索引 3、开启分片的集合需要首先在DB级别启用库级分片 4、mongodb的分片由分片服务器,配置服务器以及路由服务器组成 5、基于分片可以结合副本集(replicate set)来实现高可用
Leshami
2018/08/13
1K0
02 . MongoDB复制集,分片集,备份与恢复
MongoDB复制集RS(ReplicationSet): 基本构成是1主2从的结构,自带互相监控投票机制(Raft(MongoDB)Paxos(mysql MGR 用的是变种))
iginkgo18
2021/04/21
1.9K0
02 . MongoDB复制集,分片集,备份与恢复
MongoDB复制集及数据分片详解(二)
数据分片 分片缘由 分片(sharding)是MongoDB用来将大型集合分割到不同服务器(集群)上所采用的方法。当单台服务器CPU,Memory,IO等无法满足需求,就需要将数据分片存放,减缓服务器
小小科
2018/05/04
9060
MongoDB复制集及数据分片详解(二)
MongoDB分片集群搭建
MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写,旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
用户8826052
2021/07/12
1.7K0
Shard 分片集群
要构建一个 MongoDB Sharding Cluster,需要三种角色:
MonroeCode
2018/01/12
1.7K0
mongodb 3.4 集群搭建升级版 五台集群 原
最新版mongodb推荐使用yaml语法来做配置,另外一些旧的配置在最新版本中已经不在生效,所以我们在生产实际搭建mongodb集群的时候做了一些改进。如果大家不熟悉什么是分片、副本集、仲裁者的话请先移步查看上一篇文章:mongodb 3.4 集群搭建:分片+副本集
拓荒者
2019/09/16
7530
相关推荐
高可用mongodb集群(分片+副本):规划及部署
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档