Альтернативный
метод сериализации транзакций, хорошо работающий в условиях редких конфликтов
транзакций и не требующий построения графа ожидания транзакций, основан на использовании
временных меток.
Основная
идея метода (у которого существует множество разновидностей) состоит в следующем:
если транзакция Т1 началась раньше транзакции Т2, то система обеспечивает такой
режим выполнения, как если бы Т1 была целиком выполнена до начала Т2.
Для этого
каждой транзакции Т предписывается временная метка t, соответствующая времени
начала Т. При выполнении операции над объектом rтранзакция Т помечает
его своей временной меткой и типом операции (чтение или изменение).
Перед выполнением
операции над объектом г транзакция Т1 выполняет следующие действия:
Проверяет, не закончилась
ли транзакция Т, пометившая этот объект. Если Т закончилась, Т1 помечает объект
г и выполняет свою операцию.
Если транзакция Т
не завершилась, то Т1 проверяет конфликтность операций. Если операции неконфликтны,
при объекте r остается или проставляется временная метка с меньшим значением,
и транзакция Т1 выполняет свою операцию.
Если операции Т1 и
Т конфликтуют,,то если t(T) > t(T1) (то есть транзакция Т является более
«молодой», чем Т1), производится откат Т и Т1 продолжает работу.
Если же t(T) < t(T1)
(Т «старше» Т1), то Т1 получает новую временную метку и начинается
заново.
К недостаткам
метода временных меток относятся потенциально более частые откаты транзакций,
чем в случае использования синхронизационных захватов. Это связано с тем, что
конфликтность транзакций определяется более грубо.
Кроме того,
в распределенных системах не очень просто вырабатывать глобальные временные
метки с отношением полного порядка (это отдельная большая наука).
Но в распределенных
системах эти недостатки окупаются тем, что не нужно распознавать тупики, а как
мы уже отмечали, построение графа ожидания в распределенных системах стоит очень
дорого.
Знаете ли Вы, что в 1965 году два американца Пензиас (эмигрант из Германии) и Вильсон заявили, что они открыли излучение космоса. Через несколько лет им дали Нобелевскую премию, как-будто никто не знал работ Э. Регенера, измерившего температуру космического пространства с помощью запуска болометра в стратосферу в 1933 г.? Подробнее читайте в FAQ по эфирной физике.