【问题标题】:Why is replica set mandatory for transactions in MongoDB?为什么 MongoDB 中的事务必须使用副本集?
【发布时间】:2020-09-23 05:45:18
【问题描述】:

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

【问题讨论】:

    标签: mongodb transactions distributed-transactions


    【解决方案1】:

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

    在单个节点而不是分布式系统上做事务不是更容易吗?

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

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

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

    【讨论】:

    • 您也没有理由不能在独立节点上启动副本集,因此您可以在单成员副本集上获得事务支持。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 2018-09-07
    • 2015-03-09
    相关资源
    最近更新 更多