【问题标题】:Distributed Transaction in MongoDBMongoDB中的分布式事务
【发布时间】:2018-07-31 07:38:40
【问题描述】:

令人兴奋的是 MongoDB 4.0 支持多文档 ACID 事务!但我想知道新功能会解决我的问题吗?

背景:我有几个微服务,它们共享同一个mongdb,所以我们必须面对它们之间的事务问题。

示例:A 启动事务然后通过 http 调用 B 服务和 C 服务,B 将调用 D。如果 B、C、D 之一失败,我们需要回滚。在这个分布式系统中很难达到这个目标,所以我想知道 mongodb 4.0 是否会有简单的方法来解决这个问题。 A / \ B C \ D 我从这里阅读了规范:https://github.com/mongodb/specifications/blob/master/source/transactions/transactions.rst,我发现 mongo 使用 lsid、txnNumber 来识别交易。那么,这是否意味着如果我开发一个特殊的 Mongo-Driver,它接受 lsid、txnNumber 作为参数来构建特殊命令,这将达到我的目标:如果一步引发错误,则回滚所有内容!

【问题讨论】:

    标签: mongodb distributed-transactions


    【解决方案1】:

    如果 B、C、D 之一失败,我们需要回滚

    有其他方法可以在没有多文档事务的情况下执行此操作。您可以拥有由进程 A、B、C 和 D 更新的文档。例如,D 将文档标记为completed

    MongoDB multi-document transactions 专为需要原子性以更新多个文档或读取多个文档之间的一致性的情况而设计。因此,多个数据库操作和/或多个文档作为单个事务。根据您的描述,您的用例更多地是关于可以通过或不通过的多个阶段,这可以使用适当的data modeling 来处理。

    此外,请注意,交易的生命周期也有限制。默认值为 60 秒。另见transactionLifetimeLimitSeconds

    【讨论】:

      猜你喜欢
      • 2023-03-29
      • 2019-01-02
      • 2012-08-31
      • 1970-01-01
      • 2013-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-05
      相关资源
      最近更新 更多