хм. но не прозрачно. А вроде как можно доделать до прозрачности

что-то мне все-таки не понятно почему оно должно работать в общем случае...

ведь, если не ошибаюсь, гарантировано оно работает только в случае, если поведение обоих серверов одинаковое для _каждого_ запроса который приходит на сервер (независимо от последовательности исполнения различных запросов). В случае одного приложения оно, конечно, тривиально. А в случае двух приложений с concurrency или read committed изоляцией распределенный deadlock или livelock очень даже возможен. Возможно, что через timeout обе транзакции получат отлуп - здесь надо аккуратно проанализировать, где и когда оно случится.

В случае no wait транзакций мне кажется что вполне даже возможно, что на одном сервере операция пройдет успешно, на другом - получит отлуп. Что тогда возвращать клиенту? Ошибку? А как откатить изменения в той базе, где запрос отработал?

То-есть нутром чуствую, что класс задач, где такое работает, довольно узкий и надо четко указать ограничения, когда оно будет корректно работать... Может я не прав, тогда аргументируйте...

Роман

Ответить