Jump to content

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

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

Операция

[ редактировать ]

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

[ редактировать ]
  • Каждое значение временной метки уникально и точно представляет момент времени.
  • Временная метка с более высоким значением появляется позже во времени, чем временная метка с меньшим значением.

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

[ редактировать ]

Несколько различных подходов могут генерировать временные метки.

  • Использование значения системных часов в начале транзакции в качестве отметки времени.
  • Использование поточно-ориентированного общего счетчика, который увеличивается в начале транзакции в качестве отметки времени.
  • Комбинация двух вышеуказанных методов.

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

[ редактировать ]

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

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

  • — это временная метка последней транзакции, которая прочитала значение объекта ( , где — последняя транзакция, считывающая значение объекта).
  • — это временная метка последней транзакции, обновившей значение объекта ( , где — последняя транзакция, обновившая значение объекта).

Для всех :

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

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

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

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

[ редактировать ]

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

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

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

  • но транзакция началась до отметки времени записи объекта, это означает, что что-то изменило данные объекта после начала транзакции. В этом случае транзакция отменяется и ее необходимо перезапустить.
  • и транзакция началась после отметки времени записи объекта, это означает, что безопасно чтение объекта . В этом случае, если временная метка транзакции находится после временной метки чтения объекта, временная метка чтения устанавливается в соответствии с временной меткой транзакции.

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

  • но транзакция началась до отметки времени чтения объекта, это означает, что что-то просмотрело объект, и мы предполагаем, что оно взяло копию данных объекта. Поэтому мы не можем выполнить запись в объект, поскольку это сделает любые скопированные данные недействительными, поэтому транзакция прерывается и ее необходимо перезапустить.
  • и транзакция началась до отметки времени записи объекта, это означает, что что-то изменило объект с тех пор, как мы начали нашу транзакцию. В этом случае мы используем правило записи Томаса , просто пропускаем операцию записи и продолжаем как обычно; транзакцию не нужно прерывать или перезапускать
  • в противном случае транзакция записывает данные в объект, и временная метка записи объекта устанавливается в соответствии с временной меткой транзакции.

Физически неосуществимо

[ редактировать ]

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

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

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

[ редактировать ]

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

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

Проблемы реализации

[ редактировать ]

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

[ редактировать ]

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

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

[ редактировать ]

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

См. также

[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 8ce6ce71390e641528f3645458772cf2__1711099920
URL1:https://arc.ask3.ru/arc/aa/8c/f2/8ce6ce71390e641528f3645458772cf2.html
Заголовок, (Title) документа по адресу, URL1:
Timestamp-based concurrency control - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)