为什么 MongoDB 中的事务必须使用副本集?

Raj*_*oel 5 transactions distributed-transactions mongodb

根据 MongoDB 文档,事务仅适用于副本集,不适用于单个节点。为什么有这样的要求呢?在单个节点上进行交易不是比在分布式系统上更容易吗?

D. *_* SM 8

事务的实现使用会话,而会话又需要 oplog。Oplog由副本集提供,用于节点之间的数据同步。

在单个节点上进行交易不是比在分布式系统上更容易吗?

这是事实,但在实践中,MongoDB 将自己定位为高可用性数据库,因此使用独立服务器的生产部署相当少(例如,据我所知,这在 Atlas 中甚至不是一个选项)。因此,独立服务器上缺乏事务支持通常不会影响任何事情。

相反,在独立服务器上实现事务无法满足绝大多数使用副本集和分片集群的 MongoDB 部署/客户的需求。

出于开发目的,您可以运行一个单节点副本集,它为您提供会话和事务所需的 oplog,但仍然只有一个 mongod 进程。