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

       

Прямое выполнение с откатом


Один их возможных механизмов реализации функциональных update-выражений - это замена таких выражений традиционными (не функциональными) update-выражениями с последующим откатом к исходному состоянию данных. Несколько похожие идеи возникали и в контексте объектно-реляционных баз данных [].

Реализованный во многих XML-СУБД [, , , ] язык модификации XML-данных можно использовать для изменения состояния данных, а язык XQuery - для вычисления запроса над измененным состоянием. Заимствование в качестве синтаксиса функциональных update-выражений синтаксиса обычных update-выражений делает такую замену вполне естественной. Еще раз рассмотрим из раздела 2:

for $r in doc("db.xml")/db/movie[gender="fiction"]/review transform replace $d in $r//director with <a href="{doc("b")//person[name=$d/@name]/homepage/text()}"> {$d/text()} </a>

Такой запрос можно вычислить, перезаписав его в виде трех выражений языка XQuery и языка модификации XML-данных (на примере синтаксиса языка модификации XML-данных, реализованного в XML СУБД Sedna).

1-ый шаг:

UPDATE replace $d in doc("db.xml")/db/movie[gender="fiction"]/review $r//director with <a href="{doc("b")//person[name=$d/@name]/homepage/text()}"> {$d/text()} </a>

2-ой шаг:

doc("db.xml")/db/movie[gender="fiction"]/review

3-ий шаг:

ROLLBACK

Первое update-выражение изменяет состояние данных, второе выражение вычисляется над измененным состоянием данных и формирует результат запроса. Третье выражение "придает" функциональную семантику вычислению первых двух выражений - откатывает базу данных к начальному состоянию. Очевидно, что из-за побочных эффектов от вычисления первого выражения теряется возможность доступа к начальному состоянию данных во втором выражении.

Эффективность вычисления такой последовательности запросов определяется эффективностью реализации update-выражений в XML-СУБД и эффективностью вычисления операции ROLLBACK. Если реализация update-выражений удовлетворяет требованию произвольного доступа к данным, то и описанный подход отвечает этому требованию.

Такой подход к реализации расширения языка XQuery функциональными update-выражениями ограничивает их семантику тем, что выражения расширенного языка не обеспечивают доступ к исходному состоянию данных.



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