Синхронизация доступа к данным
В централизованных системах БД очень распространено использование двухфазного протокола
синхронизационных захватов объектов БД. В соответствии с этим протоколом объект БД
автоматически захватывается транзакцией в соответствующем режиме при первом обращении, и
все захваты данной транзакции освобождаются только при ее завершении. В случае возникновения
конфликта по синхронизации транзакция блокируется, пока объект не будет освобожден.
Следование этому протоколу может привести к возникновению синхронизационного тупика между
двумя или более транзакциями. Задача СУБД - распознать появление тупика и разрушить его
путем отката одной или нескольких транзакций.
Распознавание тупиков сводится к обнаружению циклов в графе ожидания транзакций, что
является трудоемкой задачей даже в централизованных СУБД. В распределенных системах
решение этой задачи может потребовать неприемлемых накладных расходов (хотя поиски
алгоритмов с допустимыми затратами продолжаются).
Поэтому более часто в распределенных системах применяются протоколы синхронизации,
основанные на временных метках. Это направление само по себе очень широко, имеются разные
варианты и даже комбинации с протоколом двухфазных захватов, но основной проблемой
реализации является отсутствие в распределенной системе единого времени.