transactions - 使用 MongoDB 进行两阶段提交

标签 transactions mongodb

这就是我的想法。当使用像 MongoDB 这样的每个操作都是原子的并且不支持除此之外的事务时,您是否看到此解决方法有任何问题来模拟 2 阶段提交?

transaction_scope:
     read message from servicebus - UpdateCustomerAddress

     get customer aggregate from docdb, replay events where commited =1

     call customer.updateAddress
         validates
         creates customer address updated event
         apply event
         event store as uncommitted events

     do optimistic concurrency update against docdb pushing uncommitted events (single op                  to ensure consistency)

     publish event to service bus 

     update docdb set events just published to commited = 1 (again one 1 op - at least in    mongodb)

transaction_complete

NServiceBus 或任何从命令处理程序基础结构管理外部事务范围的东西。据我所知,我们应该具有与 2pc 几乎相同的语义——但我觉得我遗漏了一些东西。

最佳答案

A two-phase commit wiki page最近已添加到 mongodb 网站。它描述了 2-PC 算法并讨论了一些失败场景。

关于transactions - 使用 MongoDB 进行两阶段提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2716582/

相关文章:

mongodb - E 查询 [thread1] 语法错误 : identifier starts immediately after numeric literal @(shell) in 'mongodb' ?

python - 如何在 PyMongo 中索引已知字段的未知字段?

java - MongoDB:注册编解码器 (Java)

javascript - MongoDB:forEach 与 fetch + each

wcf - 如何防止事务范围抛出我已经处理过的异常?

C# MongoDB 驱动只返回 100 个结果

C - 这个简单的 transaction() 函数如何才能完全避免死锁?

.net - 是否可以在 TransactionScope 中执行 SQL 命令并发送 MSMQ 消息?

python - GAE/P : Transaction safety with API calls

spring - DataSourceTransactionManager 和 ResourcelessTransactionManager 有什么区别?