【问题标题】:MongoDB and MySQL transaction in a distributed transaction分布式事务中的MongoDB和MySQL事务
【发布时间】:2025-11-24 20:35:01
【问题描述】:

我有一个用例,我们需要在分布式事务中同时使用 MySQL 和 MongoDB,即如果 MySQL 或 MongoDB 中的任何一个失败,MySQL 和 MongoDB 都必须失败,即 MongDB 和 MySQL 完成的所有操作都应该恢复(如果有的话)数据库失败。

我了解两阶段提交协议或 XA 事务,并已使用 MySQL 和 zope 事务成功实现了它。但是,现在我希望它同时使用 MongoDB 和 MySQL 来实现。

我也读过this question on *,但它似乎已经过时了。

在 MongoDB 4.2 中,MongoDB 支持不同分片之间的分布式事务,但有没有办法可以使用它在 MySQL 和 MongoDb 中实现分布式事务。

我不想要最终的一致性。我正在寻找真正的分布式事务,即除非并且直到我提交更改,否则用户应该无法在 MySQL 和 MongoDB 中看到更改的数据

首选语言是 Python,但如果有办法无法在 Python 中实现但可以在其他语言中使用,那也没关系。

任何形式的帮助都会很棒。谢谢!

【问题讨论】:

  • 您好,您找到解决问题的方法了吗?

标签: mysql mongodb zope distributed-transactions


【解决方案1】:

不可能。您在 MongoDB 4.2 中引用的分布式事务功能是为了在 MongoDB 中跨 shards 的事务完整性,而不是跨 MongoDB 和其他数据库、XA 或其他数据库。

【讨论】:

  • 嗨 Buzz Moschetti,感谢您的回答。我知道 MongoDB 4.2 事务用于着色。我只是想知道是否有任何其他机制可以在MongoDB和MySQL中实现分布式事务的结合。就像在 MySQL 中一样,我们可以使用 Zope.sqlalchemy 来实现它。
  • 虽然这不是您想听到的,但在您向我们发送推文后,我向 Percona 的一些高级技术人员征求了反馈意见。他们说过,在这种情况下,他们唯一想要建议的是你不应该这样做。在他们看来,你会为自己埋下麻烦。您可能需要以不同的方式思考挑战。 (披露:我为 Percona 工作)
  • 您好,ercona-lorraine,感谢您的评论。我会检查是否有其他方法可以遵循。再次感谢!
  • 嗨 Rupesh,这个用例有什么运气吗?我确实有一个类似的用例,我尝试在 Oracle 和 MongoDB 之间实现分布式事务。这是我的用例*.com/questions/69156072/…如果您看到任何突破,请告知。谢谢。