MongoDB 3.0的发布说明
2015年3月3日
MongoDB 3.0现已推出。主要功能包括支持WiredTiger存储引擎、可插拔存储引擎API、SCRAM-SHA-1
身份验证机制以及改进的explain
功能。
MongoDB Ops Manager现在也可用,其中包括自动化、备份和监控。请参阅Ops Manager文档和Ops Manager发布说明了解更多信息。
主要变化
可插拔存储引擎API
MongoDB 3.0引入了一个可插拔存储引擎API,允许第三方为MongoDB开发存储引擎。
WiredTiger
MongoDB 3.0引入了对WiredTiger存储引擎。由于支持WiredTiger,MongoDB现在支持两个存储引擎:
- MMAPv1,以前版本的MongoDB可用的存储引擎和MongoDB 3.0的默认存储引擎,以及
- WiredTiger,仅在MongoDB 3.0的64位版本中可用。
WiredTiger使用
WiredTiger是默认MMAPv1存储引擎的替代品。WiredTiger支持所有MongoDB功能,包括报告服务器、数据库和集合统计信息的操作。然而,切换到WiredTiger需要更改磁盘存储格式。有关将存储引擎更改为WiredTiger的说明,请参阅升级MongoDB到3.0文档中的相应部分。
MongoDB 3.0复制集和分片集群可以具有具有不同存储引擎的成员;但是,性能可能因工作量而异。有关详细信息,请参阅升级MongoDB到3.0文档中的相应部分。
WiredTiger存储引擎需要最新的官方MongoDBdrivers。有关更多信息,请参阅WiredTiger和驱动程序版本兼容性。
另见:
WiredTiger配置
要配置WiredTiger存储引擎的行为和属性,请参阅storage.wiredTiger
配置选项。您可以在命令行上设置WiredTiger选项。
另见:
WiredTiger并发和压缩
3.0 WiredTiger存储引擎提供文档级锁定和压缩。
默认情况下,WiredTiger使用snappy压缩库压缩收集数据。默认情况下,WiredTiger对所有索引使用前缀压缩。
另见:
博客文章《生产说明》中的WiredTiger部分MongoDB 3.0中的新压缩选项
MMAPv1改进
MMAPv1并发改进
在3.0版本中,MMAPv1存储引擎增加了对集合级锁定的支持。
MMAPv1配置更改
为了支持多个存储引擎,MMAPv1的一些配置设置已经更改。请参阅配置文件选项更改。
MMAPv1记录分配行为更改
MongoDB 3.0不再实现动态记录分配并弃用paddingFactor。在使用MMAPv1的实例中,集合的默认分配策略是2分配的幂,已对其进行了改进以更好地处理大型文档。在3.0中,该 usePowerOf2Sizes
标志将被忽略,因此2策略的幂将用于所有未noPadding
设置标志的集合。
对于仅由插入或就地更新(如增量计数器)组成的工作负载集合,您可以禁用2strategy的幂。要禁用集合2策略的幂,请使用collMod带有noPadding
标志或db.createCollection()方法与noPadding
选项。
警告:
如果工作负载包括可能导致文档增长的删除或任何更新,请勿设置
noPadding
。有关更多信息,请参阅没有填充分配策略。
当磁盘空间不足时,MongoDB 3.0不再在所有写入上出错,而仅在所需的磁盘分配失败时出错。因此,MongoDB现在允许就地更新,并在磁盘空间不足时进行删除。
另见:
副本集
副本集成员数量增加
在MongoDB 3.0中,复制集最多可以有50个成员。以下驱动程序支持较大的副本集:
- 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驱动程序,可以串列发现和监控副本集成员,因此不适合与大型副本集一起使用。
投票成员的最大数量保持为7。 |
---|
复本集降级行为更改
- 在下台之前,
replSetStepDown
将尝试终止长期运行的用户操作,这些操作将阻止主操作下调,例如索引构建、写入操作或地图减少作业。 - 为了帮助防止回滚,
replSetStepDown
将等待可选择的中学赶上初选状态,然后再下台。以前,初选会在初选后10秒内等待次要赶上(即复制滞后为10秒或更短的次要),然后再下台。 replSetStepDown
现在允许用户指定asecondaryCatchUpPeriodSecs
参数,以指定主参数在降级之前应该等待多长时间才能赶上。
其他副本集操作更改
- 初始同步可以更有效地为每个集合构建索引,并使用线程批量应用oplog条目。
- w的定义:“多数”写入关注更改为平均大多数投票节点。
- 对副本集配置的更严格限制。有关详细信息,请参阅Replica Set配置验证。
- 对于辅助成员的先前存在集合,MongoDB 3.0不再自动构建缺失的
_id
索引。
另见:
分片集群
MongoDB 3.0为分片集群提供了以下增强功能:
- 添加一个新的
sh.removeTagRange()
助手,以改善带有标签的分片集合的管理。新的sh.removeTagRange()
方法作为sh.addTagRange()
的补充。 - 提供更可预测的读取首选项行为。在执行读取操作时,
mongos
实例不再将连接固定到副本集的成员。相反,mongos
重新评估每个操作的读取首选项,以便在读取首选项发生变化时提供更可预测的读取首选项行为。 - 提供一个新的
writeConcern
设置来配置块迁移操作的写入concern。您可以为平衡器以及moveChunk
和cleanupOrphaned
命令配置writeConcern
设置。 - 提高平衡器操作的可见性。
sh.status()
包括有关平衡器状态的信息。有关详细信息,请参阅sh.status()
。
另见:
安全性改进
MongoDB 3.0包括以下安全增强功能:
- MongoDB 3.0添加了新的 SCRAM-SHA-1 质询-响应用户身份验证机制。
SCRAM-SHA-1
如果您当前的驱动程序版本不支持,则需要升级驱动程序SCRAM-SHA-1
。有关支持的驱动程序版本SCRAM-SHA-1
,请参阅Requirements. - 增加了使用Localhost异常访问MongoDB时的限制。有关详细信息,请参阅本地主机异常已更改。
另见:
改进
新的查询自检系统
MongoDB 3.0包括一个新的查询自检系统,该系统提供了改进的输出格式以及对查询计划和查询执行的更细粒度的自检。
有关详细信息,请参阅新的db.collection.explain()
方法和新的explain
命令以及更新的cursor.explain()
方法。
有关新输出格式的信息,请参阅解释结果。
增强的日志记录
为了提高日志消息用于诊断的可用性,MongoDB将一些日志消息归类为特定组件或操作下,并提供为这些组件设置详细度级别的能力。有关信息,请参阅日志消息。
MongoDB工具增强功能
mongosniff
和mongoperf
外,所有MongoDB工具现在都用Go编写,并作为一个单独的项目进行维护。
- 并行化的新选项
mongodump
和mongorestore
。您可以控制收集的数量mongorestore
将使用--numParallelCollections
选项一次恢复。 - 新选项
-excludeCollection
和--excludeCollectionsWithPrefix
用于mongodump
排除集合。 mongorestore
除了从文件中读取BSON数据外,现在还可以接受标准输入的BSON数据输入。mongostat
和mongotop
现在可以使用--json
选项以JSON格式返回输出。- 在
mongoimport
,mongorestore
,和mongofiles
。使用--writeConcern
选项。默认的writeConcern已更改为“w:majority”。 mongofiles
现在允许您使用--prefix
选项配置GridFS前缀,以便您可以使用自定义命名空间并将多个GridFS命名空间存储在单个数据库中。
另见:
索引
- 如果受索引构建影响的数据库或集合发生
dropDatabase
、drop
、dropIndexes
操作,后台索引构建将不再自动中断。ThedropDatabase、drop
和dropIndexes
命令仍然会失败,其中包含a background operation is currently running
的错误消息,如2.6。 - 如果您为
createIndexes
命令指定多个索引,- 命令只扫描一次集合,并且
- 如果要在前台构建至少一个索引,则操作将在前台构建所有指定的索引。
- 对于分片集合,如果索引包含碎片键,索引现在可以覆盖针对
mongos
执行的查询。
另见:
查询增强功能
MongoDB 3.0包括以下查询增强功能:
- 对于地理空间查询,增加了对
$geoIntersects
和$geoWithin
查询的“大”多边形的支持。“大”多边形是面积大于单个半球的单环GeoJSON多边形。有关详细信息,请参阅$geometry
、$geoIntersects
和$geoWithin
。 - 对于
aggregate()
,添加一个新的$dateToString
运算符,以便于将日期转换为格式化字符串。 - 添加
$eq
查询运算符来查询相等条件。
另见:
发行版和支持版本
大多数非企业MongoDB发行版现在都支持TLS/SSL。以前,只有MongoDB Enterprise发行版包含TLS/SSL支持;对于非企业发行版,您必须使用--ssl
标志(即scons --ssl
)在本地构建MongoDB。
32位MongoDB版本可用于测试,但不用于生产。32位MongoDB版本不包括WiredTiger存储引擎。
MongoDB为Solaris构建的不支持WiredTiger存储引擎。
MongoDB版本适用于Windows Server 2003和Windows Vista(作为“64位遗产”),但官方支持的最低版本是Windows Server 2008。
另见:
软件包存储库
适用于3.0及更高版本的非企业MongoDB Linux软件包在一个新存储库中。按照适当的Linux安装说明从新位置安装3.0软件包。
MongoDB企业功能
审计
MongoDB Enterprise中的审计可以过滤审计消息中的任何字段,包括param文档中返回的字段。此增强功能以及auditAuthorizationSuccess
参数,使审计能够过滤CRUD操作。然而,使auditAuthorizationSuccess
审计所有授权成功比仅审计授权失败更能降低性能。
其他信息
影响兼容性的变化
3.0中的一些更改可能会影响兼容性,并可能需要用户操作。有关兼容性更改的详细列表,请参阅MongoDB 3.0中的兼容性更改。
升级流程
有关完整的升级说明,请参阅将MongoDB升级到3.0。
下载
要下载MongoDB 3.0,请转到下载页面。
另见:
译者:韩鹏帅 参见