MongoDB 2.0 发行说明

在本页面

Upgrading

尽管主要版本号已更改,但是 MongoDB 2.0 是标准的增量生产版本,并且可以替代 MongoDB 1.8.

Preparation

在升级之前,请通读所有发行说明,并确保没有任何更改会影响您的部署。

如果在 2.0 中创建新索引,则可以降级到 1.8,但必须重新索引新集合。

mongoimportmongoexport现在正确遵守 CSV 规范以处理 CSVImporting/输出。这可能会破坏依赖于先前行为的现有导入/导出工作流。有关更多信息,请参见SERVER-1097

Journaling在 2.0 中 默认启用 对于 64 位版本。如果您仍然希望在没有日记的情况下运行,请使用--nojournal运行时选项启动mongod。否则,MongoDB 将在启动期间创建日记文件。首次使用日志记录启动mongod时,由于mongod创建新文件,您会看到延迟。此外,您可能会看到写入吞吐量降低。

2 .0 mongod实例可与 1.8 mongod实例互操作;但是,为了获得最佳结果,请使用以下过程升级部署:

升级独立的 mongod

升级副本集

与直接关闭主数据库相比,rs.stepDown()replSetStepDown提供了更短且更一致的故障转移过程。

主数据库降级后,请关闭其实例并通过将mongod二进制文件替换为 2.0.x 二进制文件来进行升级。

升级分片群集

Changes

Compact Command

现在可以使用compact命令来压缩单个集合及其索引。以前,压缩的唯一方法是修复整个数据库。

Concurrency Improvements

当进入磁盘时,服务器将在写入不太可能在内存中的数据时产生写锁定。现在存在此功能的初始实现:

有关更多信息,请参见SERVER-2563

2.0 中的特定操作收益为:

默认堆栈大小

MongoDB 2.0 会减小默认堆栈大小。当有许多(例如 1000 个)Client 端连接时,此更改可以减少总内存使用量,因为每个连接都有一个线程。尽管线程堆栈的某些部分在未使用的情况下可以换出,但是某些 os 的执行速度很慢,因此可能会出现问题。默认堆栈大小小于系统设置或 1MB。

索引性能增强

v2.0 对index进行了重大改进。索引通常小 25%,快 25%(取决于用例)。从以前的版本升级时,只有在创建新索引或为旧索引重新索引时,才能实现新索引类型的优点。

现在已签名日期,并且最大索引键大小已从 819 字节略微增加到 1024 字节。

默认情况下,所有创建新索引的操作都将产生 2.0 索引。例如:

要将给定集合的所有索引转换为2.0 type,请调用compact命令。

一旦创建了新索引,降级到 1.8.x 将需要重新索引使用 2.0 创建的所有索引。参见/tutorial/roll-back-to-v1.8-index

Sharding Authentication

应用程序现在可以通过sharded clusters使用身份验证。

Replica Sets

分片群集中的隐藏节点

在 2.0 中,mongos实例现在可以确定副本集的成员何时变为“隐藏”,而无需重新启动。在 1.8 中,如果您将mongos重新配置为隐藏成员,则必须重新启动mongos以防止查询到达隐藏成员。

Priorities

现在,每个replica set成员都可以具有一个优先级值,该优先级值包括从 0 到 1000(含 0 和 1000)之间的一个浮点数。通过优先级,您可以控制要优先选择集合中的哪个成员,例如primary,可以看到大多数集合的具有最高优先级的成员将被选为主。

例如,假设您有一个包含三个成员ABC的副本集,并假设它们的优先级设置如下:

在正常操作期间,设备将始终选择B作为主要设备。如果B变得不可用,则该集合将选择A作为主要对象。

有关更多信息,请参见priority文档。

Data-Center Awareness

您现在可以“标记” replica set个成员以指示其位置。您可以使用这些标签在数据中心,机架,特定服务器或任何其他体系结构选择中设计自定义write rules

例如,Management 员可以定义诸如“非常重要的写入”或“ customerData”或“审核线索”之类的规则,以复制到某些服务器,机架,数据中心等。然后,在应用程序代码中,开发人员会说:

db.foo.insert(doc, {w : "very important write"})

