MongoDB 2.2的发布说明

升级

MongoDB 2.2是一个生产发布系列,继承了2.0生产发布系列。

MongoDB 2.0数据文件与2.2系列二进制文件兼容,没有任何特殊的迁移过程。但是,请始终按照以下步骤对副本集和分片集群执行升级过程。

大纲

  • mongod,2.2是2.0和1.8的下拉式替代品。

  • 检查你的驱动程序有关所需兼容性升级信息的文档,并始终运行驱动程序的最新版本。

    通常,只有运行身份验证的用户,在继续升级到2.2之前,需要升级驱动程序。

  • 对于所有使用身份验证的部署,在升级mongod实例之前,请升级驱动程序(即客户端库)。

  • 对于所有分片集群的升级:

    • 在升级过程中关闭平衡器。有关更多信息,请参阅禁用平衡器部分。
    • 在升级任何mongos实例之前,请升级所有mongod实例。

除上述限制外,2.2个流程可以与2.0和1.8工具和流程互操作。在部署运行期间,您可以逐个安全地升级部署的mongodmongos组件。在升级生产系统之前,请务必阅读以下详细的升级程序。[1]

[1] 为了最大程度地减少选举过程造成的中断 ,请始终先升级集合的辅助数据库,然后再升级主数据库,然后再升级主数据库。step down

升级独立产品mongod

  1. 从2.2系列中下载最新版本的二进制文件MongoDB下载页面。
  2. 关闭您的mongod实例。将现有的二进制文件替换为2.2 mongod二进制文件,然后重新启动MongoDB。

升级复制集

您可以通过单独升级成员来执行集合的“滚动”升级,从而升级到2.2,而其他成员则可以最大程度地减少停机时间。使用以下过程:

  1. 通过关闭并一次将2.0二进制文件替换为2.2二进制文件,一次升级集合的第二个成员mongod。升级mongod实例后,请等待成员恢复到SECONDARY状态,然后再升级下一个实例。要检查成员的状态,请rs.status()mongoshell中发出。

  2. 使用mongoshell方法rs.stepDown()降级主要数据库,以允许常规故障转移过程。 rs.stepDown() 加快故障转移过程,并且比直接关闭主数据库更可取。

    一旦主节点降级并且另一个成员进入 PRIMARY状态,如在输出中观察到的 rs.status(),请关闭先前的主节点,并用mongod2.2二进制文件替换 二进制文件并启动新进程。

    注意

    副本集故障转移不是即时的,但是将使该集不可用于读取或接受写入,直到故障转移过程完成为止。通常,这需要10秒钟或更长时间。您可能希望在预定义的维护时段内计划升级。

升级分片群集

使用以下过程升级分片群集:

  • 禁用平衡器
  • 首先以任何顺序升级所有mongos实例。
  • mongod使用独立过程升级所有配置服务器实例。要使群集保持联机状态,请确保始终至少有一台配置服务器启动。
  • 使用上面详细介绍的副本集升级过程,升级每个碎片的副本集。
  • 重新启用平衡器。

注意

当前在2.0.x和2.2.0 混合部署中不支持平衡。因此,您希望在合理的时间段内(例如同一天)为所有分片取得一致的版本。有关更多信息,请参见SERVER-6902

变更

主要功能

聚合框架

聚合框架使无需使用map-reduce即可进行聚合操作。该 aggregate命令公开了聚合框架,并且外壳程序中的 aggregate()帮助mongo程序为这些操作提供了接口。考虑以下资源,以了解聚合框架及其用法:

TTL集合

TTL集合使用特殊索引和后台线程从集合中删除过期数据,该后台线程每分钟删除一次过期文档。在某些情况下,例如在数据仓库和缓存情况下,这些集合可用于替代 上限集合,包括:机器生成的事件数据,日志和会话信息,它们仅需要在有限的时间段内保留。

有关更多信息,请参见通过设置TTL从集合中过期数据教程。

并发改进

MongoDB 2.2通过以下改进增加了服务器的并发操作能力:

  1. 数据库级别锁定
  2. 改善页面错误的屈服
  3. Windows上改进的页面错误检测

