Как ACID является протоколом двухфазной фиксации?

Я столкнулся с ситуацией, когда я начал сомневаться, действительно ли протокол двухфазной фиксации гарантирует свойства ACID, особенно его часть «A».

Давайте посмотрим на теоретическая распределенная транзакция с участием 2 ресурсов. (Более практическое описание проблемы, с которой мне пришлось столкнуться, можно найти в моем блоге ). Сценарий - это нормальное выполнение распределенной транзакции (без сбоев и восстановления). Приложение запускает транзакцию, обновляет оба ресурса и вызывает вызов commit (). После завершения фиксации приложение проверяет оба ресурса и видит все изменения из завершенной транзакции. Все в порядке, протокол 2PC сделал свое дело, верно?

Теперь небольшое изменение в сценарии. Пока распределенная транзакция выполняет commit (), другое приложение обращается к тем же двум ресурсам. Может ли он видеть только часть изменений из транзакции? Допустим, изменения одного ресурса уже видны, а изменения второго ресурса еще не видны?

Во всей информации, которую я прочитал о протоколе 2PC, я не смог найти никаких гарантий относительно видимости изменений в отдельные ресурсы относительно друг друга. И я не смог найти ничего, что говорило бы, что все ресурсы завершают свои отдельные коммиты в одно и то же время.

13
задан user568826 9 January 2011 в 14:39
поделиться