本文共 8340 字,大约阅读时间需要 27 分钟。
MongoDB 3.2 版本说明(Release Notes for MongoDB 3.2)
英文原文:
2015年12月8日
MongoDB 3.2现在发布了。关键特性是将WiredTiger作为默认存储引擎,复制选举增强,集群中的config servers配置为复制集,readConcern,和文档验证。
OpsManager 2.0也发布了。查看和获取更多信息。
小版本发布(Minor Releases)
3.2.1 – 2016年1月12日
修复了错误:当复制集执行常规关闭,辅助副本成员可能会将特定已复制但还没有应用的操作标记为已成功应用:
在Windows版本使用WiredTiger提高insert负载性能:
修复了块移动期间长时间运行的事务:
WiredTiger作为默认引擎(WiredTiger as Default)
从3.2版开始,MongoDB使用WiredTiger作为默认的存储引擎。
为了指定MMAPv1存储引擎,你必须以下面任一方式指定存储设置:
在命令行使用--storageEngine选项:
mongod --storageEngine mmapv1
或者在中,使用设置:
storage: engine: mmapv1
注意:
对于已经存在的部署,如果你不指定--storageEngine或者设置,MongoDB 3.2可以自动决定用于在--dbpath或中创建数据文件的存储引擎。
如果指定--storageEngine或者,如果dbPath包含不是指定的存储引擎创建的数据文件将不会启动。
也可以参考:
复制选举增强(Replication Election Enhancements)
从MongoDB 3.2起,MongoDB减少了复制集故障切换时间,并加速了多个同时存在的主成员的监测。
作为增强的部分,MongoDB引入了第一版复制集协议。新的复制集将会默认使用。之前版本的MongoDB使用该协议的版本0。
此外,MongoDB使用了新的选项。
以毫秒指定了用于检测当一个复制集的主成员不可达时的时间限制。
只应用在使用版本1时。
分片集群增强(Sharded Cluster Enhancements)
MongoDB 3.2对于配置服务器(config servers)放弃使用三个镜像实例。
而是,从3.2开始,分片集群的可以部署为一个复制集。复制集config servers必须运行WiredTiger存储引擎。
这个改变提高了访问config servers的一致性,因为对于分片配置数据,MongoDB可以利用标准复制集读写协议。此外,这允许一个分片集群有多于3个config servers因为一个复制集可以多达50个成员。
对于更多信息,查看。为了使用复制集config servers部署一个新的分片集群,查看。
readConcern
MongoDB 3.2针对复制集和复制集分片引入了readConcern查询选项。对于,readConcern选项允许客户端对于它们的读请求选择一个隔离级别。你可以指定一个“majority”的readConcern来读取已经写入大多数节点的数据并且不能被回滚。默认,MongoDB使用一个“local”的readConcern返回当前的可用数据给查询时刻的节点,即使数据还没有被持久化到大多数节点并可能被回滚。使用,你可能只指定一个“local”的readConcern。
readConcern需要针对MongoDB 3.2版本的MongoDB驱动更新。
只有使用的复制集支持读确认(read concern)。运行版本0协议的复制集不支持读确认。
对于更多关于readConcern,包括支持该选项的操作,查看。
部分索引(Partial Indexes)
MongoDB 3.2提供了选项用于创建只索引匹配指定过滤表达式的文档的索引。通过索引集合中文档的子集,部分索引有更低的存储需求并且对于索引创建和维护降低了性能消耗。你可以指定一个partialFilterExpression选项对于所有的MongoDB 。
partialFilterExpression选项接受一个文档作为指定条件,通过使用:
等值表达式(例如,field: value或使用操作符),
表达式,
,,,表达式,
表达式,
操作符只在最顶层
对于详细信息,查看。
文档验证(Document Validation)
从3.2开始,MongoDB提供了在更新和插入期间验证文档的能力。验证规则基于每个集合指定。
为了在一个新的集合上指定文档验证,在方法使用新的validator选项。为了添加文档验证到一个存在的集合,在命令使用新的validator选项。对于更多信息,查看。
为了查看一个集合的验证规则,使用方法。
下面的命令可以使用新的bypassDocumentValidation选项避开验证每个操作:
命令
命令和方法
命令和方法
命令
命令
对于命令和方法
对于已经启用访问控制的部署,你必需有行为。内置角色和提供该行为。
聚合框架增强(Aggregation Framework Enhancements)
MongoDB引入:
新的阶段,累加器和表达式。
在阶段。
在分片集群。
新的聚合阶段
阶段 | 描述 | 语法 |
随机从输入选择N条文档 | { $sample: { size: <positive integer> } } | |
返回关于索引使用的统计 | { $indexStats: { } } | |
与另一个集合执行left outer join关联 | { $lookup: { from: <collection to join>, localField: <fieldA>, foreignField: <fieldB>, as: <output array field> } } |
对$group阶段新的累加器
累加器 | 描述 | 语法 |
累加标准偏差 | { $stdDevSamp: <array> } | |
累加流行标准偏差 | { $stdDevPop: <array> } |
新的聚合算术运算操作
操作 | 描述 | 语法 |
计算平方根 | { $sqrt: <number> } | |
返回数字的绝对值 | { $abs: <number> } | |
以指定基数计算数字的对数 | { $log: [ <number>, <base> ] } | |
计算以10为底数的对数 | { $log10: <number> } | |
计算数字的自然对数 | { $ln: <number> } | |
计算数字的指定指数的幂 | { $pow: [ <number>, <exponent> ] } | |
计算指数为e的幂 | { exp: <number> } | |
截断数字为整数 | { $trunc: <number> } | |
返回大于或等于指定数字的最小整数 | { $ceil: <number> } | |
返回小鱼或等于指定数字的最大整数 | { floor: <number> } |
新的聚合数组操作
操作 | 描述 | 语法 |
返回数组的子集 | { $slice: [ <array>, <n> ] } or { $slice: [ <array>, <position>, <n> ] } | |
返回指定数组索引位置的元素 | { $arrayElemAt: [ <array>, <idx> ] } | |
连接数组 | { $concatArrays: [ <array1>, <array2>, ... ] } | |
判断运算对象是否为数组 | { $isArray: [ <expression> ] } | |
查询基于条件的数组的子集 | { $filter: { input: <array>, as: <string>, cond: <expression> } } |
累加器表达式可用性(Accumulator Expression Availability)
从3.2版开始,以下累加器表达式,之前只在阶段可用,现在在阶段也可用了:
当用于阶段时,这些累加器表达式可以接受:
单一参数:<accumulator> : <arg>
多个参数:<accumulator> : [ <arg1>, <arg2>, ... ]
一般增强(General Enhancements)
在MongoDB 3.2中,阶段支持使用方括号[]直接创建新的数组列。例如,查看。
MongoDB 3.2对阶段引入minDistance选项。
阶段不再对非数组操作数报错。如果操作数不解析为数组但不缺失,为null或者一个空数组,认为操作数为单一元素数组。
阶段可以:
通过在阶段规则中指定一个新的选项includeArrayIndex在输出中包含数组元素的索引。
通过在阶段规则中指定一个新的选项preserveNullAndEmptyArrays输出这些数组列缺失,null或者一个空数组的文档。
为了支持这些新特性,现在可以采用另一种语法,查看详细信息。
优化(Optimization)
索引可以聚合操作。
MongoDB提高了在大的分片集群的管道的整体性能。
如果管道以对片键的精确开始,整个管道只运行在匹配的分片上。之前,管道会被拆分,合并的操作将会在主分片上执行。
对于运行在多个分片上的聚合操作,如果操作不需要运行在数据库的主分片上,这些操作可以路由结果到任何分片来合并结果,避免数据库的主分片过载。需要运行在数据库的主分片上的聚合操作是阶段和阶段。
兼容性(Compatibility)
对于兼容性改变,查看。
MongoDB工具增强(MongoDB Tools Enhancements)
和使用新的--archive选项添加对归档文件和标准输出/输入流的支持。该增强允许通过网络设备基于管道导出的数据流。例如,查看
和
和。
和使用新的--gzip选项添加对压缩数据导出的支持。该增强减少了对导出文件的存储空间。例如,查看:
。
加密存储引擎(Encrypted Storage Engine)
企业版特性:
可在MongoDB企业版可用。
重要:
只对WiredTiger存储引擎可用。
安静加密,当联合使用透明加密和好的保护相关帐号、密码和加密密钥的安全策略,可以帮助确保遵守安全和私有标准,包括HIPAA、PCI-DSS和FERPA。
MongoDB企业版3.2对WiredTiger存储引擎引入了一个本地加密选项。这个特性允许MongoDB加密数据文件以致只有有解密密钥的当事人可以解码和读取数据。更多详细信息,查看。
文本搜索增强(Text Search Enhancements)
文本索引版本3(text Index Version 3)
MongoDB 3.2引入了的版本3。索引的新版本的关键特性是:
提高了。
。
额外的。
从MongoDB 3.2开始,版本3对于新的索引为默认版本。
也可以查看:
$text操作符增强($text Operator Enhancements)
操作符增加对如下支持:
带有新的$caseSensitive选项,和
带有新的$diacriticSensitive选项。
对于更多信息和示例,查看操作符相关部分和。
其他语言支持(Support for Additional Languages)
企业版特性:
只在MongoDB企业版可用。
从3.2版开始,MongoDB企业版提供了对以下语言的支持:Arabic,Farsi(尤其Dari和Iranian Persian方言),Urdu,简体中文和繁体中文。
详细信息,查看。
新的存储引擎
inMemory存储引擎
企业版特性:
只在MongoDB企业版可用。
MongoDB企业版3.2提供了一个内存中的存储引擎。除了一些元数据,内存中存储引擎不维护任何磁盘数据。通过避免磁盘I/O,内存中的存储引擎允许更可预见的数据库操作延时。
警告:
当前处于beta阶段。不能在产品中使用。
为了选择这个存储引擎,指定
inMemory对于选项或者设置。
--dbpath。尽管内存中处理引擎不写数据到文件系统,它维护在--dbpath小元数据文件和诊断数据以及构建大索引的临时文件。
inMemory存储引擎使用文档级别锁。对于更多细节,查看。
ephemeralForTest存储引擎(ephemeralForTest Storage Engine)
MongoDB 3.2提供了一个新的用于测试的存储引擎。而不是一些元数据,用于测试的存储引擎不维护任何磁盘数据,不需要在测试运行期间做清理。用于测试的存储引擎是无支持的。
警告:
只对测试目的。不能在产品中使用。
为了选择这个存储引擎,指定
ephemeralForTest对于选项或者设置。
--dbpath。尽管用于测试的存储引擎不写数据到文件系统,它在--dbpath中维护小的元数据文件。
ephemeralForTest存储引擎使用集合级别的锁。
一般增强(General Enhancements)
位测试查询操作符(Bit Test Query Operators)
MongoDB 3.2提供了新的查询操作符用于测试位值:
SpiderMonkey JavaScript引擎(SpiderMonkey JavaScript Engine)
MongoDB 3.2对于 shell和 server使用SpiderMonkey作为JavaScript引擎。
SpiderMonkey提供了对其他平台的支持并且有一个提高的内存管理模型。
这个改变影响了所有的JavaScript行为包括命令,,和查询操作符;然而,这个改变应该是对用户完全透明的。
也可以查看:
mongo Shell和CRUD API(mongo Shell and CRUD API)
为了提供和MongoDB驱动的CRUD(Create/Read/Update/Delete)API的一致性,mongo shell引入了其他CRUD方法与驱动的CRUD API保持一致:
新的API | 描述 |
等价于初始化操作构造器,使用来添加操作和运行来执行操作。 MongoDB 3.2放弃了和它的相关。 | |
等价于。 | |
等价于带有justOne设置为true;例如: 或 。 | |
等价于方法带有remove设置为true。 | |
等价于方法带有update设置为一个替代文档。 | |
等价于方法带有update设置为一个使用指定修改的文档。 | |
等价于方法带有一个文档数组作为参数。 | |
等价于方法带有一个文档作为参数。 | |
等价于方法带有一个替换文档作为<update>参数。 | |
等价于方法带有使用和multi选项设置为true的指定修改的<update>文档。 | |
等价于方法带有使用指定修改的一个<update>文档。 |
WiredTiger和fsyncLock(WiredTiger and fsyncLock)
从MongoDB 3.2开始,WiredTiger存储引擎支持带有lock选项的命令或者 shell方法。那就是,对于WiredTiger存储引擎,这些操作可以保证数据文件不改变,确保创建备份一致性的目的。
放弃32位二进制文件(Deprecation of 32-bit Binaries)
从3.2版开始,32位二进制被放弃并且在将来的版本中不可用。
$type操作符接受字符串别名($type Operator Accepts String Aliases)
操作符对于BSON类型,除了与BSON类型相关的数字外,接受字符串别名。
explain()支持distinct()操作(explain() Support for distinct() Operation)
添加了对方法的支持。对于更多信息,查看。
放弃HTTP界面(Deprecation of the HTTP Interface)
从3.2版开始,MongoDB放弃了它的HTTP界面。
地理空间优化(Geospatial Optimization)
MongoDB 3.2引入了版本3,在更精细的层次索引。新版在更小的区域提高了查询的性能。此外,对于和,geoNear查询的性能对于密集数据集已经提高。
也可以查看:
诊断数据捕获(Diagnostic Data Capture)
为了让MongoDB工程师促进MongoDB服务器行为的分析,MongoDB 3.2引入了诊断数据收集架构,以一定的时间间隔写服务器统计信息到诊断文件。默认,该架构以1秒的间隔捕获数据。为了修改该间隔,查看。
MongoDB在实例--dbpath或下创建了一个diagnostic.data目录。诊断数据在目录下存储为文件。
诊断文件的最大大小使用配置,并且diagnostic.data目录的最大大小使用配置。
对于捕获间隔的默认值和最大大小被作为有用的数据提供给MongoDB工程师,对性能和存储大小有最小影响。典型地,这些值只需要被MongoDB工程师为特定的诊断目的的请求而修改。
写确认(Write Concern)
对于复制集使用,辅助副本成员在写入它们各自的磁盘后确认写操作,忽略选项。
对于复制集使用,意味着。
使用,MongoDB只会在请求数量的成员,包括主成员,已经写入journal后返回。之前在复制集中的写确认只需要写入journal,忽略了写确认。
WiredTiger引擎的journalCommitInterval(journalCommitInterval for WiredTiger)
MongoDB 3.2对于WiredTiger存储引擎增加了对指定journal提交间隔的支持。查看journalCommitInterval选项。在之前的版本中,选项只应用于MMAPv1存储引擎。
对于相关的配置文件设置,MongoDB 3.2增加了设置和放弃了。放弃的设置作为对设置的别名。
影响兼容性的改变(Changes Affecting Compatibility)
一些MongoDB 3.2的改变可能影响兼容性并且可能需要用户行动。对于详细的兼容性改变的列表,查看。
升级过程(Upgrade Process)
查看获取完整的升级指南。
在3.2.1中的已知问题(Known Issues in 3.2.1)
在3.2.1版本中已知问题的列表:
当节点间的时钟漂移大于electionTimeOut,客户端可能发现新的主节点失败:。
fromMigrate标记不会在oplog中设置用于删除:
在一个3.2版mongo shell连接到一个3.0版mongos或者在一个3.0版mongo shell连接到一个3.0版mongos带有运行,带有3.2版本的分片是不兼容的:
connPoolStats命令的结果不再正确:
ApplyOps后端索引创建可能会死锁:
对于protocolVersion 1的复制集使用w:majority写的性能回归:
UNICODE感知文本处理逻辑(文本索引第3版)的性能回归:
在3.2.0中的已知问题(Known Issues in 3.2.0)
在3.2.0版本中已知问题的列表:
findAndModify操作不会被profiler捕获:
命令不会设置“nreturned”操作计数器:
当节点间的时钟漂移大于electionTimeout,客户端可能发现新的主节点失败:
fromMigrate标记不会在oplog中设置用于删除:
在一个3.2版mongo shell连接到一个3.0版mongos或者在一个3.0版mongo shell连接到一个3.0版mongos带有运行,带有3.2版本的分片是不兼容的:
connPoolStats命令的结果不再正确:
ApplyOps后端索引创建可能会死锁:
对于protocolVersion 1的复制集使用w:majority写的性能回归:
UNICODE感知文本处理逻辑(文本索引第3版)的性能回归:
在Windows下的WiredTiger引擎的插入工作负载中服务器性能回归:
下载(Download)
下载MongoDB 3.2,去到。
也可以查看:
.
.
其他资源(Additional Resources)
.
转载地址:http://paejx.baihongyu.com/