On this page
MongoDB 2.0 发行说明
在本页面
Upgrading
尽管主要版本号已更改,但是 MongoDB 2.0 是标准的增量生产版本,并且可以替代 MongoDB 1.8.
Preparation
在升级之前,请通读所有发行说明,并确保没有任何更改会影响您的部署。
如果在 2.0 中创建新索引,则可以降级到 1.8,但必须重新索引新集合。
mongoimport和mongoexport现在正确遵守 CSV 规范以处理 CSVImporting/输出。这可能会破坏依赖于先前行为的现有导入/导出工作流。有关更多信息,请参见SERVER-1097。
Journaling在 2.0 中 默认启用 对于 64 位版本。如果您仍然希望在没有日记的情况下运行,请使用--nojournal运行时选项启动mongod。否则,MongoDB 将在启动期间创建日记文件。首次使用日志记录启动mongod时,由于mongod创建新文件,您会看到延迟。此外,您可能会看到写入吞吐量降低。
2 .0 mongod实例可与 1.8 mongod实例互操作;但是,为了获得最佳结果,请使用以下过程升级部署:
升级独立的 mongod
从MongoDB 下载页面下载 v2.0.x 二进制文件。
升级副本集
通过关闭mongod并用MongoDB 下载页面中的 2.0.x 二进制文件替换 1.8 二进制文件,一次升级集合secondary的成员。
为了避免在故障转移上丢失最后的几个更新,您可以暂时停止应用程序(故障转移应少于 10 秒),或者可以在应用程序代码中设置write concern来确认每个更新都到达多个服务器。
使用rs.stepDown()降级主要数据库,以执行正常的failover程序。
与直接关闭主数据库相比,rs.stepDown()和replSetStepDown提供了更短且更一致的故障转移过程。
主数据库降级后,请关闭其实例并通过将mongod二进制文件替换为 2.0.x 二进制文件来进行升级。
升级分片群集
首先以任何 Sequences 升级所有config server个实例。由于配置服务器使用两阶段提交,因此shard配置元数据更新将暂停,直到所有启动和运行。
以任何 Sequences 升级mongosRouter。
Changes
Compact Command
现在可以使用compact命令来压缩单个集合及其索引。以前,压缩的唯一方法是修复整个数据库。
Concurrency Improvements
当进入磁盘时,服务器将在写入不太可能在内存中的数据时产生写锁定。现在存在此功能的初始实现:
有关更多信息,请参见SERVER-2563。
2.0 中的特定操作收益为:
_id
更新Removes
长游标迭代
默认堆栈大小
MongoDB 2.0 会减小默认堆栈大小。当有许多(例如 1000 个)Client 端连接时,此更改可以减少总内存使用量,因为每个连接都有一个线程。尽管线程堆栈的某些部分在未使用的情况下可以换出,但是某些 os 的执行速度很慢,因此可能会出现问题。默认堆栈大小小于系统设置或 1MB。
索引性能增强
v2.0 对index进行了重大改进。索引通常小 25%,快 25%(取决于用例)。从以前的版本升级时,只有在创建新索引或为旧索引重新索引时,才能实现新索引类型的优点。
现在已签名日期,并且最大索引键大小已从 819 字节略微增加到 1024 字节。
默认情况下,所有创建新索引的操作都将产生 2.0 索引。例如:
在旧版本索引上重新索引结果将生成 2.0 索引。但是,在 2.0 版之前的版本中,在辅助节点上重新构建索引*是不起作用的。不要在辅助数据库上重新编制索引。有关解决方法,请参阅SERVER-3866。
repairDatabase命令将索引转换为 2.0 索引。
要将给定集合的所有索引转换为2.0 type,请调用compact命令。
一旦创建了新索引,降级到 1.8.x 将需要重新索引使用 2.0 创建的所有索引。参见/tutorial/roll-back-to-v1.8-index。
Sharding Authentication
Replica Sets
分片群集中的隐藏节点
Priorities
现在,每个replica set成员都可以具有一个优先级值,该优先级值包括从 0 到 1000(含 0 和 1000)之间的一个浮点数。通过优先级,您可以控制要优先选择集合中的哪个成员,例如primary,可以看到大多数集合的具有最高优先级的成员将被选为主。
例如,假设您有一个包含三个成员A
,B
和C
的副本集,并假设它们的优先级设置如下:
A
的优先级为2
。B
的优先级为3
。C
的优先级为1
。
在正常操作期间,设备将始终选择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
当repair
或compact在secondary上运行时,辅助节点将自动进入“恢复”模式,直到操作完成。这样可以防止 Client 端在繁忙时尝试从中读取信息。
Geospatial Features
Multi-Location Documents
现在,具有嵌入式或嵌入式文档的多个位置对象的文档支持索引。还支持其他命令选项,不仅可以返回距离,还可以返回用于生成距离的位置的结果。
有关更多信息,请参见二维索引的多位置文档。
Polygon searches
现在,简单的多边形也支持多边形$within查询。有关详细信息,请参见$within操作员文档。
Journaling Enhancements
现在默认情况下为 64 位平台启用日记功能。使用
--nojournal
命令行选项将其禁用。日志现在已压缩,以便更快地提交到磁盘。
存在一个新的--journalCommitInterval运行时选项,用于指定您自己的组提交间隔。默认设置不变。
一个新的{ getLastError: { j: true } }选项可用于 await 组提交。当 Client 端 await
{j: true}
时,组提交会更快发生。如果禁用日记功能,则{j: true}
是无操作。
批量插入的新 ContinueOnError 选项
在driver中为批量插入设置continueOnError
选项,以便即使插入失败,批量插入也将 continue 插入所有剩余的文档,就像重复的密钥异常或网络中断一样。 getLastError命令将报告是否有任何插入失败,而不仅仅是最后一个。如果发生多个错误,Client 端将仅收到最新的getLastError结果。
Note
对于分片群集上的批量插入,仅getLastError命令不足以验证成功。应用程序必须在应用程序逻辑中验证批量插入是否成功。
Map Reduce
输出到分片集合
使用新的sharded
标志,可以将 Map/归约的结果发送到分片集合。与reduce
或merge
标志结合使用,可以 continue 将数据添加到来自 map/reduce 作业的非常大的集合中。
有关更多信息,请参见Map-Reduce和mapReduce参考。
Performance Improvements
Map/缩减性能将从以下方面受益:
更大的内存缓冲区大小,减少了作业期间所需的磁盘 I/O 数量
较大的 javascript 堆大小,允许更大的对象和更少的 GC
支持带有
jsMode
标志的纯 JavaScript 执行。请参阅mapReduce参考。
新查询功能
其他正则表达式选项:s
允许点(.
)匹配所有字符,包括换行符。这是当前支持的i
,m
和x
的补充。参见$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)运行时,所有数据库命令都需要身份验证,以下命令除外。