为了反映这些更改,MongoDB现在提供了更改和改进的并发和使用报告。见recordStatsdb.currentOp()mongotopmongostat

通过标签感知分片提高了数据中心的意识

MongoDB 2.2添加了对地理分布或集群中分片集合的其他自定义分区的附加支持。通过使用这种“标记感知”分片,您可以自动确保分片数据库系统中的数据始终位于特定分片上。例如,使用标记感知分片,可以确保数据与最经常使用该数据的应用程序服务器最接近。

碎片标记控制数据位置,并且与副本集标记互补,但与副本集标记分开,副本集标记控制读取首选项写关注。例如,分片标记可以将所有“美国”数据固定到一个或多个逻辑分片,而副本集标记可以控制应用程序使用哪些mongod实例(例如“ production”或“ reporting”)来服务请求。

请参阅mongo shell中支持标记分片配置的以下帮助程序的文档:

完全支持的读取首选项语义

现在,所有MongoDB客户端和驱动程序都支持完全读取首选项,包括对各种读取首选项模式标记集的一致支持。此支持扩展到,mongos并且同样适用于单个副本集以及分片群集中每个分片的副本集。

现在,mongo 使用readPref()cursor方法在shell中提供了附加的读取首选项支持。

兼容性变更

身份验证更改

MongoDB 2.2为身份验证客户端(包括驱动程序和mongos实例)提供更可靠、更强大的支持。

如果您的集群运行时具有身份验证:

  • 对于所有驱动程序,请使用最新版本的驱动程序并检查其发布说明。
  • 在分片环境中,为了确保您的集群在升级过程中仍然可用,您必须使用分片集群的升级过程。
findAndModify返回执行插入的升级的空值img

在2.2版本中,对于使用设置为false``new选项执行插入的向上搜索findAndModify命令现在将返回以下输出:

{ 'ok': 1.0, 'value': null }

mongoShell中,findAndModify 执行插入(new设置为false。)的upsert 操作仅输出一个null值。

在2.0版中,这些操作将返回一个空文档,例如。{ }

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

mongodump2.2 与Pre-2.2不兼容的输出mongorestore

如果使用mongodump2.2发行版中的工具创建数据库转储,则必须使用2.2(或更高版本)的 mongorestore还原该转储。

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

ObjectId().toString()返回字符串字面ObjectId("...")

在2.2版本中,toString()方法返回ObjectId()对象的字符串表示形式,格式为ObjectId("...")

考虑以下在ObjectId("507c7f79bcf86cd7994f6c0e")对象上调用toString()方法的示例:

ObjectId("507c7f79bcf86cd7994f6c0e").toString()

该方法现在返回:

tringObjectIdObjectId("507c7f79bcf86cd7994f6c0e")

以前,在2.0版本中,该方法将返回十六进制字符串507c7f79bcf86cd7994f6c0e

如果需要2.0和2.2版本之间的兼容性,请使用ObjectId().str,该版本在两个版本中都包含十六进制字符串值。

