你的位置:首页 > 数据库

[数据库][译]MongoDB 3.0发布说明


原文来自:http://docs.mongodb.org/manual/release-notes/3.0/

2015年3月3日

MongoDB 3.0现已可供使用。关键新特性包括支持WiredTiger存储引擎,插件化存储引擎API,SCRAM-SHA-1身份验证机制,以及改进的explain功能。

MongoDB运维管理器(MongoDB Ops Manager),包括自动化,备份,监控现在可供使用。查看运维管理器和运维管理器发布说明以获取更多内容。

小版本发布

3.0.1 - 2015年3月17日

  • 修复了WiredTiger中插入和检查点竞争条件导致的记录丢失问题:SERVER-17506
  • 解决了WiredTiger定容集合实现不当导致的服务器崩溃问题:SERVER-17345
  • 解决初始化同步时导致重复的_id问题:SERVER-17487
  • 修复了MMAPv1中日志锁和oplog锁死锁问题:SERVER-17416
  • 所有3.0.1版本中的问题均已关闭

主要修改

插件化存储引擎API

MongoDB 3.0引入了插件化存储引擎API,允许第三方为MongoDB实现存储引擎。

WiredTiger

MongoDB 3.0引入了WiredTiger存储引擎支持。在支持WiredTiger的前提下,MongoDB现在支持两个存储引擎:

  • MMAPv1,MongoDB之前版本中支持的存储引擎,它是MongoDB 3.0的默认存储引擎,以及:
  • WiredTiger,只在64位版本的MongoDB 3.0中支持。

WiredTiger使用

WiredTiger是MMAPv1存储引擎的一个可选替代项。WiredTiger支持所有MongoDB特性,包括所有服务器,数据库和集合统计方面的功能。但是切换到WiredTiger要求进行一次磁盘存储格式转换。要了解将存储引擎切换到WiredTiger的更多信息,请查看升级到MongoDB 3.0的对应章节。

MongoDB3.0 复制集和分片集群的成员可以使用不同的存储引擎。但是,随着负载变化它们的性能也会有不同的变化。欲知详情,请查看升级到MongoDB 3.0的对应章节。

WiredTiger存储引擎要求最新的官方MongoDB驱动。欲知更多信息,请查看WiredTiger与驱动版本兼容性。

扩展阅读:

touch命令支持,存储文档中的WiredTiger存储引擎章节

WiredTiger配置

要配置WiredTiger存储引擎的属性和行为,请查看storage.wiredTiger配置选项。你可以在命令行设置WiredTiger选项。

扩展阅读:

存储文档中的WiredTiger存储引擎章节

WiredTiger并发和压缩

3.0 WiredTiger存储引擎提供了文档级别的锁和压缩。

默认情况下,WiredTiger使用snappy压缩库来压缩集合数据。WiredTiger默认对所有索引使用前缀压缩。

扩展阅读:

生产环境备注中的WiredTiger章节

MMAPv1改进

MMAPv1并发改进

在3.0版本中,MMAPv1存储引擎加入了集合级别的锁。

MMAPv1配置变更

为了支持多存储引擎,一些MMAPv1的配置选项有些变化。请查看配置文件选项变化章节。

MMAPv1记录分配行为变更

MongoDB 3.0不再实现动态记录分配,空白因子也已标注为过期。在使用MMAPv1的实例中,集合默认的分配策略是2的次方分配,这已被证明在处理大尺寸文档时表现更优异。在3.0中,usePowerOf2Sizes选项被忽略,所以2的次方分配策略被应用在所有没有noPadding设置的集合上。

对于只有插入和更新(例如增长计数)工作负载的集合而言,可以选择禁用2的次方策略。要为某个集合禁用2的次方策略,使用noPadding标记的collMod命令,或带noPadding的db.createCollection()方法。

警告:

如果工作负载包含删除或造成文档大小变更的更新,不要设置noPadding选项。欲知更多信息,请阅读无空白分配策略。

当磁盘空间不足时,MongoDB 3.0不再在所有写操作上产生错误,而只针对无法分配要求的空间时产生错误。所以,当磁盘空间低时MongoDB现在仍然允许不变更大小的更新和删除操作。

扩展阅读:

动态记录分配

 复制集

增加了复制集的最大成员数量

MongoDB 3.0中复制集可以有最多50个成员[1]。以下驱动支持大复制集:

  • C#(.NET)驱动1.10
  • Java驱动2.13
  • Python驱动(PyMongo)3.0+
  • Ruby驱动2.0+
  • Node.JS驱动2.0+

因为C,C++,Perl,PHP以及早先版本的Ruby,Python和Node.JS驱动是顺序地发现和监控复制集成员,这些驱动不适宜用在大复制集中。

PyMongo 3.0目前正在开发中。

[1]最大投票成员数仍然是7个

复制集降级行为改变

复制集的主成员降级过程有了以下改变:

  • 降级前,replSetStepDown将会尝试结束阻塞主成员降级的长时间运行的用户任务,例如建立索引,写操作,或map/reduce工作。
  • 为了防止回滚,replSetStepDown将会在降级等待有资格的后备成员追上当前主成员的同步状态。之前主成员会在降级前在10秒内等待后备成员追上同步状态(例如后备成员同步延迟在10秒内)。
  • replSetStepDown现在允许用户指定secondaryCatchUpPeriodSecs参数来设置主成员在降级前应该等待后备成员多长时间。

