stringtranslate.com

Управление параллелизмом на основе временных меток

В информатике алгоритм управления параллелизмом на основе временных меток — это оптимистичный метод управления параллелизмом. Он используется в некоторых базах данных для безопасной обработки транзакций с использованием временных меток .

Операция

Предположения

Создание временной метки

Существует ряд различных подходов, позволяющих генерировать временные метки.

Формальное определение

Каждая транзакция ( ) представляет собой упорядоченный список действий ( ). Перед тем, как транзакция выполнит свое первое действие ( ), она помечается текущей временной меткой , или любой другой строго полностью упорядоченной последовательностью: . Каждой транзакции также дается изначально пустой набор транзакций, от которых она зависит, , и изначально пустой набор старых объектов, которые она обновила, .

Каждому объекту в базе данных присваиваются два поля временных меток, которые не используются ни для чего, кроме как для управления параллелизмом:

Для всех :

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

Чтобы прервать :

Для каждого в
Если равно , то восстановить и

Неформальное определение

Всякий раз, когда инициируется транзакция, она получает временную метку. Временная метка транзакции указывает, когда транзакция была инициирована. Эти временные метки гарантируют, что транзакции влияют на каждый объект в той же последовательности их соответствующих временных меток. Таким образом, если две операции, которые влияют на один и тот же объект из разных транзакций, операция транзакции с более ранней временной меткой должна быть выполнена до операции транзакции с более поздней временной меткой. Однако, если операция неправильной транзакции фактически представлена ​​первой, то она прерывается, и транзакцию необходимо перезапустить.

Каждый объект в базе данных имеет метку времени чтения , которая обновляется каждый раз при чтении данных объекта, и метку времени записи , которая обновляется каждый раз при изменении данных объекта.

Если транзакция хочет прочитать объект,

Если транзакция хочет записать данные в объект,

Физически нереализуемо

Поведение физически нереализуемо , если результаты транзакций не могли бы произойти, если бы транзакции были мгновенными. Ниже приведены единственные две ситуации, которые приводят к физически нереализуемому поведению:

  1. Транзакция T пытается прочитать X, но TS(T) < WT(X). Причина: Это означает, что X был записан другой транзакцией после начала T.
  2. Транзакция T пытается записать X, но TS(T) < RT(X). Причина: Это означает, что более поздняя транзакция прочитала X до того, как он был записан T.

Восстанавливаемость

Обратите внимание, что упорядочивание по временным меткам в его базовой форме не создает восстанавливаемых историй. Рассмотрим, например, следующую историю с транзакциями и :

Это может быть создано планировщиком TO, но не подлежит восстановлению, так как фиксирует даже при чтении из незафиксированной транзакции. Чтобы убедиться, что он создает восстанавливаемые истории, планировщик может хранить список других транзакций, из которых каждая транзакция читала , и не разрешать транзакции фиксироваться до того, как этот список будет состоять только из зафиксированных транзакций. Чтобы избежать каскадных прерываний, планировщик может пометить данные, записанные незафиксированными транзакциями, как грязные и никогда не разрешать начинать операцию чтения для такого элемента данных, пока он не будет снят с тега. Чтобы получить строгую историю, планировщик не должен разрешать никаких операций с грязными элементами.

Проблемы внедрения

Разрешение временной метки

Это минимальное время, прошедшее между двумя соседними временными метками. Если разрешение временной метки слишком большое (грубое), вероятность того, что две или более временных меток будут равны, увеличивается, что позволяет некоторым транзакциям фиксироваться в неправильном порядке. Например, для системы, которая создает сто уникальных временных меток в секунду, двум событиям, которые происходят с разницей в 2 миллисекунды, может быть присвоена одна и та же временная метка, даже если они произошли в разное время.

Блокировка временной метки

Несмотря на то, что этот метод не является блокирующим, поскольку объект не заблокирован от одновременного доступа на время транзакции, процесс записи каждой временной метки для объекта требует чрезвычайно кратковременной блокировки объекта или его прокси.

Смотрите также