ObjectId().valueOf()`返回十六进制字符串img

在2.2版本中,valueOf()方法将ObjectId()对象的值作为小写十六进制字符串返回。

考虑以下在ObjectId("507c7f79bcf86cd7994f6c0e")对象上调用valueOf()方法的示例:

ObjectId("507c7f79bcf86cd7994f6c0e").valueOf()

该方法现在返回十六进制字符串507c7f79bcf86cd7994f6c0e

以前,在2.0版本中,该方法将返回:

objectObjectIdObjectId("507c7f79bcf86cd7994f6c0e")

如果需要2.0和2.2版本之间的兼容性,请使用ObjectId().str属性,该属性在两个版本中都包含十六进制字符串值。

行为变化

在集合名称限制

在版本2.2中,集合名称不能:

  • 包含$
  • 是空字符串(即""

此更改不影响在早期版本的MongoDB中使用现在非法名称创建的集合。

除了对集合名称的现有限制外,这些新限制是:

  • 集合名称应以字母或下划线开头。
  • 集合名称不能包含空字符。
  • system.前缀开头。MongoDB system. 为系统集合(例如集合) 保留system.indexes
  • 集合名称的最大大小为128个字符,包括数据库的名称。但是,为了获得最大的灵活性,集合的名称应少于80个字符。

集合名称可以具有任何其他有效的UTF-8字符串。

请参阅SERVER-4442和“ 命名限制”常见问题。

Windows 版数据库名称限制

在Windows上运行的数据库名称不能再包含以下字符:

/\. "*<>:|?

数据文件的名称包括数据库名称。如果您尝试使用一个或多个这些字符升级数据库实例,mongod将拒绝启动。

在升级之前更改这些数据库的名称。看服务器-4584服务器-6729了解更多信息。

_id上限集合上的字段和索引

如果所有有上限的集合存在于数据库外部_id默认情况下现在都有一个域local,并且现在在该_id域上具有索引。此更改仅影响使用2.2实例创建的上限集合,而不会影响现有的上限集合。

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

新的$elemMatch投影运算符

$elemMatch运算符允许应用程序缩小从查询返回的数据范围,以便查询操作将仅返回数组中的第一个匹配元素。请参阅$elemMatch参考和SERVER-2238SERVER-828获取更多信息的问题。

Windows特定更改

不支持Windows XP

截至2.2,MongoDB不支持Windows XP。请升级到最新版本的Windows,以使用最新版本的MongoDB。看SERVER-5648了解更多信息。

服务支持mongos.exe

您现在可以将exe实例作为Windows服务运行。

日志旋转命令支持

Windows版MongoDB现在通过logRotate数据库命令支持日志旋转。看SERVER-2612了解更多信息。

使用SlimReadWrite Locks for Windows并发的新版本

下载页面上标记为“ 2008+”的此版本针对Windows Server 2008 R2的64位版本以及Windows 7或更高版本提供了比MongoDB的标准64位Windows版本更高的性能。有关更多信息,请参见SERVER-3844

工具改进

mongodumpmongorestore

当您指定--collection选项时mongodumpmongodump现在将备份源数据库上存在的所有索引的定义。当您尝试恢复此备份时mongorestore,目标mongod将重建所有指数。看SERVER-808了解更多信息。

mongorestore现在包括--noIndexRestore提供上述行为的选项。使用--noIndexRestore以防止mongorestore从建筑以前索引。

mongooplog用于重播Oplog

mongooplog工具可以从mongod实例中提取oplog条目并将其应用于另一个mongod实例。您可以使用mongooplog实现MongoDB数据集的时间点备份。请参阅SERVER-3873案例和mongooplog参考。

mongotopmongostat

mongotopmongostat现在包含对用户名/密码身份验证的支持。看SERVER-3875SERVER-3871了解有关此更改的更多信息。还要考虑记录以下选项以获取更多信息:

  • mongotop --username
  • mongotop --password
  • mongostat --username
  • mongostat --password
撰写对mongoimportmongorestore

mongoimport现在,如果操作遇到错误,例如网络中断、重复密钥异常或写入错误,则提供停止导入的选项。--stopOnError选项将产生错误,而不是默默地继续导入数据。看SERVER-3937了解更多信息。

mongorestore--w选项为可配置的写入问题提供支持。

mongodump支持从中学阅读

现在mongodump,连接到副本集的 辅助成员后即可运行。有关更多信息,请参见 SERVER-3854

mongoimport支持完整的16MB文档

以前,mongoimport只会导入大小小于4兆字节的文件。此问题现已得到纠正,您可以使用mongoimport导入大小至少为16兆字节的文档。看SERVER-4593了解更多信息。

Timestamp()扩展的JSON格式

MongoDB扩展的JSON现在包括一个新的Timestamp()类型,以表示MongoDB在oplog中用于时间戳的Timetamp类型。

这允许像mongooplogmongodump查询特定时间戳。考虑以下几点mongodump操作:

mongodump --db local --collection oplog.rs --query '{"ts":{"$gt":{"$timestamp" : {"t": 1344969612000, "i": 1 }}}}'  --out oplog-dump

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

shell 改进

改进的shell用户界面

2.2包含许多更改,这些更改提高了mongoshell 程序用户界面的整体质量和一致性:

  • 全面的Unicode支持。
  • 重击般的行编辑功能。有关更多信息,请参见SERVER-4312
  • Shell历史记录中的多行命令支持。有关更多信息,请参见SERVER-3470
  • Windows对edit命令的支持。有关更多信息,请参见SERVER-3998
加载服务器端函数的帮助程序

db.loadServerScripts()当前数据库system.js集合的内容加载到当前mongoShell会话中。

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

支持批量插入

如果您将文档数组传递给insert()方法,mongo现在将执行批量插入操作。

SERVER-3819SERVER-2395了解更多信息。

注意

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

运营

支持登录Syslog

请参阅SERVER-2957和syslogFacility运行时选项或mongod --syslogmongos --syslog命令行选项的案例和文档。

touch指挥权

添加了touch命令,将集合中的数据和/或索引读取到内存中。参见:SERVER-2023touch以获取更多信息。

indexCounters不再报告采样数据

indexCounters现在报告反映索引使用和状态的实际计数器。在之前的版本中,对这些数据进行了采样。看SERVER-5784indexCounters以获取更多信息。

compact命令上可指定填充物

请参阅compactSERVER-4018获取更多信息的问题。

添加了构建标志以使用系统库

Boost库,1.49版本,现在嵌入在MongoDB代码库中。

如果您想使用system Boost库构建MongoDB二进制文件,您可以使用--use-system-boost标志传递scons,如下所示:

scons --use-system-boost

在构建MongoDB时,您还可以仅使用系统库而不是包含的库版本传递一个标志来编译MongoDB。例如:

scons --use-system-all

请参阅SERVER-3829SERVER-5172获取更多信息的问题。

内存分配器更改为TCMalloc

为了提高性能,MongoDB 2.2使用Google Perftools的TCMalloc内存定位器。有关此更改的更多信息,请参阅服务器-188服务器-4683。有关TCMalloc的更多信息,请参阅TCMalloc本身。

复制

改进了副本集滞后的日志记录

当副本集的次要成员在复制中落后时,mongod现在可以在日志中提供更好的报告。这使得可以跟踪一般复制,并确定哪些过程可能会产生错误或停止复制。看SERVER-3575了解更多信息。

副本集成员可以从特定成员同步

新的replSetSyncFrom命令和新 rs.syncFrom()帮手的mongoshell 有可能使您手动配置从哪个成员集合的副本将轮询OPLOG条目。如果需要,可以使用这些命令覆盖默认选择逻辑。replSetSyncFrom覆盖默认行为时请务必谨慎。

复制集成员不会与没有索引的成员同步,除非buildIndexes: false

为了防止副本集成员之间的不一致,如果副本集的成员将buildIndexes设置为true,则副本集的其他成员将不会与此成员同步,除非他们也将buildIndexes设置为true。看服务器-4160了解更多信息。

在复制期间配置索引预取的新选项

默认情况下,在复制选项时,次要将预取与查询关联的索引,以提高大多数情况下的复制吞吐量。replication.secondaryIndexPrefetch设置和`--replIndexPrefetch选项允许管理员禁用此功能或允许mongod仅预取_id字段上的索引。看服务器-6718了解更多信息。

地图减少改进

在2.2 Map Reduce中,Reduce获得了以下改进:

分层改进

碎片键上的索引现在可以成为复合索引

如果您的分片密钥使用现有索引的前缀,那么除了现有索引外,您无需为碎片密钥维护单独的索引。然而,这个指数不能是多键索引。请参阅碎片密钥索引文档和SERVER-1506了解更多信息

修改了迁移阈值

迁移阈值在2.2中发生了变化,以便在数据量较小的集合中更均匀地分布。有关更多信息,请参阅迁移阈值文档。

许可变更

添加了Google Perftools(TCMalloc实用程序)的许可证通知。请参阅许可证通知SERVER-4683了解更多信息。

资源img

译者:韩鹏帅

参见

原文 - Release Notes for MongoDB 2.2

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

results matching ""

    No results matching ""