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

       

Дополнительные оптимизации в XDGL


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

<!ELEMENT person (name, age?, sex, salary?)>

показывает, что все дочерние узлы элемента person строго упорядочены: age всегда следует после name, sex - строго после age (или name, если age отсутствует), а необязательный элемент salary всегда завершает список дочерних узлов элемента person.

Информацию о порядке дочерних узлов можно использовать для оптимизации блокировок для осей preceding-sibling и following-sibling. Дело в том, что для шага preceding-sibling::node-name необходимо установить блокировки S для всех "братьев" узла node-name, поскольку описывающая схема не обеспечивает информацию о том, какие узлы следуют за node-name. При наличии же информации о порядке узлов можно блокировать не всех "братьев" node-name. Например, для запроса count(&#x002F;person&#x002F;sex&#x002F;preceding-sibling::*) на последнем шаге достаточно заблокировать в режиме S только sex и salary, а name и age можно не блокировать.



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