MongoDB 3.2的发布说明

2015年12月8日

MongoDB 3.2现已推出。主要功能包括作为默认存储引擎的WiredTiger、复制选择增强、将服务器配置为副本集、readConcern和文档验证。

OpsManager 2.0也可用。请参阅OpsManager文档OpsManager发布说明了解更多信息。

默认情况下,WiredTiger

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

要指定MMAPv1存储引擎,您必须指定存储引擎设置:

  • 在带有--storageEngine选项的命令行上:
mongod --storageEngine mmapv1
storage:
   engine: mmapv1

笔记:

对于现有部署,如果您没有指定--storageEnginestorage.engine设置,MongoDB 3.2可以自动确定用于在--dbpathstorage.dbPath中创建数据文件的存储引擎

如果指定--storageEnginestorage.engine,如果dbPath包含由指定的存储引擎以外的存储引擎创建的数据文件,则mongod将不会启动。

另见:

默认存储引擎更改

WiredTiger默认缓存大小

从MongoDB 3.2开始,默认情况下,WiredTiger内部缓存将使用较大的缓存:

  • 60%的RAM减去1 GB,或
  • 1 GB。

有关更多信息,请参阅WiredTiger和内存使用。

WiredTiger日志写入频率

MongoDB 3.2将WiredTiger配置为每50毫秒写入日志文件。这是对现有日记撰写间隔和条件的补充。有关更多信息,请参阅日志流程。

复制选举增强功能

从MongoDB 3.2开始,MongoDB减少了副本集的故障转移时间,并加快了对多个同时初选的检测。

作为此增强的一部分,MongoDB引入了该协议的第1版。默认情况下,新的副本集将使用protocolVersion: 1以前版本的MongoDB使用协议的版本0。

此外,MongoDB引入了一个新的副本集配置选项electionTimeoutMilliselectionTimeoutMillis指定了检测副本集主选项何时无法到达的时间限制(以毫秒为单位)。

electionTimeoutMillis仅在使用其replication protocol版本1时适用

另见:

复制集协议版本

分片集群增强功能

MongoDB 3.2不建议在配置服务器上使用三个镜像mongod实例。

相反,从3.2开始,分片集群的配置服务器可以部署为副本集。副本集配置服务器必须运行WiredTiger存储引擎。

这一变化提高了配置服务器的一致性,因为MongoDB可以利用标准副本集读取和写入协议来分片配置数据。此外,这允许分片集群拥有超过3台配置服务器,因为副本集最多可以有50个成员。

有关更多信息,请参阅配置服务器。要部署带有副本集配置服务器的新分片集群,请参阅部署分片集群。

MongoDB 3.2不建议对分片集群的组件使用主从复制。

从3.2开始,mongos在启动期间将继续尝试联系配置服务器,直到可用。在之前的版本中,如果mongos找不到配置服务器,它将在启动期间关闭。

readConcern

MongoDB 3.2为副本集和副本集碎片引入了readConcern查询选项。对于WiredTiger存储引擎readConcern选项允许客户端为其读取选择一定程度的隔离。您可以指定一个"majority"readConcern来读取已写入大多数节点的数据,因此无法回滚。默认情况下,MongoDB使用"local"readConcern返回查询时节点可用的最新数据,即使数据没有保留到大多数节点,并且可能会回滚。与MMAPv1存储引擎,您只能指定"local"的aindConcernreadConcern

readConcern需要为MongoDB 3.2更新MongoDB驱动程序。

有关readConcern的详细信息,包括支持该选项的操作,请参阅阅读关注。

部分索引

MongoDB 3.2提供了创建索引的选项,该索引仅索引满足指定过滤器表达式的集合中的文档。通过对集合中的文档子集进行索引,部分索引降低了存储要求,并降低了索引创建和维护的性能成本。您可以为所有MongoDB索引类型指定partialFilterExpression选项

partialFilterExpression选项接受使用以下方式指定条件的文档:

有关详细信息,请参阅部分索引。

文档验证

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

要在新集合上指定文档验证,请使用db.createCollection()方法中的newvalidator选项。要将文档验证添加到现有集合中,请使用collMod命令中的新validator选项。有关更多信息,请参阅架构验证。

要查看集合的验证规范,请使用thedbdb.getCollectionInfos()方法。

以下命令可以使用新选项bypassDocumentValidation绕过每个操作的验证

对于启用了访问控制的部署,您必须具有bypassDocumentValidation操作。内置角色dbAdminrestore提供此操作。

聚合管道增强

MongoDB介绍:

角色 描述 句法
$sample 从其输入中随机选择N个文档。 { $sample: { size: <positive integer> } }
$indexStats 返回有关索引使用情况的统计数据。 { $indexStats: { } }
$lookup 与另一个集合执行左侧外部连接。 {
$lookup:
{
from: ,
localField: ,
foreignField: ,
as:
}
}

