График приоритета - Precedence graph

А граф приоритета, также названный граф конфликтов[1] и сериализуемость график, используется в контексте контроль параллелизма в базы данных.[1]

Граф приоритета расписания S содержит:

  • Узел для каждой зафиксированной транзакции в S
  • Дуга из Tя к Тj если действие Tя предшествует и конфликты с одним из Тjдействия.

Примеры графа приоритета

Пример 1

Пример 2

Пример 2

Граф приоритета расписания D с 3 транзакциями. Поскольку существует цикл (длиной 2, с двумя ребрами) через зафиксированные транзакции T1 и T2, это график (история) нет Сериализуемый конфликт Обратите внимание, что фиксация транзакции 2 не имеет никакого значения для создания графа приоритета.

Тестирование сериализуемости с помощью графа приоритета

Пример тестирования сериализуемости

Алгоритм для тестирования Сериализуемость конфликта расписания S вместе с примером расписания.

или же

  1. Для каждой транзакции TИкс участвуя в расписании S, создайте узел с меткой Tя в графе приоритета. Таким образом, граф предшествования содержит T1, Т2, Т3.
  2. Для каждого случая в S, где Tj выполняет read_item(X) после Tя выполняет write_item(X), создайте ребро (Tя → Тj) в графе приоритета. В приведенном выше примере этого нигде не происходит, так как чтение после записи не выполняется.
  3. Для каждого случая в S, где Tj выполняет write_item(X) после Tя выполняет read_item(X), создайте ребро (Tя → Тj) в графе приоритета. Это приводит к направленному ребру от T1 к Т2 (как T1 имеет R (А) перед T2 имея Вт (А)).
  4. Для каждого случая в S, где Tj выполняет write_item(X) после Tя выполняет write_item(X), создайте ребро (Tя → Тj) в графе приоритета. Это приводит к направленным ребрам из T2 к Т1, Т2 к Т3 и т1 к Т3.
  5. Расписание S сериализуемо тогда и только тогда, когда у графа приоритетов нет циклов. Поскольку T1 и т2 составляют цикл, приведенный выше пример не является (конфликтным) сериализуемым.

Рекомендации

  1. ^ «Тест графа приоритета для сериализации конфликтов».

внешняя ссылка