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

Why is replica set mandatory for transactions in MongoDB?

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

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

Isn't it is easier to do transaction stuff on a single node rather than a distributed system?

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

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

出于开发目的,您可以 运行 一个 single-node 副本集,它为您提供会话和事务所需的操作日志,但仍然只有一个 mongod 进程。