新的累加器$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> ] }{ $slice: [ <array>, <position>, <n> ] }
$arrayElemAt 返回指定数组索引处的元素。 { $arrayElemAt: [ <array>, <idx> ] }
$concatArrays 串联阵列。 { $concatArrays: [ <array1>, <array2>, ... ]}
$isArray 确定操作数是否为数组。 { $isArray: [ <expression> ] }
$filter 根据条件选择数组的一个子集。 { $filter: { input: <array>, as: <string>, cond: <expression> }}

累加器表达式可用性

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

当用作$project阶段的一部分时,这些累加器表达式可以接受以下任一:

  • 单一论点:<accumulator> : <arg>
  • 多个参数:<accumulator> : [ <arg1>, <arg2>, ... ]

一般增强功能

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

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

  • $unwind非阵列操作数的阶段不再出错。如果操作数没有解析为数组,但没有缺失、空数组或空数组,$unwind将操作数视为单个元素数组。

    $unwind阶段可以:

    • 通过在阶段规范中指定新选项includeArrayIndex数组元素的数组索引包含在输出中。
    • 通过在阶段规范中指定新的optionpreserveNullAndEmptyArrays输出那些缺少数组字段、空数组或空数组的文档。

    为了支持这些新功能,$unwind现在可以采用替代语法。有关详细信息,请参阅$unwind

优化

索引可以覆盖聚合操作。

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

如果管道以碎片键上的精确$match开始,则整个管道仅运行在匹配的碎片上。以前,管道将被拆分,合并工作必须在主碎片上完成。

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

兼容

有关兼容性更改,请参阅聚合兼容性更改。

MongoDB工具增强功能

加密存储引擎

企业功能

仅在MongoDB Enterprise中提供。

重要:

仅适用于WiredTiger存储引擎。

静态加密,当与传输加密和保护相关帐户、密码和加密密钥的良好安全策略一起使用时,可以帮助确保遵守安全和隐私标准,包括HIPAA、PCI-DSS和FERPA。

MongoDB Enterprise 3.2为WiredTiger存储引擎引入了本机加密选项。此功能允许MongoDB加密数据文件,以便只有拥有解密密钥的各方才能解码和读取数据。有关详细信息,请参阅加密存储引擎。

文本搜索增强功能

text索引版本3

MongoDB 3.2引入了文本索引的第3版。新版本索引的主要特点是:

从MongoDB 3.2开始,版本3是新文本索引的默认版本。

另见;

文本索引版本3兼容性

$text操作员增强

$text运算符增加了对以下内容的支持:

有关更多信息和示例,请参阅$text运算符参考部分Case InsensitivityDiacritic Insensitivity。

对其他语言的支持

企业功能:

仅在MongoDB Enterprise中提供。

从3.2开始,MongoDB Enterprise为以下语言提供支持:阿拉伯语、波斯语(特别是达里语和伊朗波斯语方言)、乌尔都语、简体中文和繁体中文。

有关详细信息,请参阅使用基础技术Rosette语言学平台进行文本搜索。

新的存储引擎

inMemory存储引擎

企业功能

仅在MongoDB Enterprise中提供。

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

要选择此存储引擎,请指定:

  • inMemory对于--storageEngine选项或storage.engine设置。
  • --dbpath。虽然内存存储引擎不会将数据写入文件系统,但它在--dbpath维护小型元数据文件和诊断数据以及用于构建大型索引的临时文件。

inMemory存储引擎使用文档级锁定。有关更多详细信息,请参阅内存存储引擎。

ephemeralForTest存储引擎

MongoDB 3.2提供了一种新的测试存储引擎。除了一些元数据外,待测存储引擎不维护任何磁盘数据,无需在测试运行之间进行清理。测试存储引擎不受支持。

警告:

仅用于测试目的。不要在生产中使用。

要选择此存储引擎,请指定

  • ephemeralForTest对于--storageEngine选项或storage.engine设置。
  • --dbpath。虽然测试存储引擎不会将数据写入文件系统,但它在--dbpath中维护小型元数据文件。

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

一般增强功能

位测试查询运算符

MongoDB 3.2提供了新的查询运算符来测试位值:

SpiderMonkey JavaScript引擎

mongoDB 3.2使用SpiderMonkey作为mongo shell和mongood服务器的JavaScript引擎。SpiderMonkey提供了对其他平台的支持,并改进了存储管理模型。

此更改影响所有JavaScript行为,包括命令mapReduce团体,以及查询运算符$where但是,此更改对用户应该是完全透明的。

另见:

SpiderMonkey兼容性变化

mongoShell和CRUD API

提供与MongoDB驱动程序的CRUD一致性

(创建/读取/更新/删除)API时,mongo shell 引入了与驱动程序的CRUD API 一致的其他CRUD方法:

