MongoDB 1.8的发布说明
升级
MongoDB 1.8是一个标准的增量生产版本,可以作为MongoDB 1.6的下拉式替代品,除了:
- 副本集成员应按特定顺序升级,如升级复制集。
mapReduce
命令在1.8中发生了变化,导致与之前的版本不兼容。mapReduce
不再生成临时集合(因此,keepTemp
已被删除)。现在,你必须始终提供价值。查看mapReduce
文档中的out
字段选项。如果您使用MapReduce,这也可能意味着您需要最新版本的客户端驱动程序。
准备
在升级之前,请仔细阅读所有发布说明,并确保没有更改会影响您的部署。
升级独立产品mongod
- 下载v1.8.x二进制文件MongoDB下载页面。
- 关闭您的
mongod
实例。 - 将现有的二进制文件替换为1.8.x
mongod
二进制文件。 - 重新启动MongoDB。
升级复制集
1.6.x次选无法从1.8.x初选复制。
因此,要升级副本集,您必须先替换所有次要文件,然后替换主服务器。
例如,假设您有一个带有主、仲裁器和几个次要副本集。要升级套装,请执行以下操作:
1、对于仲裁者:
a.关闭仲裁员。
b.使用1.8.x二进制文件重新启动它MongoDB下载页面。
2、更改您的配置(可选),以防止选择新的初选。
当您开始关闭集合的成员时,可能会选出新的初选。为了防止这种情况,您可以在升级前将所有次要级别的优 先级为0
,然后将其更改回来。为此,请按照以下步骤操作:
a.记录您当前的配置。运行rs.config()
并将结果粘贴到文本文件中。
b.更新您的配置,以便所有次要的优先级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)
3、对于每个次要
a.关闭辅助
b.使用1.8.x二进制文件重新启动它MongoDB下载页面。
4、如果您更改了配置,请将其更改为原始状态:
config = rs.conf()
config.version++
config.members[0].priority = 1
config.members[3].priority = 1
config.members[4].priority = 1
rs.reconfig(config)
5、关闭主服务器(最终的1.6服务器),然后使用1.8.x二进制文件重新启动它MongoDB下载页面
升级分片集群
1、关闭平衡器:
mongo <a_mongos_hostname>
use config
db.settings.update({_id:"balancer"},{$set : {stopped:true}}, true)
2、对于每个分片:
如果碎片是一个单一的进程,请关闭它,然后使用1.8.x二进制文件重新启动它MongoDB下载页面。
3、对于每个mongos :
a.关闭mongos进程。
b.使用1.8.x二进制文件重新启动它MongoDB下载页面。
4、对于每个配置服务器:
a.关闭配置服务器进程。
b.使用1.8.x二进制文件重新启动它MongoDB下载页面。
5、打开平衡器:
use config
db.settings.update({_id:"balancer"},{$set : {stopped:false}})
返回1.6
如果出于任何原因,您必须返回1.6,请按照上面相反的步骤操作。请注意,在1.8上运行时,您没有插入任何大于4MB的文档(最大大小已增加到16MB)。如果您有,当服务器尝试读取这些文档时,您会收到错误。
日记
使用1.8日志后返回1.6可以正常工作,因为日志记录不会改变数据文件格式的任何内容。假设您在启用日志记录的情况下运行1.8.x,并决定切换回1.6。有两种情况:
如果您使用1.8.x干净地关闭,只需使用1.6个mongod二进制文件重新启动即可。
如果1.8.x不干净地关闭,请再次启动1.8.x,并让日志文件运行以修复崩溃时可能存在的任何损坏(写入不完整)。然后干净地关闭1.8.x,并使用1.6mongod二进制文件重新启动。
变化
日记
MongoDB现在支持提前写日记,以促进存储引擎的快速崩溃恢复和耐用性。启用日志记录后,可以在崩溃后快速重新启动mongod
,而无需修复收藏品。聚合管道可以进行聚合。
稀疏和覆盖的索引
稀疏索引是仅包含包含索引中指定字段的文档的索引。缺少字段的文档将根本不会出现在索引中。这可以显著减少集合中仅包含文档子集的字段索引的索引大小。
当查询仅选择索引包含的字段时,覆盖的索引使MongoDB能够完全从索引中回答查询。
增量地图减少支持
mapReduce
命令支持允许逐步更新现有集合的新选项。以前,MapReduce作业可以输出到临时集合或命名的永久集合,它会用新数据覆盖这些集合。
您现在有几个输出MapReduce作业的选项:
- 您可以将MapReduce输出合并到现有集合中。如果已经存在,还原阶段的输出将替换输出集合中的现有密钥。其他密钥将保留在收藏中。
- 您现在可以使用现有集合的内容重新减少输出。减少阶段的每个关键输出都将随着输出集合中的现有文档而减少。
- 您可以将现有输出集合替换为MapReduce作业的新结果(相当于在之前的版本中设置永久输出集合)
- 您可以内联计算MapReduce并将结果返回给调用者,而无需保留作业的结果。这与之前版本中生成的临时集合相似,但结果限制为8MB。
有关更多信息,请参阅mapReduce
文档中的out
字段选项。
其他更改和增强功能
1.8.1
- 移动较大块时,分叉迁移修复。
- 带有背景索引的耐用性修复。
- 修复了许多传入连接的mongos并发问题。
1.8.0
- 1.7.x系列的所有变化。
1.7.6
- 错误修复。
1.7.5
1.7.4
mongos
routesslaveOk
queries to secondaries in replica sets.- 新的
mapReduce
输出选项。 - 稀疏索引。
1.7.3
- 初始覆盖的索引支持。
- 区分可以在可能的情况下使用来自索引的数据。
mapReduce
可以将结果合并或减少到现有集合中。mongod
轨道和mongostat
显示网络使用情况。看mongostat。- 分层稳定性改进。
1.7.2
$rename
运算符允许重命名文档中的字段。db.eval()
不要阻止。- 带有分片的地理查询。
mongostat --discover
选项- 块分割增强功能。
- Replica为nat后面的服务器设置网络增强功能。
1.7.1
- 许多分片性能增强。
- 在嵌入式数组中的原语上更好地支持
$elemMatch
。 - 范围查询的查询优化器增强。
- 窗口服务增强。
- 复制集设置改进。
$pull
处理数组中的原语。
1.7.0
- 针对重插入负载的分层性能改进。
- 复制集的从句延迟支持。
local.system.replset.settings.getLastErrorDefaults
对于复制集。- 在外壳中自动完成。
- 用于地理搜索的球面距离。
- 1.6.1和1.6.2的所有修复。
发布公告论坛页面
资源
译者:韩鹏帅
参见