1. MongoDB 多文档事务(4.0+)的实现,基于 WiredTiger 的 MVCC?
请解释 MongoDB 4.0+ 多文档事务的实现原理,以及它是如何基于 WiredTiger 的 MVCC 工作的?
- 多文档事务需在副本集/分片集群上运行,读关注默认 local、可选 majority
- WiredTiger 提供 MVCC 快照隔离,事务读写自洽快照
- 事务提交依赖多数派写入与 prepare 阶段
MongoDB 4.0 起支持副本集上的多文档事务,4.2 起支持分片集群上的跨分片事务。事务底层基于 WiredTiger 存储引擎的 MVCC(多版本并发控制):当事务开始时,WiredTiger 为事务创建一个快照,事务内所有读操作都基于该快照,保证可重复读(repeatable read)级别,事务之间互不干扰;写入通过版本链实现,旧版本保留供其他读事务使用。事务提交时,数据先写入 WiredTiger 的 prepare 状态,再通过副本集多数派确认(replicate to majority)后真正提交,保证持久化与一致性。若事务超时或冲突,MVCC 会检测写冲突并回滚。多文档事务的原子性以"事务"为单位,可跨多个文档、多个集合(4.2 起可跨分片)。
多文档事务的核心是 WiredTiger 的 MVCC 快照隔离。快照隔离让事务内读取稳定一致,写冲突检测让并发事务不会互相覆盖。提交依赖多数派写入,把原子性与持久性绑定到副本集多数派。理解 MVCC 快照 + 多数派提交两个环节,是理解 MongoDB 事务实现的关键。事务的原子性范围从单文档扩展到多文档,代价是性能与锁开销。