MongoDB 1.8 发行说明

在本页面

Upgrading

MongoDB 1.8 是一个标准的增量产品版本,可作为 MongoDB 1.6 的直接替代产品,但以下情况除外:

  • Replica set成员应按照升级副本集中所述的特定 Sequences 升级。

  • mapReduce命令已在 1.8 中更改,导致与以前的版本不兼容。 mapReduce不再生成临时集合(因此keepTemp已被删除)。现在,您必须始终提供out的值。请参见mapReduce文档中的out字段选项。如果使用 MapReduce,这也可能意味着您需要 Client 端驱动程序的最新版本。

Preparation

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

升级独立的 mongod

  • MongoDB 下载页面下载 v1.8.x 二进制文件。

  • 关闭您的mongod实例。

  • 用 1.8.x mongod二进制文件替换现有的二进制文件。

  • Restart MongoDB.

升级副本集

1 .8.x secondaries **可以从 1.6.x primaries复制。

1 .6.x 辅助副本 无法 从 1.8.x 主副本复制。

因此,要升级replica set,您必须先替换所有辅助节点,然后替换主节点。

例如,假设您有一个副本集,其中包含一个主副本,一个arbiter和多个次副本。要升级该集,请执行以下操作:

  • 对于仲裁人:

  • 关闭仲裁人。

  • 更改配置(可选),以防止选择新的主数据库。

当您开始关闭集合的成员时,可能会选择一个新的主要数据库。为避免这种情况,您可以在升级之前为所有辅助服务器设置0的优先级,然后再将其更改。为此:

  • 记录您当前的配置。运行rs.config()并将结果粘贴到文本文件中。

    • 更新您的配置,以使所有辅助节点都具有优先级0。例如:
config = rs.conf()
{
     "_id" : "foo",
     "version" : 3,
     "members" : [
             {
                     "_id" : 0,
                     "host" : "ubuntu:27017"
             },
             {
                     "_id" : 1,
                     "host" : "ubuntu:27018"
             },
             {
                     "_id" : 2,
                     "host" : "ubuntu:27019",
                     "arbiterOnly" : true
             }
             {
                     "_id" : 3,
                     "host" : "ubuntu:27020"
             },
             {
                     "_id" : 4,
                     "host" : "ubuntu:27021"
             },
     ]
}
config.version++
3
rs.isMaster()
{
     "setName" : "foo",
     "ismaster" : false,
     "secondary" : true,
     "hosts" : [
             "ubuntu:27017",
             "ubuntu:27018"
     ],
     "arbiters" : [
             "ubuntu:27019"
     ],
     "primary" : "ubuntu:27018",
     "ok" : 1
}
// for each secondary
config.members[0].priority = 0
config.members[3].priority = 0
config.members[4].priority = 0
rs.reconfig(config)
  • 对于每个中学:

  • 关闭辅助服务器。

  • 如果您更改了配置,请将其更改回其原始状态:

config = rs.conf()
config.version++
config.members[0].priority = 1
config.members[3].priority = 1
config.members[4].priority = 1
rs.reconfig(config)
  • 关闭主服务器(最终的 1.6 服务器),然后使用MongoDB 下载页面中的 1.8.x 二进制文件重新启动它。

升级分片群集

  • 关闭平衡器:
mongo <a_mongos_hostname>
use config
db.settings.update({_id:"balancer"},{$set : {stopped:true}}, true)
use config
db.settings.update({_id:"balancer"},{$set : {stopped:false}})

返回 1.6

如果出于任何原因必须回到 1.6,请按照相反的 Sequences 执行上述步骤。请注意,在 1.8(最大大小已增加到 16MB)上运行时,没有插入任何大于 4MB 的文档。如果有,则服务器尝试读取这些文档时会出现错误。

Journaling

使用 1.8 Journaling后返回 1.6 可以正常工作,因为日记不会更改有关数据文件格式的任何内容。假设您正在启用日记功能的情况下运行 1.8.x,并且您决定切换回 1.6. 有两种情况:

  • 如果您使用 1.8.x 彻底关闭,只需使用 1.6 mongod 二进制文件重新启动即可。

  • 如果 1.8.x 不正常地关闭,请重新启动 1.8.x,并运行日志文件以修复崩溃时可能存在的任何损坏(写入不完整)。然后干净地关闭 1.8.x,并使用 1.6 mongod 二进制文件重新启动。

Changes

Journaling

MongoDB 现在支持预写Journaling,以促进快速崩溃恢复和存储引擎的持久性。启用日记功能后,mongod可以在崩溃后快速重新启动,而无需修复collections。聚合框架使聚合成为可能

稀疏索引和涵盖索引

Sparse Indexes是仅包含包含索引中指定字段的文档的索引。缺少该字段的文档将根本不会出现在索引中。这可以显着减小collection内仅包含文档子集的字段的索引的索引大小。

当查询仅选择索引包含的字段时,Covered Indexes使 MongoDB 能够完全从索引回答查询。

增量 MapReduce 支持

mapReduce命令支持新选项,这些选项可用于增量更新现有的collections。以前,MapReduce 作业可以输出到临时集合或命名的永久集合,然后将其用新数据覆盖。

现在,您可以使用几个选项来输出 MapReduce 作业:

  • 您可以将 MapReduce 输出合并到现有集合中。 Reduce 阶段的输出将替换输出集合中的现有键(如果已存在)。其他键将保留在集合中。

  • 现在,您可以使用现有集合的内容来重新缩减输出。 reduce 阶段输出的每个键都将与输出集合中的现有文档一起减少。

  • 您可以使用 MapReduce 作业的新结果替换现有的输出集合(等同于在先前版本中设置永久的输出集合)

  • 您可以内联计算 MapReduce 并将结果返回给调用方,而无需保留工作结果。这与以前版本中生成的临时集合相似,但结果限制为 8MB。

有关更多信息,请参见mapReduce文档中的out字段选项。

其他更改和增强功能

1.8.1

  • 移动较大的块时分片迁移修复。

  • 带有背景索引的耐久性修复。

  • 修复了许多传入连接的 mongos 并发问题。

1.8.0

  • 从 1.7.x 系列开始的所有更改。

1.7.6

  • Bug fixes.

1.7.5

1.7.4

1.7.3

  • 最初的covered index支持。

  • Distinct 可以尽可能使用索引中的数据。

  • mapReduce可以将结果合并或减少到现有集合中。

  • mongod曲目和mongostat显示网络使用情况。参见mongostat

  • 分片稳定性得到改善。

1.7.2

  • $rename运算符允许重命名文档中的字段。

  • db.eval()不阻止。

  • 分片的地理查询。

  • mongostat --discover option

  • 块分割增强功能。

  • 副本服务器为 nat 服务器设置了网络增强功能。

1.7.1

  • 增强了分片性能。

  • 更好地支持嵌入式数组中的图元上的$elemMatch

  • 查询优化器对范围查询的增强。

  • 窗口服务增强。

  • 副本集设置改进。

  • $pull适用于数组中的基元。

1.7.0

  • 重型刀片负载下的分片性能提高。

  • 对副本集的从属延迟支持。

  • getLastErrorDefaults用于副本集。

  • 在 Shell 中自动完成。

  • 地理搜索的球面距离。

  • 1.6.1 和 1.6.2 中的所有修复。

发布公告论坛页面

Resources