开发者社区> 张友东(林青)> 正文

MongoDB 3.4 功能改进一览

简介: MongoDB 下一个大版本 3.4 即将发布,本文主要介绍 3.4 版本在功能特性上做的改进,内容翻译自 Development Release Notes for 3.4 Release Candidate。 分片集群(Sharded Cluster) Membership Awarenes
+关注继续查看

MongoDB 3.4 已经发布,本文主要介绍 3.4 版本在功能特性上做的改进,内容翻译自 [https://docs.mongodb.com/manual/release-notes/3.4/?_ga=1.74729233.2005306875.1453858874)

分片集群(Sharded Cluster)

Membership Awareness

MongoDB 3.4里,分片集群的所有组件,Config server、mongod、mongos 都能相互感知整个分片集群的存在,了解整个分片集群的配置信息,这样能避免分片集群的误配置,比如在现在的版本,有可能会将一个 shard 错误的加到多个 sharded cluster 了。这个特性引入了如下限制

  • 分片集群里 mongod 启动时,必须显式配置 sharding.clusterRole 为 shardsrv
  • 3.4版本的 mongos 不能连接低版本的 mongod

Config server 的 Primary 节点负责负载均衡

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。

General Enhancements

  • 支持 systemd
  • 降低默认的 wiredtiger cache 配置

Changes Affecting Compatibility

可能影响兼容性的修改

升级步骤(Upgrade Procedures)

对新版本功能感兴趣的同学可以下载 MongoDB-3.4 来试玩下。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
手撸一款简单高效的线程池(五)
在之前的内容中,我们给大家介绍了 C++实现线程池过程中的一些常用线优化方案,并分析了不同机制使用时的利弊。这一篇,是线程池系列的最后一章。我们会介绍一下 CGraph 中的 threadpool 如何使用,给出性能对比,并对接下来的工作做一些展望。让我们在线程池性能优化和功能提升的道路上,越走越远。
5 0
心中有“树”!图文并茂介绍数据结构中常见的树(二)
计算机科学家尼古拉斯·沃斯(Niklaus Wirth)曾说过:编程=数据结构+算法 ,可见数据结构在编程中的重要性。
5 0
手撸一款简单高效的线程池(三)—— 性能优化!
在上一章中,我们给大家介绍了一些 C++线程池中的优化思路和实现方案。这一章中,我们将继续这个主题,接着聊线程池中还有可以“压榨”的空间。为实现我们吹过的牛 B,而继续编程
5 0
手撸一款简单高效的线程池(四)
在前几章的内容中,我们给大家介绍了一些 C++线程池中的优化思路和实现方案。这一章中,我们来聊一聊在编程实现过程中,一些工程层面的优化。让我们的代码执行的速度,跟得上自己的思路。
4 0
心中有“树”!图文并茂介绍数据结构中常见的树(一)
提到数据结构中的树(Tree) ,大家应该都不陌生,相关书籍中都有大段篇幅的介绍,刷 Leetcode 的时候会遇到很多相关问题。很多人往往会用 “手写红黑树” 来形容面试难度很高。
10 0
在函数中使用局部变量并且通过局部变量返回函数值的方案来了
感谢小游戏可视化体验官群中的一位叫做“@天羽地王”的朋友提供的思路。本文内容主要包括如何在函数中使用局部变量并且通过局部变量来返回函数的结果值。
12 0
微信小游戏推广运营专业术语汇总
本文内容包括与微信小游戏运营推广相关的专业术语的汇总和解释。作为一个游戏开发者,不光要知道如何做游戏,也要知道如何让别人玩自己做的游戏。
5 0
如何在小游戏制作工具中使用云函数
本节试图以最简单的方式带你了解如何在小程序后台申请和开通云开发服务,创建并编写第一个云函数并在小游戏制作工具中对其进行调用。
11 0
+关注
张友东(林青)
阿里云高级技术专家
105
文章
18
问答
来源圈子
更多
阿里云数据库:帮用户承担一切数据库风险,给您何止是安心!支持关系型数据库:MySQL、SQL Server、PostgreSQL、PPAS(完美兼容Oracle)、自研PB级数据存储的分布式数据库Petadata、自研金融级云数据库OceanBase支持NoSQL数据库:MongoDB、Redis、Memcache更有褚霸、丁奇、德哥、彭立勋、玄惭、叶翔等顶尖数据库专家服务。
+ 订阅
相关文档: 云数据库 OceanBase 版 可信账本数据库 云原生关系型数据库 PolarDB PostgreSQL引擎
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载