MongoDB 4.2 新特性概览
本文介绍 MongoDB 4.2 版本的新特性,更多信息可以查看 官方文档。
内核优化:事务与存储引擎演进
MongoDB 4.2 在内核层面完成了从“单副本事务”向分布式事务的里程碑式跨越,并对存储引擎的一致性与索引机制进行了深度重构。
分布式事务的全面支持
内核正式统一了事务语义,将原子性保障从副本集扩展至分片集群,标志着 MongoDB 具备了完整的分布式事务处理能力。新版本移除了事务总大小 16MB 的硬性限制,内核会自动将大事务拆分为多个 Oplog Entry 进行处理。为了支撑快照隔离与 MVCC 特性,分布式事务强制要求 Primary 节点必须使用 WiredTiger 存储引擎。
复制流控与引擎重构
为了解决主从复制延迟过大的痛点,内核引入了自动流控机制(Flow Control)。当检测到多数派提交延迟持续扩大时,主节点会自动限制写入速率,以缓解 Secondary 的回放压力,维持集群的整体可用性。在存储引擎方面,MMAPv1 被彻底移除,WiredTiger 成为唯一默认引擎。索引构建流程也得到了彻底优化,仅在构建开始与结束的短暂瞬间持有独占锁,构建过程中不再阻塞集合的读写操作。此外,索引键值长度与名称长度的限制也被解除。
新特性:架构灵活性与计算能力
内核增强了分片集群的路由灵活性,并将聚合框架的能力提升为通用的数据处理引擎,大幅扩展了数据库的计算边界。
分片架构与索引增强
分片集群支持了可变分片键(Mutable Shard Keys),内核允许修改非 _id 字段的分片键值,并自动处理数据在分片间的迁移,彻底解决了因分片键设计不当导致的数据倾斜问题。同时,Balancer 的启停状态实现了与 AutoSplit 逻辑的自动联动。针对动态 Schema 场景,内核引入了通配符索引(Wildcard Index),支持对未知或动态字段进行自动索引覆盖,简化了复杂数据模型的索引维护。
聚合与流处理能力
聚合框架演进为强大的数据处理引擎。update 和 findAndModify 命令现支持直接使用聚合管道,允许在内核层直接利用现有字段值进行计算更新,减少了应用层的网络交互。新增的 $merge 阶段支持将聚合结果按需合并写入到任意集合(包括分片集合),为构建实时物化视图提供了内核级支持。Change Stream 的能力也得到增强,支持在发生 invalidate 事件后继续从断点恢复,且开启不再强制依赖 majority 读关注配置。
废除与限制项
为了降低内核复杂度并明确系统边界,MongoDB 4.2 清理了大量历史遗留接口,并明确了部分功能的使用限制。
接口与命令清理
内核彻底移除了 eval、group、copydb 以及 repairDatabase 等遗留命令,同时 geoNear 命令被废弃,统一强制使用聚合管道中的 $geoNear 阶段。对于 save() 方法和 maxScan 参数,内核也不再推荐使用,引导用户转向标准的 CRUD 与索引扫描接口。
备份一致性限制
由于分布式事务的引入,逻辑备份工具 mongodump 无法保证跨分片事务的原子性一致性。因此,对于使用分布式事务的分片集群,逻辑备份方案不再适用,需依赖底层文件系统快照或专用的企业级备份工具来保障数据一致性。