其他复制集可选变更

  • 初始同步现在使用多线程更有效率地为集合构建索引和应用oplog记录。
  • 定义w:"majority"写关注现在的意义变为指大多数有投票权的结点。
  • 复制集配置现在有更强的约束。欲知详情,请阅读复制集配置验证章节。
  • 对后备成员上已经存在的集合,MongoDB 3.0不再自动构建丢失的_id索引。

扩展阅读:

MongoDB 3.0 兼容性变更中的复制集变更

分片集群

MongoDB 3.0为分片集群提供以下增强:

  • 增加了一个新的sh.removeTagRange()帮助方法来改带标签的进分片集合的管理。新的sh.removeTagRange()方法是sh.addTagRange()方法的补充。
  • 使读首选项的行为更可预料。当进行读操作时,mongos实例不再把连接固定在复制集的成员上。相反,mongos为每个操作重新评估读首选项,从而当读首选项变化时提供一个更可预料的读首选项行为(有点难懂,请先了解读首选项——译注)。
  • 提供了一个新的writeConcern设置来配置数据片断迁移操作的写关注。你可以为平衡器以及moveChunk和cleanupOrphaned命令配置独立的写关注。
  • 改进平衡器操作的透明性。sh.status()包含了平衡器的状态信息。查看sh.status()以得到了解更多细节。

扩展阅读:

MongoDB 3.0兼容性变更中的分片集群设定

安全性改进

MongoDB 3.0包含了以下安全性增强:

  • 添加新的SCRAM-SHA-1用户认证机制。
  • 当使用本地例外访问MongoDB时增加了更多的约束。欲知详情,请查看本地例外变更。

扩展阅读:

安全变更

改进

新的查询自测系统

MongoDB 3.0包含了一个新的查询自测系统,可以提供更好的输出格式化和把自测信息更好地应用到查询计划和查询执行中。

欲知详情,请查看新的db.collection.explain()方法和新的explain命令,以及更新过的cursor.explain()方法。

要了解更多关于新输出格式的信息,请查看explain结果。

增强的日志

为了增加日志消息在诊断过程中的可用性,MongoDB分类了一些特定组件或操作的日志消息,提供了为这些组件设置日志明细等级的能力。欲知详情,请阅读日志消息。

MongoDB工具改进

所有MongoDB工具现在都由Go语言编写,作为独立项目维护。

  • mongodump和mongorestore的并行新选项。你可以用--numParallelCollections选项为mongorestore指定并行恢复的集合数。
  • 新选项-excludeCollection和--excludeCollectionsWithPrefix可以为mongodump指定排除的集合。
  • mongorestore现在除了从文件中读取BSON数据外,还支持从标准输入流中接受BSON数据。
  • mongostat和mongotop现在可以使用--json选项指定输出JSON格式。
  • 为mongoimport,mongorestore,mongofiles添加了可配置的写关注,请使用--writeConcern选项。
  • mongofiles现在允许使用--prefix选项配置GridFS前缀,因此现在可以使用自定义的命名空间在同一个数据库中存储多个GridFS命名空间。

扩展阅读:

MongoDB工具改进

索引

  • 后台构建索引现在不会因为dropDatabase,drop,dropIndexes操作影响到相关数据库或集合而中断。dropDatabase,drop和dropIndexes命令现在和2.6版本中一样,会返回“后台操作正在进行”而失败。
  • 如果你为createIndexes命令指定了多个索引,
    • 命令只会扫描集合一次,并且
    • 如果至少有一个集合需要在前台构建,该操作会在前台构建所有索引。
    • 对于分版集合,现在如果索引包含了分片键,则可以覆盖针对mongos进行的查询。

扩展阅读:

MongoDB 3.0兼容性改进中的索引章节

查询加强

MongoDB 3.0包含了以下查询增强:

  • 地球位置查询为$geoIntersects和$geoWithin查询添加了凸多边形支持。

发行版

多数非企业级MongoDB发行版现在包含了SSL支持。之前只有MongoDB企业版发行版自带SSL支持;而对于非企业版发行版,你只能使用--ssl标识在本地编译MongoDB(例如scons --ssl)。

MongoDB企业版特性

审计

MongoDB企业版中的审计功能可以按审计消息中的任意字段过滤,包括在param文档中的的字段。这个加强,加上auditAuthorizationSuccess参数,使审计可能过滤CRUD操作。然而,相对于只对认证失败时开启auditAuthorizationSuccess,对所有授权成功的审计开启会降低性能。

附加信息

影响兼容性的改进

在3.0中的一些修改可能影响兼容性,可能需要用户关注。需要阅读影响兼容性的所有修改,请参考MongoDB 3.0兼容性改进。

升级过程

查看升级到MongoDB 3.0以获取完整的升级说明。

下载

要下载MongoDB 3.0请到下载页面。

额外资源

  • 所有第三方许可证说明
  • 所有3.0中解决的JIRA问题