MongoDB 2.0的发布说明
升级
虽然主要版本号发生了变化,但MongoDB 2.0是一个标准的增量生产版本,可以作为MongoDB 1.8的替代版本。
准备
在升级之前,请仔细阅读所有发布说明,并确保没有变化会影响您的部署。
如果您在2.0中创建新索引,那么可以降级到1.8,但您必须重新索引新集合。
mongoimport
和mongoexport
现在正确遵守CSV规范来处理CSV输入/输出。这可能会破坏依赖之前行为的现有导入/导出工作流程。有关更多信息,请参阅服务器-1097。
默认情况下,在2.0中为64位版本启用日志。如果您仍然喜欢在没有日记的情况下跑步,请使用--nojournal
运行时选项开始mongod
。否则,MongoDB会在启动期间创建日志文件。第一次开始写日记时,当mongod
创建新文件时,你会看到延迟。此外,您可能会看到写入吞吐量下降。
2.0个mongod
实例可与1.8个mongod
实例互操作;但是,为了获得最佳效果,请使用以下过程升级您的部署:
升级独立产品mongod
- 从下载v2.0.x二进制文件MongoDB下载页面。
- 关闭您的
mongod
实例。将现有的二进制文件替换为2.0.xmongod
二进制文件,然后重新启动MongoDB。
升级复制集
通过关闭
mongod
并将1.8二进制文件替换为2.0.x二进制文件,一次升级集合的辅助成员MongoDB下载页面。为了避免丢失故障转移的最后几个更新,您可以暂时停止应用程序(故障转移应该少于10秒),或者您可以在应用程序代码中设置写入问题,以确认每次更新到达多台服务器。
使用
rs.stepDown()
下调低主程序,以允许正常的故障转移过程。rs.stepDown()
和replSetStepDown
提供了比简单地直接关闭主故障转移程序更短、更一致的故障转移程序。当主制文件下台时,关闭其实例并升级,将
mongod
二进制文件替换为2.0.x二进制文件。
升级分片集群
变化
Compact 命令
compact
的命令现在可用于压缩单个集合及其索引。以前,压缩的唯一方法是修复整个数据库。
并发性改进
当进入磁盘时,服务器在写入不太可能内存中的数据时会产生写入锁。此功能的初始实现现在存在:
看服务器-2563了解更多信息。
2.0中的具体操作收益率是:
- 更新者
_id
- 移除
- 长光标迭代
默认堆栈大小
MongoDB 2.0减少了默认堆栈大小。当有许多(例如1000多个)客户端连接时,这种更改可以减少总内存使用量,因为每个连接都有一个线程。虽然如果未使用,线程堆栈的部分内容可能会被交换出来,但一些操作系统这样做的速度足够慢,以至于这可能是一个问题。默认堆栈大小小于系统设置或1MB。
索引性能增强
v2.0 包含对首页。指数通常小25%,快25%(取决于用例)。从以前的版本升级时,只有当您创建新索引或重新索引旧索引时,才能实现新索引类型的好处。
日期现已签署,最大索引键大小从819字节略微增加到1024字节。
默认情况下,所有创建新索引的操作都将导致2.0索引。例如:
- 对旧版本索引的结果进行重新索引会导致2.0索引。然而,在2.0之前的版本中,对辅助索引进行重新索引不起作用。不要对辅助内容进行重新索引。有关变通办法,请参阅服务器-3866。
repairDatabase
命令将索引转换为2.0索引。
要将给定集合的所有索引转换为2.0型,调用compact
的命令。
创建新索引后,降级到1.8.x将需要重新索引使用2.0创建的任何索引。看/教程/roll-back-to-v1.8索引。
分层身份验证
应用程序现在可以对分片集群使用身份验证
复制品套装
分片集群中的隐藏节点
在2.0中,mongos
实例现在可以确定副本集的成员何时变得“隐藏”,而无需重新启动。在1.8中,mongos
,如果您将成员重新配置为隐藏成员,则必须重新启动mongos
,以防止查询到达隐藏成员。
优先事项
每个副本集成员现在可以有一个优先值,包括从0到1000的浮点。优先级允许您控制您更喜欢将集合中的哪个成员作为主成员,具有最高的优先级的成员将看到集合的大多数成员将被选为主成员
例如,假设您有一个包含A、B和C三个成员的副本集,并假设他们的优先级设置如下:
- A优先级是2
- B优先级是3
- C优先级是1
在正常运行期间,该集将始终选择B作为主。如果B不可用,该集将选择A作为主。
有关更多信息,请参阅priority
文档。
数据中心意识
您现在可以“标记”复制集成员来指示他们的位置。您可以使用这些标签来设计跨数据中心、机架、特定服务器或任何其他架构选择的自定义写入规则。
例如,管理员可以定义“非常重要的写入”或customerData
或“审计跟踪”等规则,以复制到某些服务器、机房、数据中心等。然后在应用程序代码中,开发人员会说:
db.foo.insert(doc, {w : "very important write"})
如果它符合DBA为“非常重要的写作”定义的条件,它就会成功。
有关更多信息,请参阅数据中心意识。
驱动程序还可以支持标签感知读取。您指定 slaveOk
,而不是指定 slaveOk
,并带有标签,指示要从哪个数据中心读取。有关详细信息,请参阅驱动器文件。
w
:majority
您还可以将w
设置为majority
,以确保写入传播到大多数节点,有效地提交它。当您从集合中添加或删除节点时,“多数”的值将自动调整。
有关更多信息,请参阅写入关注。
与少数派重新配置
如果一个集合中的大多数服务器已经永久丢失,您现在可以强制重新配置该集,以使其重新上线。
有关更多信息,请参阅使用不可用成员重新配置副本集。
下台前被抓到的次要检查
为了最大限制度地减少没有主选项的时间,如果主方法在最新优化后10秒内没有看到次要,rs.stepDown()
方法现在将失败。无论如何,您都可以强制主服务器下台,但默认情况下,它会返回错误消息。
另请参阅强迫成员成为初级会员。
延长主机的关机时间,以尽量减少中断
当您调用shutdown命令时,主命令将拒绝关闭,除非有一个次要选项在主命令的10秒内。如果没有这样的辅助设备,主调将下台,等待长达一分钟,等待次要完全赶上,然后再关闭。
请注意,要获得此行为,您必须显示发出shutdown命令;向进程发送信号不会触发此行为。
您也可以强制关闭主数据苦,即使没有最新的辅助数据库也行
维护模式
当repairDatabase
或compact
在辅助运行时,辅助数据库将自动进入“恢复”模式,直到操作完成。这可以防止客户在繁忙时尝试从中阅读。
地理空间特征
多地点文稿
现在,索引支持具有多个位置对象的文档,嵌入内联或嵌入式文档。还支持附加命令选项,允许结果不仅返回距离,还可以返回用于生成距离的位置。
有关更多信息,请参阅2d
索引的多位置文档。
Polygon搜索
现在也支持多边形内的多边形$within
查询。有关详细信息,请参阅$within
运营商文档。
日志增强功能
- 现在默认情况下,64位平台启用日志。使用
--nojournal
命令行选项禁用它。 - 现在,日志被压缩,以便更快地提交到磁盘。
- 存在一个新的
--journalCommitInterval
运行时选项,用于指定您自己的组提交间隔。默认设置不会改变。 - 一个新的
{ getLastError: { j: true } }
选项可用于等待组提交。当客户端等待{j: true}
时,组提交将更快地发生。如果日志记录被禁用,{j: true}
是禁止操作。
新ContinueOnError
选项
continueOnError
在驱动程序中设置大容量插入的选项 ,以便大容量插入将继续插入所有剩余的文档,即使插入失败,例如重复的密钥异常或网络中断。该getLastError
命令将报告是否有任何插入失败,而不仅仅是最后一次插入失败。如果发生多个错误,客户端将仅接收最新getLastError
结果。
注意
对于分片群集上的批量插入,
getLastError
仅此命令不足以验证成功。应用程序必须在应用程序逻辑中验证批量插入是否成功。
Map Reduce
输出到分片集合
使用新的sharded
标志,可以将地图/还原的结果发送到分片集合。结合reduce
ormerge标志,可以继续将数据添加到地图/减少作业的非常大集合中。
有关更多信息,请参阅Map-Reduce和mapReduce
参考。
性能改进
“地图”/“降低”性能将受益于以下各项:
- 更大的内存缓冲区大小,减少作业期间所需的磁盘I/O量
- 更大的javascript堆大小,允许更大的对象和更少的GC
- 支持使用
jsMode
标志执行纯JavaScript。请参阅mapReduce
参考。
新的查询功能
其他正则表达式选项:s
允许点(.
)匹配所有字符,包括新行。这是目前支持的i
、m
和x
的补充。请参阅$regex
。
$and
一个特殊的布尔$and
查询运算符现已可用。
命令输出更改
validate
命令和system.profile
集合中的文档的输出都已增强,可以将信息作为BSON对象返回,每个值都有键,而不是作为自由形式字符串。
Shell 特色
自定义提示
您可以为mongo shell 定义一个自定义提示,您可以通过将prompt变量设置为字符串的定义javaScript函数来随时更改提示
默认shell Init脚本
启动时,shell将检查用户主目录中的.mongorc.js
文件。shell将在连接到数据库和显示提示之前执行此文件。
如果您希望shell不自动运行.mongorc.js
文件,请使用--norc
启动shell。
有关更多信息,请参阅mongo
参考。
大多数命令都需要身份验证
在2.0中,当使用身份验证(例如authorization
)运行时,除以下命令外,所有数据库命令都需要身份验证。
isMaster
authenticate
getnonce
buildInfo
ping
isdbgrid
资源
- MongoDB下载
- 所有JIRA问题都在2.0中得到解决
- 所有向后不兼容的更改 AND "Backwards Compatibility" in ("Major Change"%2C "Minor Change")
译者:韩鹏帅 参见