MongoDB 3.2 版本说明(Release Notes for MongoDB 3.2)

  1. 云栖社区>
  2. 博客>
  3. 正文

MongoDB 3.2 版本说明(Release Notes for MongoDB 3.2)

技术小甜 2017-11-01 17:07:00 浏览1191
展开阅读全文

英文原文:

https://docs.mongodb.org/master/release-notes/3.2/

 

2015年12月8日


MongoDB 3.2现在发布了。关键特性是将WiredTiger作为默认存储引擎,复制选举增强,集群中的config servers配置为复制集,readConcern,和文档验证。


OpsManager 2.0也发布了。查看Ops Manager文档Ops Manager版本说明获取更多信息。

 


小版本发布(Minor Releases


3.2.1 – 2016年1月12日

 


WiredTiger作为默认引擎(WiredTiger as Default


从3.2版开始,MongoDB使用WiredTiger作为默认的存储引擎。


为了指定MMAPv1存储引擎,你必须以下面任一方式指定存储设置:

  • 在命令行使用--storageEngine选项:

1
mongod --storageEngine mmapv1
1
2
storage:
    engine: mmapv1


注意:

对于已经存在的部署,如果你不指定--storageEngine或者storage.engine设置,MongoDB 3.2可以自动决定用于在--dbpathstorage.dbPath中创建数据文件的存储引擎。


如果指定--storageEngine或者storage.engine,如果dbPath包含不是指定的存储引擎创建的数据文件mongod将不会启动。


也可以参考:

Default Storage Engine Change

 


复制选举增强(Replication Election Enhancements


从MongoDB 3.2起,MongoDB减少了复制集故障切换时间,并加速了多个同时存在的主成员的监测。

作为增强的部分,MongoDB引入了第一版复制集协议。新的复制集将会默认使用protocolVersion: 1。之前版本的MongoDB使用该协议的版本0。


此外,MongoDB使用了新的replica set configuration选项electionTimeoutMillis


electionTimeoutMillis以毫秒指定了用于检测当一个复制集的主成员不可达时的时间限制。


electionTimeoutMillis只应用在使用replication protocol版本1时。

 


分片集群增强(Sharded Cluster Enhancements


MongoDB 3.2对于配置服务器(config servers)放弃使用三个镜像mongod实例。


而是,从3.2开始,分片集群的config servers可以部署为一个复制集。复制集config servers必须运行WiredTiger存储引擎。


这个改变提高了访问config servers的一致性,因为对于分片配置数据,MongoDB可以利用标准复制集读写协议。此外,这允许一个分片集群有多于3个config servers因为一个复制集可以多达50个成员。


对于更多信息,查看Config Servers。为了使用复制集config servers部署一个新的分片集群,查看Deploy a Sharded Cluster

 


readConcern


MongoDB 3.2针对复制集和复制集分片引入了readConcern查询选项。对于WiredTiger storage enginereadConcern选项允许客户端对于它们的读请求选择一个隔离级别。你可以指定一个“majority”的readConcern来读取已经写入大多数节点的数据并且不能被回滚。默认,MongoDB使用一个“local”的readConcern返回当前的可用数据给查询时刻的节点,即使数据还没有被持久化到大多数节点并可能被回滚。使用MMAPv1 storage engine,你可能只指定一个“local”的readConcern


readConcern需要针对MongoDB 3.2版本的MongoDB驱动更新。


只有使用protocol version 1的复制集支持“majority”读确认(read concern)。运行版本0协议的复制集不支持“majority”读确认。


对于更多关于readConcern,包括支持该选项的操作,查看Read Concern

 


部分索引(Partial Indexes


MongoDB 3.2提供了选项用于创建只索引匹配指定过滤表达式的文档的索引。通过索引集合中文档的子集,部分索引有更低的存储需求并且对于索引创建和维护降低了性能消耗。你可以指定一个partialFilterExpression选项对于所有的MongoDB index types


partialFilterExpression选项接受一个文档作为指定条件,通过使用:


对于详细信息,查看Partial Indexes

 


文档验证(Document Validation


从3.2开始,MongoDB提供了在更新和插入期间验证文档的能力。验证规则基于每个集合指定。


为了在一个新的集合上指定文档验证,在db.createCollection()方法使用新的validator选项。为了添加文档验证到一个存在的集合,在collMod命令使用新的validator选项。对于更多信息,查看Document Validation


为了查看一个集合的验证规则,使用db.getCollectionInfos()方法。


下面的命令可以使用新的bypassDocumentValidation选项避开验证每个操作:


对于已经启用访问控制的部署,你必需有bypassDocumentValidation行为。内置角色dbAdminrestore提供该行为。

 


聚合框架增强(Aggregation Framework Enhancements


MongoDB引入:

 

新的聚合阶段


阶段

描述

语法

$sample

随机从输入选择N条文档

{ $sample: { size: <positive integer> } }

$indexStats

返回关于索引使用的统计

{ $indexStats: { } }

$lookup

与另一个集合执行left outer join关联

{

$lookup:

{

from: <collection to join>,

localField: <fieldA>,

foreignField: <fieldB>,

as: <output array field>

}

}


对$group阶段新的累加器


累加器

描述

语法

$stdDevSamp

累加标准偏差

{ $stdDevSamp: <array> }

$stdDevPop

累加流行标准偏差

{ $stdDevPop: <array> }


新的聚合算术运算操作


操作

描述

语法

$sqrt

计算平方根

{ $sqrt: <number> }

$abs

返回数字的绝对值

{ $abs: <number> }

$log

以指定基数计算数字的对数

{ $log: [ <number>, <base> ] }

$log10

计算以10为底数的对数

{ $log10: <number> }

$ln

计算数字的自然对数

{ $ln: <number> }

$pow

计算数字的指定指数的幂

{ $pow: [ <number>, <exponent> ] }

$exp

计算指数为e的幂

{ exp: <number> }

$trunc

截断数字为整数

{ $trunc: <number> }

$ceil

返回大于或等于指定数字的最小整数

{ $ceil: <number> }

$floor

返回小鱼或等于指定数字的最大整数

{ floor: <number> }


新的聚合数组操作


操作

描述

语法

$slice

返回数组的子集

{ $slice: [ <array>, <n> ] }

or

{ $slice: [ <array>, <position>, <n> ] }

$arrayElemAt

返回指定数组索引位置的元素

{ $arrayElemAt: [ <array>, <idx> ] }

$concatArrays

连接数组

{

$concatArrays: [ <array1>, <array2>, ... ]

}

$isArray

判断运算对象是否为数组

{ $isArray: [ <expression> ] }

$filter

查询基于条件的数组的子集

{

$filter:

{

input: <array>,

as: <string>,

cond: <expression>

}

}


累加器表达式可用性(Accumulator Expression Availability)


从3.2版开始,以下累加器表达式,之前只在$group阶段可用,现在在$project阶段也可用了:


当用于$project阶段时,这些累加器表达式可以接受:

  • 单一参数:<accumulator> : <arg>

  • 多个参数:<accumulator> : [ <arg1>, <arg2>, ... ]



一般增强(General Enhancements


  • 在MongoDB 3.2中,$project阶段支持使用方括号[]直接创建新的数组列。例如,查看Project New Array Fields

  • MongoDB 3.2对$geoNear阶段引入minDistance选项。

  • $unwind阶段不再对非数组操作数报错。如果操作数不解析为数组但不缺失,为null或者一个空数组,$unwind认为操作数为单一元素数组。

    $unwind阶段可以:

    • 通过在阶段规则中指定一个新的选项includeArrayIndex在输出中包含数组元素的索引。

    • 通过在阶段规则中指定一个新的选项preserveNullAndEmptyArrays输出这些数组列缺失,null或者一个空数组的文档。


为了支持这些新特性,$unwind现在可以采用另一种语法,查看$unwind详细信息。

 

优化(Optimization


索引可以覆盖聚合操作。


MongoDB提高了在大的分片集群的管道的整体性能。


如果管道以对片键的精确$match开始,整个管道只运行在匹配的分片上。之前,管道会被拆分,合并的操作将会在主分片上执行。


对于运行在多个分片上的聚合操作,如果操作不需要运行在数据库的主分片上,这些操作可以路由结果到任何分片来合并结果,避免数据库的主分片过载。需要运行在数据库的主分片上的聚合操作是$out阶段和$lookup阶段。

 

兼容性(Compatibility


对于兼容性改变,查看Aggregation Compatibility Changes

 


MongoDB工具增强(MongoDB Tools Enhancements


 


加密存储引擎(Encrypted Storage Engine


企业版特性:

可在MongoDB企业版可用。


重要:

只对WiredTiger存储引擎可用。


安静加密,当联合使用透明加密和好的保护相关帐号、密码和加密密钥的安全策略,可以帮助确保遵守安全和私有标准,包括HIPAA、PCI-DSS和FERPA。


MongoDB企业版3.2对WiredTiger存储引擎引入了一个本地加密选项。这个特性允许MongoDB加密数据文件以致只有有解密密钥的当事人可以解码和读取数据。更多详细信息,查看Encrypted Storage Engine

 


文本搜索增强(Text Search Enhancements)


文本索引版本3(text Index Version 3)


MongoDB 3.2引入了text index的版本3。索引的新版本的关键特性是:


从MongoDB 3.2开始,版本3对于新的text索引为默认版本。


也可以查看:

Text Index Version 3 Compatibility

 

$text操作符增强($text Operator Enhancements


$text操作符增加对如下支持:


对于更多信息和示例,查看$text操作符相关部分Case InsensitivityDiacritic Insensitivity

 

其他语言支持(Support for Additional Languages)


企业版特性:

只在MongoDB企业版可用。


从3.2版开始,MongoDB企业版提供了对以下语言的支持:Arabic,Farsi(尤其Dari和Iranian Persian方言),Urdu,简体中文和繁体中文。


详细信息,查看Text Search with Basis Technology Rosette Linguistics Platform

 


新的存储引擎


inMemory存储引擎


企业版特性:

只在MongoDB企业版可用。


MongoDB企业版3.2提供了一个内存中的存储引擎。除了一些元数据,内存中存储引擎不维护任何磁盘数据。通过避免磁盘I/O,内存中的存储引擎允许更可预见的数据库操作延时。


警告:

当前处于beta阶段。不能在产品中使用。


为了选择这个存储引擎,指定

  • inMemory对于--storageEngine选项或者storage.engine设置。

  • --dbpath。尽管内存中处理引擎不写数据到文件系统,它维护在--dbpath小元数据文件和诊断数据以及构建大索引的临时文件。


inMemory存储引擎使用文档级别锁。对于更多细节,查看In-Memory Storage Engine


ephemeralForTest存储引擎(ephemeralForTest Storage Engine


MongoDB 3.2提供了一个新的用于测试的存储引擎。而不是一些元数据,用于测试的存储引擎不维护任何磁盘数据,不需要在测试运行期间做清理。用于测试的存储引擎是无支持的。


警告:

只对测试目的。不能在产品中使用。


为了选择这个存储引擎,指定

  • ephemeralForTest对于--storageEngine选项或者storage.engine设置。

  • --dbpath。尽管用于测试的存储引擎不写数据到文件系统,它在--dbpath中维护小的元数据文件。


ephemeralForTest存储引擎使用集合级别的锁。

 


一般增强(General Enhancements


位测试查询操作符(Bit Test Query Operators


MongoDB 3.2提供了新的查询操作符用于测试位值:

 

SpiderMonkey JavaScript引擎(SpiderMonkey JavaScript Engine


MongoDB 3.2对于mongo shell和mongod server使用SpiderMonkey作为JavaScript引擎。

SpiderMonkey提供了对其他平台的支持并且有一个提高的内存管理模型。


这个改变影响了所有的JavaScript行为包括命令mapReducegroup,和查询操作符$where;然而,这个改变应该是对用户完全透明的。


也可以查看:

SpiderMonkey Compatibility Changes

 

mongo Shell和CRUD API(mongo Shell and CRUD API


为了提供和MongoDB驱动的CRUD(Create/Read/Update/Delete)API的一致性,mongo shell引入了其他CRUD方法与驱动的CRUD API保持一致:


新的API

描述

db.collection.bulkWrite()

等价于初始化Bulk()操作构造器,使用Bulk方法来添加操作和运行Bulk.execute()来执行操作。

MongoDB 3.2放弃了Bulk()和它的相关方法

db.collection.deleteMany()

等价于db.collection.remove()

db.collection.deleteOne()

等价于db.collection.remove()带有justOne设置为true;例如:

db.collection.remove( <query>, true ) 或 db.collection.remove( <query>, { justOne: true } )

db.collection.findOneAndDelete()

等价于db.collection.findAndModify()方法带有remove设置为true。

db.collection.findOneAndReplace()

等价于db.collection.findAndModify()方法带有update设置为一个替代文档。

db.collection.findOneAndUpdate()

等价于db.collection.findAndzModify()方法带有update设置为一个使用update操作符指定修改的文档。

db.collection.insertMany()

等价于db.collection.insert()方法带有一个文档数组作为参数。

db.collection.insertOne()

等价于db.collection.insert()方法带有一个文档作为参数。

db.collection.replaceOne()

等价于db.collection.update( <query>, <update> )方法带有一个替换文档作为<update>参数。

db.collection.updateMany()

等价于db.collection.update( <query>, <update>, { multi: true, ... })方法带有使用update操作符multi选项设置为true的指定修改的<update>文档。

db.collection.updateOne()

等价于db.collection.update( <query>, <update> )方法带有使用update操作符指定修改的一个<update>文档。


WiredTiger和fsyncLock(WiredTiger and fsyncLock


从MongoDB 3.2开始,WiredTiger存储引擎支持带有lock选项的fsync命令或者mongo shell方法db.fsyncLock()。那就是,对于WiredTiger存储引擎,这些操作可以保证数据文件不改变,确保创建备份一致性的目的。

 

放弃32位二进制文件(Deprecation of 32-bit Binaries


从3.2版开始,32位二进制被放弃并且在将来的版本中不可用。

 

$type操作符接受字符串别名($type Operator Accepts String Aliases


$type操作符对于BSON类型,除了与BSON类型相关的数字外,接受字符串别名。

 

explain()支持distinct()操作(explain() Support for distinct() Operation


db.collection.explain()添加了对db.collection.distinct()方法的支持。对于更多信息,查看db.collection.explain()

 

放弃HTTP界面(Deprecation of the HTTP Interface


从3.2版开始,MongoDB放弃了它的HTTP界面。

 

地理空间优化(Geospatial Optimization


MongoDB 3.2引入了2dsphere indexes版本3,在更精细的层次索引GeoJSON geometries。新版在更小的区域提高了2dsphere index查询的性能。此外,对于2d indexes2dsphere indexes,geoNear查询的性能对于密集数据集已经提高。


也可以查看:

2dsphere Index Version 3 Compatibility

 

诊断数据捕获(Diagnostic Data Capture


为了让MongoDB工程师促进MongoDB服务器行为的分析,MongoDB 3.2引入了诊断数据收集架构,以一定的时间间隔写服务器统计信息到诊断文件。默认,该架构以1秒的间隔捕获数据。为了修改该间隔,查看diagnosticDataCollectionPeriodMillis


MongoDB在mongod实例--dbpathstorage.dbPath下创建了一个diagnostic.data目录。诊断数据在目录下存储为文件。


诊断文件的最大大小使用diagnosticDataCollectionFileSizeMB配置,并且diagnostic.data目录的最大大小使用diagnosticDataCollectionDirectorySizeMB配置。


对于捕获间隔的默认值和最大大小被作为有用的数据提供给MongoDB工程师,对性能和存储大小有最小影响。典型地,这些值只需要被MongoDB工程师为特定的诊断目的的请求而修改。

 

写确认(Write Concern


 

WiredTiger引擎的journalCommitInterval(journalCommitInterval for WiredTiger


MongoDB 3.2对于WiredTiger存储引擎增加了对指定journal提交间隔的支持。查看journalCommitInterval选项。在之前的版本中,选项只应用于MMAPv1存储引擎。


对于相关的配置文件设置,MongoDB 3.2增加了storage.journal.commitIntervalMs设置和放弃了storage.mmapv1.journal.commitIntervalMs。放弃的storage.mmapv1.journal.commitIntervalMs设置作为对storage.journal.commitIntervalMs设置的别名。

 


影响兼容性的改变(Changes Affecting Compatibility


一些MongoDB 3.2的改变可能影响兼容性并且可能需要用户行动。对于详细的兼容性改变的列表,查看Compatibility Changes in MongoDB 3.2

 


升级过程(Upgrade Process


查看Upgrade MongoDB to 3.2获取完整的升级指南。

 


在3.2.1中的已知问题(Known Issues in 3.2.1


在3.2.1版本中已知问题的列表:

  • 当节点间的时钟漂移大于electionTimeOut,客户端可能发现新的主节点失败:SERVER-21744

  • fromMigrate标记不会在oplog中设置用于删除:SERVER-21678

  • 在一个3.2版mongo shell连接到一个3.0版mongos或者在一个3.0版mongo shell连接到一个3.0版mongos带有read preference运行explain,带有3.2版本的分片是不兼容的:SERVER-21661

  • connPoolStats命令的结果不再正确:SERVER-21597

  • ApplyOps后端索引创建可能会死锁:SERVER-21583

  • 对于protocolVersion 1的复制集使用w:majority写的性能回归:SERVER-21581

  • UNICODE感知文本处理逻辑(文本索引第3版)的性能回归:SERVER-19936

 


在3.2.0中的已知问题(Known Issues in 3.2.0


在3.2.0版本中已知问题的列表:

  • findAndModify操作不会被profiler捕获:SERVER-21772

  • getMore命令不会设置nreturned操作计数器:SERVER-21750

  • 当节点间的时钟漂移大于electionTimeout,客户端可能发现新的主节点失败:SERVER-21744

  • fromMigrate标记不会在oplog中设置用于删除:SERVER-21678

  • 在一个3.2版mongo shell连接到一个3.0版mongos或者在一个3.0版mongo shell连接到一个3.0版mongos带有read preference运行explain,带有3.2版本的分片是不兼容的:SERVER-21661

  • connPoolStats命令的结果不再正确:SERVER-21597

  • ApplyOps后端索引创建可能会死锁:SERVER-21583

  • 对于protocolVersion 1的复制集使用w:majority写的性能回归:SERVER-21581

  • UNICODE感知文本处理逻辑(文本索引第3版)的性能回归:SERVER-19936

  • 在Windows下的WiredTiger引擎的插入工作负载中服务器性能回归:SERVER-21792

 


下载(Download


下载MongoDB 3.2,去到downloads page


也可以查看:

 


其他资源(Additional Resources)


















本文转自UltraSQL51CTO博客,原文链接:http://blog.51cto.com/ultrasql/1738869 ,如需转载请自行联系原作者


网友评论

登录后评论
0/500
评论
技术小甜
+ 关注