Классика баз данных - статьи


Семантические особенности операций XQuery и XUpdate - часть 2


Дело в том, что в выражении XQuery не для всех узлов, выбираемых locpath, требуется блокировать все поддерево. Например, в выражении fn:count(//person) необходимо гарантировать неизменяемость количества узлов person, но при этом потомки элементов person могут изменяться произвольным образом другими транзакциями. В качестве еще одного примера рассмотрим FLWR-выражение: for $v in //person return $a/name. Здесь блокировки не обязаныобеспечивать неизменяемость всех поддеревьев person. Вместо этого достаточно гарантировать, что сами элементы person не будут никак изменены другими транзакциями (при этом потомки могут изменяться), и что не будут изменены поддеревья name.
  • II. Операция вставки нового узла в позицию последнего дочернего узла каждого целевого узла вызывается с двумя аргументами: выражение locpath специфицирует целевые узлы, а выражение constr2 определяет новый узел. Блокировки для locpath мы обсуждали выше. Для новых узлов необходимо установить неглубокую блокировку на запись. Например, для нового узла <person&#x002F;> требуется установить монопольную блокировку только на узел person, но при этом не нужно блокировать узлы, находящиеся ниже в иерархии. Для узла <name>John<&#x002F;name> имеются два варианта блокировок: можно установить монопольную неглубокую блокировку на узлы name и text (ребенок name) либо монопольную глубокую блокировку на узел name. Дополнительной семантической особенностью операции II является следующее: при вставке нового узла в позицию последнего дочернего узла целевого узла необходимо гарантировать, что другие транзакции не будут вставлять другие узлы на это же место. Очевидно, что можно установить глубокую блокировку (на чтение) на узел, в который вставляется новый узел, и тем самым гарантировать, что в него не будут вставлены новые узлы, но это слишком грубое решение. Здесь лучше ввести новый тип блокировок: неглубокую блокировку на чтение, которая дополнительно предотвращает вставку новых узлы в блокируемый узел.


    - Начало -  - Назад -  - Вперед -