On this page
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和多个次副本。要升级该集,请执行以下操作:
对于仲裁人:
关闭仲裁人。
- 使用MongoDB 下载页面中的 1.8.x 二进制文件重新启动它。
更改配置(可选),以防止选择新的主数据库。
当您开始关闭集合的成员时,可能会选择一个新的主要数据库。为避免这种情况,您可以在升级之前为所有辅助服务器设置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)
对于每个中学:
关闭辅助服务器。
- 使用MongoDB 下载页面中的 1.8.x 二进制文件重新启动它。
如果您更改了配置,请将其更改回其原始状态:
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)
对于每个shard:
如果分片是replica set,请遵循上面有关升级副本集的说明。
如果该碎片是单个mongod进程,请关闭它,然后使用MongoDB 下载页面中的 1.8.x 二进制文件重新启动它。
对于每个mongos:
关闭mongos进程。
- 使用MongoDB 下载页面中的 1.8.x 二进制文件重新启动它。
对于每个配置服务器:
关闭配置服务器进程。
- 使用MongoDB 下载页面中的 1.8.x 二进制文件重新启动它。
打开平衡器:
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
范围分配的改进。
改进了mongos的replica set连接。
getLastError对sharding的改进。
1.7.4
mongos将
slaveOk
个查询路由到replica sets中的secondaries。新的mapReduce输出选项。
1.7.3
最初的covered index支持。
Distinct 可以尽可能使用索引中的数据。
mapReduce可以将结果合并或减少到现有集合中。
分片稳定性得到改善。
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 中的所有修复。