令人兴奋的是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作为参数来构建特殊命令,这将达到我的目标:如果一步出错,请回滚所有内容!
答案 0 :(得分:0)
如果B,C,D之一失败,则需要回滚
没有多文档事务,还有其他方法可以做到这一点。您可以拥有一个由流程A,B,C和D更新的文档。例如,D将文档标记为completed
。
MongoDB multi-document transactions设计用于需要原子性来更新多个文档或读取多个文档之间保持一致性的情况。因此,多个数据库操作和/或多个文档作为单个事务。根据您的描述,您的用例更多地是关于可以进行与不进行的多个阶段,可以使用适当的data modeling处理。
此外,请注意,交易的生命周期也有限制。默认值为60秒。另请参见transactionLifetimeLimitSeconds。