Граф приоритета
Граф приоритетов , также называемый графом конфликтов. [1] и сериализуемости граф , используется в контексте управления параллелизмом в базах данных . [2] Это ориентированный граф , представляющий приоритет транзакций в расписании, отражаемый приоритетом конфликтующих операций в транзакциях. Расписание является сериализуемым для конфликтов тогда и только тогда, когда его график приоритета зафиксированных транзакций является ациклическим .
Граф приоритета для расписания S содержит:
- Узел для каждой зафиксированной транзакции в S
- Дуга от Ti до Tj , если действие Ti предшествует конфликтует с одному из и действий Tj ним. То есть действия принадлежат разным транзакциям, по крайней мере одно из действий является операцией записи, и действия обращаются к одному и тому же объекту (чтение или запись).
Циклы зафиксированных транзакций можно предотвратить, прервав нерешительную (ни зафиксированную, ни прерванную) транзакцию в каждом цикле графа приоритетов всех транзакций, которые в противном случае могут превратиться в цикл зафиксированных транзакций (а зафиксированная транзакция не может быть прервана). . Одна транзакция, прерываемая за цикл, необходима и достаточна для разрыва и устранения цикла (возможно большее количество прерываний, которые могут произойти при некоторых механизмах, но они не нужны для сериализуемости). Вероятность генерации цикла обычно невелика, но, тем не менее, такая ситуация тщательно обрабатывается, обычно со значительными накладными расходами, поскольку требуется корректность. Транзакции, прерванные из-за предотвращения нарушения сериализуемости, перезапускаются и немедленно выполняются снова.
Примеры графиков приоритета
[ редактировать ]Пример 1
[ редактировать ]Пример 2
[ редактировать ]Граф приоритета графика D с 3 транзакциями. Поскольку существует цикл (длиной 2; с двумя ребрами) через зафиксированные транзакции T1 и T2, этот график (история) не является сериализуемым для конфликтов . Обратите внимание, что фиксация транзакции 2 не имеет никакого значения для создания графа приоритетов.
Пример 3
[ редактировать ]Алгоритм проверки сериализуемости конфликтов расписания S вместе с примером расписания.
- или
- Для каждой транзакции T x, участвующей в расписании S, создайте узел с меткой T i на графе приоритетов. Таким образом, граф приоритета содержит T 1 , T 2 , T 3 .
- Для каждого случая в S, где T j выполняет read_item (X) после того, как T i выполняет write_item (X), создайте ребро (T i → T j ) в графе приоритета. В приведенном выше примере этого не происходит, поскольку чтение после записи не выполняется.
- Для каждого случая в S, где T j выполняет write_item (X) после того, как T i выполняет read_item (X), создайте ребро (T i → T j ) в графе приоритета. В результате получается направленное ребро от T 1 к T 2 (поскольку T 1 имеет R(A) до того, как T 2 имеет W(A) ).
- Для каждого случая в S, где T j выполняет write_item (X) после того, как T i выполняет write_item (X), создайте ребро (T i → T j ) в графе приоритета. Это приводит к появлению направленных ребер от T 2 к T 1 , от T 2 к T 3 и от T 1 к T 3 .
- Расписание S сериализуемо тогда и только тогда, когда граф приоритета не имеет циклов. Поскольку T 1 и T 2 составляют цикл, приведенный выше пример не является (конфликт) сериализуемым.
Ссылки
[ редактировать ]Внешние ссылки
[ редактировать ]- Основы систем баз данных, 5-е издание. Использование графов приоритета обсуждается в главе 17, поскольку они относятся к тестам на сериализуемость конфликтов .
- Авраам Зильбершац , Генри Корт и С. Сударшан. 2005. Концепции системы баз данных (5-е изд.), Стр. 628–630. McGraw-Hill, Inc., Нью-Йорк, штат Нью-Йорк, США.