MongoDB 3.4 功能改进一览

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 来试玩下。

作者简介

张友东,阿里巴巴技术专家,主要关注分布式存储、Nosql数据库等技术领域,先后参与TFS(淘宝分布式文件系统)Redis云数据库等项目,目前主要从事MongoDB云数据库的研发工作,致力于让开发者用上最好的MongoDB云服务。

转载自:http://www.mongoing.com/archives/3586

原文地址:https://www.cnblogs.com/xibuhaohao/p/11226580.html

时间: 2024-10-10 20:37:55

MongoDB 3.4 功能改进一览的相关文章

Mongodb分片(Sharding)功能实现

MongoDB 分片概述 分片 在Mongodb里面存在另一种集群,就是分片技术,可以满足MongoDB数据量大量增长的需求. 当MongoDB存储海量的数据时,一台机器可能不足以存储数据,也可能不足以提供可接受的读写吞吐量.这时,我们就可以通过在多台机器上分割数据,使得数据库系统能存储和处理更多的数据. 为什么使用分片 复制所有的写入操作到主节点 延迟的敏感数据会在主节点查询 单个副本集限制在12个节点 当请求量巨大时会出现内存不足. 本地磁盘不足 垂直扩展价格昂贵 MongoDB分片 下图展

[功能改进]Live Writer发博支持“建分类、加标签、写摘要”

以前您在园子里用Windows Live Wirter发布博文是不是有以下三个不爽: 不爽1:如果想在发布随笔时新建分类并将随笔添加至该分类,需要先在博客后台添加分类,然后在Live Writer中刷新分类列表,并选择这个分类. 不爽2:如果想给随笔添加标签,需要在随笔发布后,进入博客后台进行标签的添加. 不爽3:如果想给发布随笔编写摘要,需要在随笔发布后,进入博客后台进行摘要的编写. 这次功能改进就是为大家消除这三个不爽. 如果你已经配置过Live Wirter,需要更新一下配置.点击下图中的

“四则运算生成程序——GUI支持和部分功能改进”链接

项目成员:张金生     张政 <正文随笔发布在张金生博客中> 四则运算生成程序--GUI支持和部分功能改进

What&#39;s New in iOS9 iOS9功能改进

What's New in iOS9 This article summarizes the key developer-related features introduced in iOS 9, which runs on currently shipping iOS devices. The article also lists the documents that describe new features in more detail. For late-breaking news an

PHP 5.6正式发布:新特性、及功能改进介绍

经过了长时间的开发测试,新版本PHP程序(PHP5.6正式版)终于发布了.新版本中加入了一些实用的新特性,也摒弃了一些冗余的功能.同时,也对部分原有功能进行了改进.下面就一起看看PHP 5.6正式版到底有何不同之处吧! 新版本在旧版基础上做出的改进 PHP 5.6中对旧版本PHP做出了不少改进.不过,大部分PHP5代码在新版本PHP中都是不需要修改也可以正常运行的. json_decode函数 根据JSON的规范,json_decode()函数会自动排除JSON文本中所有非小写变量(比如:tru

Raspberry Pi AP功能改进: systemd服务封装以及dnsmasq的使用

前言在上一篇<Raspberry pi 设置自动拨号, 搭建无线路由环境>一文中,笔者利用hostapd和udhcpd程序,创建无线热点,实现地址分配以及DNS服务器的设置.本篇将基于上一篇的环境,对树莓派AP进行改进:使用dnsmasq代替udhcpd实现DNS以及地址租约,并将AP功能封装成为一个服务 上一篇中使用的hostapd以及udhcpd,其方式有一些缺陷: 使用命令行方式启动,并未将启动本身封装成为一个固定的"服务" 三代树莓派的内置网卡以及笔者使用的外置网卡

nopCommerce 3.3正式发布及新增功能改进

nopCommerce是一套优秀开源且基于Asp.net MVC的开源商城系统,nopCommerce 3.x经历长时间多个版本重构优化改进,目前已经趋于完善与成熟! nopCommerce 3.3正式发布使其迈进了一个新的历程,下边是3.3的主要变化. nopCommerce前台在线示例 nopCommerce后台在线示例 一.nopCommerce 3.3运行环境升级为.Net Framework 4.5.1 3.3版本升级了所有资源库为最新版本,如:.Net Framework 4.5.1

四则运算生成程序——GUI支持和部分功能改进

项目成员:张金生     张政 工程地址: https://coding.net/u/jx8zjs/p/paperOne/git ssh://[email protected]:jx8zjs/paperOne.git 需求: 1.GUI支持:用户界面新增支持 Windows GUI,同时保留原有命令行下所有功能. 2.配置文件:提供用户可用文本编辑器修改的配置文件,在其中包括用户名.总答题数.答错题数. 3.错题本:可回放做错的题目,提供再次练习的机会/删除特定错题. 变更: 1.支持倒计时:答

Java实现的词频统计——功能改进

本次改进是在原有功能需求及代码基础上额外做的修改,保证了原有的基础需求之外添加了新需求的功能. 功能: 1. 小文件输入——从控制台由用户输入到文件中,再对文件进行统计: 2.支持命令行输入英文作品的文件名: 3.支持命令行输入存储有英文作品文件的目录名,批量统计: 4.从控制台读入英文单篇作品,重定向输入流. 实现: 1.判断输入方式,如果从命令行传递参数则直接对文件进行统计:如果未传递参数,其方式同控制台相同,由用户从标准输入流输入到文件,再对文件进行词频统计.这里如果传入文件路径时会对其是