Я понимаю, что это нечеткий способ, как работают обычные транзакции ACID. Вы выполняете некоторую работу над базой данных таким образом, что работа не подтверждается, пока не будет установлен какой-либо флаг фиксации. Часть фиксации основана на некоторых основополагающих предположениях (например, запись одного блока блоков является атомарной). В случае катастрофической ошибки вы можете просто удалить незафиксированные данные на этапе восстановления.
Как работают распределенные транзакции? В некоторых документах MS я прочитал, что вы можете каким-то образом выполнить транзакцию между базами данных и файловыми системами (между прочим).
Эта технология может быть (и, вероятно, используется) для установщиков, где вы хотите, чтобы программа была полностью установлена или полностью отсутствовала. Вы просто начинаете транзакцию в начале установки. Затем вы можете подключиться к реестру и файловой системе, внося изменения, которые определяют установку. Когда задание выполняется, просто зафиксируйте или откат, если по какой-либо причине установка завершилась неудачей. Реестр и файловая система автоматически очищаются для вас этим магическим распределенным координатором транзакций.
Как возможно, что две несопоставимые системы могут быть реализованы таким образом? Мне кажется, что всегда можно оставить систему в несогласованном состоянии, когда файловая система внесла свои изменения, а в реестре нет. Я думаю, что в MSDTC даже возможно выполнить транзакцию по сети.
Я прочитал http://blogs.msdn.com/florinlazar/archive/2004/03/04/84199.aspx, но он чувствует себя только как начало объяснения, и что шаг 4 должен быть значительно расширен.
Изменить: Из того, что я собираю на http://en.wikipedia.org/wiki/Distributed_transaction, это может быть выполнено с помощью двухфазного фиксации (http://en.wikipedia.org/wiki/Two-phase_commit). Прочитав это, я до сих пор не понимаю метод 100%, кажется, что есть много места для ошибок между шагами.