XML - статьи

/A>Вычисление выражений конкурентными транзакциями


Поскольку язык XPath используется как составная часть одного из языков внесения модификаций в XML-документы [15], то реализация языка XPath потенциально может рассматриваться как составная часть инструмента по внесению модификаций в XML-документы несколькими конкурентными транзакциями. Данная область применения языка XPath порождает интерес к исследованию условий, при которых возможно гарантировать условно-последовательное (serializable) вычисление выражений XPath конкурентными транзакциями над общим XML-документом.

В [16] показывается, что применение стандартного двухфазного протокола блокирования к данным древовидной структуры, которую имеет XML-документ, приводит к низкому параллелизму выполнения конкурентных транзакций. Для древовидных структур данных в [16] предложен специальный протокол блокирования, который обеспечивает возможность последовательного упорядочения операций нескольких транзакций за счет эксплуатации того факта, что все обращения к элементам древовидной структуры предполагают просмотр дерева в направлении от корневого узла к листовым узлам.

Ниже мы воспроизведем условия протокола блокирования древовидных структур (tree-locking protocol). Доказательство корректности данного протокола дается в [16].

  1. Первый запрос на блокирование, инициируемый транзакцией, может относится к любому узлу дерева.
  2. Последующие запросы на блокирование должны удовлетворяться только в том случае, если транзакция обладает блокировкой узла, родительского по отношению к текущему.
  3. Операции разблокирования разрешено выполнять в любые моменты времени.
  4. Транзакция не имеет возможности повторного захвата блокировки узла после ее освобождения – даже в том случае, если принадлежащая транзакции блокировка родительского узла всё еще активна.
  5. Необходимо также заметить, что из доказательства корректности протокола блокирования древовидных структур [16] следует, что в том случае, если все транзакции начинают запросы на блокирование с корневого узла дерева – как это происходит в случае работы с XML – то условие 4 протокола можно дополнительно ослабить и разрешить транзакции повторно захватывать узел после освобождения, если транзакция сохранила блокировку родительского узла.


    Заметим, что условия протокола блокирования древовидных структур очень хорошо ложатся на предлагаемый в данной работе способ вычисления выражений языка XPath. Действительно, хранение в контексте выражения предков контекстного узла представляет собой удержание блокировки на эти узлы. Когда некоторый узел – предок контекстного узла – перестает храниться в контексте, это можно рассматривать как снятие блокировки с данного узла-предка. Как описывалось в разделе 5, предлагаемый способ вычисления выражений XPath построен таким образом, что необходимые для вычисления выражения предки контекстного узла сохранятся в контексте, продолжают храниться там в течение всего времени, пока ожидается их использование, и не запрашиваются повторно, будучи однажды освобождены из контекста.

    Реализация языка XPath, основанная на предлагаемом подходе вычисления обратных осей, может естественным образом обеспечить поддержку протокола блокирования древовидных структур и таким образом предоставить возможность работы с XML-документами конкурентным транзакциям.


    Содержание раздела