Двухфазный коммит с MongoDB - PullRequest
2 голосов
/ 27 апреля 2010

Вот о чем я думаю. Видите ли вы какие-либо проблемы с этим обходным путем для эмуляции двухфазного принятия при использовании чего-то вроде MongoDB, где каждая операция является атомарной и нет поддержки транзакций вне этого?

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 - но я чувствую, что что-то упускаю.

1 Ответ

2 голосов
/ 05 апреля 2011

A вики-страница двухфазного принятия недавно была добавлена ​​на сайт mongodb. Он описывает алгоритм 2 ПК и обсуждает несколько сценариев отказов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...