如果它满足 DBA 为“非常重要的写入”定义的条件,那么它将成功。

有关更多信息,请参见数据中心意识

驱动程序还可能支持标记识别读取。不用指定slaveOk,而是使用带有指示要读取的数据中心的标记来指定slaveOk。有关详细信息,请参见Drivers文档。

w:多数

您还可以将w设置为majority,以确保写入传播到大多数节点,从而有效地进行提交。当您从集合中添加或删除节点时,“多数”的值将自动调整。

有关更多信息,请参见Write Concern

进行少数族裔重新配置

如果集合中的大多数服务器永久丢失,则现在可以强制重新配置集合以使其重新联机。

有关更多信息,请参见用不可用的成员重新配置副本集

主服务器在下台之前检查是否被追赶的辅助服务器

为了最大程度地减少没有primary的时间,如果主节点在最近的操作时间后 10 秒内未看到secondary,则rs.stepDown()方法现在将失败。您仍然可以强制主服务器降级,但是默认情况下,它将返回错误消息。

另请参见强制会员成为主要会员

扩展了主服务器的关机功能,以最大程度地减少中断

当您调用shutdown命令时,除非有secondary的运行时间在主服务器的 10 秒以内,否则primary将拒绝关闭。如果此类辅助服务器不可用,则主服务器将退出并 await 一分钟,以使辅助服务器完全恢复,然后再关闭。

请注意,要获得此行为,必须显式发出shutdown命令;向进程发送 signal 不会触发此行为。

您也可以强制关闭主数据库,即使没有可用的最新辅助数据库也是如此。

Maintenance Mode

repaircompactsecondary上运行时,辅助节点将自动进入“恢复”模式,直到操作完成。这样可以防止 Client 端在繁忙时尝试从中读取信息。

Geospatial Features

Multi-Location Documents

现在,具有嵌入式或嵌入式文档的多个位置对象的文档支持索引。还支持其他命令选项,不仅可以返回距离,还可以返回用于生成距离的位置的结果。

有关更多信息,请参见二维索引的多位置文档

Polygon searches

现在,简单的多边形也支持多边形$within查询。有关详细信息,请参见$within操作员文档。

Journaling Enhancements

批量插入的新 ContinueOnError 选项

driver中为批量插入设置continueOnError选项,以便即使插入失败,批量插入也将 continue 插入所有剩余的文档,就像重复的密钥异常或网络中断一样。 getLastError命令将报告是否有任何插入失败,而不仅仅是最后一个。如果发生多个错误,Client 端将仅收到最新的getLastError结果。

Note

对于分片群集上的批量插入,仅getLastError命令不足以验证成功。应用程序必须在应用程序逻辑中验证批量插入是否成功。

Map Reduce

输出到分片集合

使用新的sharded标志,可以将 Map/归约的结果发送到分片集合。与reducemerge标志结合使用,可以 continue 将数据添加到来自 map/reduce 作业的非常大的集合中。

有关更多信息,请参见Map-ReducemapReduce参考。

Performance Improvements

Map/缩减性能将从以下方面受益:

新查询功能

其他正则表达式选项:s

允许点(.)匹配所有字符,包括换行符。这是当前支持的imx的补充。参见$regex

$and

现在可以使用特殊的布尔$and查询运算符。

命令输出更改

validate命令的输出和system.profile集合中的文档均已得到增强,可以将信息作为具有每个值的键的 BSON 对象而不是自由格式的字符串返回。

Shell Features

Custom Prompt

您可以为mongo shell 定义自定义提示。您可以随时通过将提示变量设置为字符串或返回字符串的自定义 JavaScript 函数来更改提示。有关示例,请参见自定义提示

默认 Shell 初始化脚本

启动时,Shell 程序将在用户的主目录中检查.mongorc.js文件。 Shell 将在连接到数据库之后并在显示提示之前执行此文件。

如果您不希望 Shell 程序自动运行.mongorc.js文件,请使用--norc启动 Shell 程序。

有关更多信息,请参见mongo参考。

大多数命令都需要身份验证

在 2.0 中,当使用身份验证(例如authorization)运行时,所有数据库命令都需要身份验证,以下命令除外。

Resources

首页