新的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( , true )ordbdb.collection.remove( , { justOne: true } )
db.collection.findOneAndDelete() 相当于db.collection.findAndModify()方法,remove设置为true。
db.collection.findOneAndReplace() 相当于db.collection.findAndModify()方法,将update设置为替换文档。
db.collection.findOneAndUpdate() 相当于db.collection.findAndModify()方法,将update设置为使用更新运算符指定修改的文档
db.collection.insertMany() 相当于以文档数组为参数的db.collection.insert()方法。
db.collection.insertOne() 相当于以单个文档为参数的db.collection.insert()方法。
db.collection.replaceOne() 相当于db.collection.update( , )方法,替换文档作为<update>参数。
db.collection.updateMany() 等效的 todbdb.collection.update( , , { multi: true, ... })方法,带有<update>文档,该文档指定使用更新运算符和设置为true的multi选项进行修改。
db.collection.updateOne() 相当于db.collection.update( , )方法,带有<update>文档,该文档指定使用更新运算符进行修改

WiredTiger 和 fsyncLock

从MongoDB 3.2开始,WirdTider存储引擎支持带锁选项的fsync命令或mongo shell 方法db.fsyncLock()中的一个也就是说,对于WiredTiger存储引擎来说,这些操作可以保证数据文件不发生变化,保证了创建备份的一致性。

平台支持

从3.2开始,32位二进制文件不建议使用,在未来的版本中将不可用。

MongoDB 3.2也不建议支持Red Hat Enterprise Linux 5。

$type运算符接受字符串别名

$type除了与BSON类型对应的数字外,运算符还接受BSON类型的字符串别名。

explain()支持distinct()操作

db.collection.explain()添加支持

db.collection.distinct() 方法中,有关更多信息请参考

db.collection.explain().

explain支持findAndModifydistinct命令

explain增加了对distinctfindAndModify命令的支持。有关更多信息,请参阅explain

HTTP接口的弃用

从3.2开始,MongoDB不建议使用其HTTP接口。

keysExamined计数包括上次扫描的密钥

对于explainexecutionStatsallPlansExecution模式下运行的操作,解释输出包含keysExamined统计信息,表示索引扫描期间检查的索引键数量。

在3.2之前,一些查询中的keysExamined计数不包括上次扫描的键。截至3.2,此错误已更正。有关更多信息,请参阅inputStage

诊断日志和系统分析器报告了此统计数据。

地理空间优化

MongoDB 3.2引入了2dsphere lndexes的第3版,该版本以更精细的层次对GeoJSON几何体进行索引。新版本提高了2dsphere索引查询在较小区域上的性能。此外,对于2d lndex和2dsphere索引,geoNear查询的性能在密集数据集中得到了改进。

另见:

2dsphere索引版本3兼容性

诊断数据采集

为了便于MongoDBengineers分析MongoDB服务器行为,MongoDB 3.2引入了一种诊断数据收集机制,用于定期将服务器统计数据记录到诊断文件中。默认情况下,该机制每隔1秒捕获数据。要修改间隔,请参阅 diagnosticDataCollectionPeriodMillis

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

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

捕获间隔和最大大小的默认值被选择,以便为MongoDB工程师提供对性能和存储大小影响最小的有用数据。通常,这些值只需要根据MongoDB工程师的要求进行修改,用于特定的诊断目的。

写出关注

  • 对于使用 protocolVersion: 1的副本集,辅助成员向其他各自的磁盘日子写入数据后,辅助成员确任写入操作,而不考虑j选项。
  • 对于使用protocolVersion的复本集 ,w:"多数"意味着j : true
  • 对于j :true,MongoDB只在请求的成员数量(包括主成员)以经写入日志之后才返回。以前的j:副本集中的true write关注点只要求主节点向日志写入,而不考虑 w: write关注点。

journalCommitInterval用于WiredTiger

MongoDB 3.2增加了对指定WiredTiger存储引擎日志提交间隔的支持。请参阅--journalCommitInterval选项。在之前的版本中,该选项仅适用于MMAPv1存储引擎。

对于相应的配置文件设置,MongoDB 3.2添加了

storage.journal.commitIntervalMs设置和弃用

storage.mmapv1.journal.commitIntervalMs。不建议使用的

storage.mmapv1.journal.commitIntervalMs设置充当新

storage.journal.commitIntervalMs设置。

影响兼容性的变化

一些MongoDB 3.2更改可能会影响兼容性,并可能需要用户操作。有关兼容性更改的详细列表,请参阅MongoDB 3.2中的兼容性更改。

升级流程

有关完整的升级说明,请参阅将MongoDB升级到3.2

3.2.1中的已知问题

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

3.2.0中的已知问题

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

下载img

要下载MongoDB 3.2,请转到下载页面。

另见:

译者:韩鹏帅

参见

原文 - Release Notes for MongoDB 3.2

Copyright © 上海锦木信息技术有限公司 all right reserved,powered by Gitbook文件修订时间: 2023-09-01 17:10:26

results matching ""

    No results matching ""