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


Атомарность XML-транзакций - часть 4


  • из столбца Parameters выбираются путь path, по которому нужно вставлять узлы, а также сами узлы node и их позиции pos в XML-документе,
  • для каждого узла nodei выполняется операция вставки InsertAfter(nodei, path/node()[position()=posi-1]).

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

    Блокировка CD (child delete) используется в операции D. Эта блокировка устанавливается на узел схемы, соответствующий родителю удаляемого узла. CD-блокировка, установленная на узел n, предотвращает какие-либо вставки или удаления детей узла n. Это гаратирует, что при откате операции D удаленные узлы будут вставляться в точности в те же позиции, в которых находились до операции удаления.

    Блокировка LM (level modified) используется в операциях I*, D и RN. Она устанавливается на узел схемы, состав дочерних узлов которого будет изменяться. Так, если транзакция вставляет новый узел в узел n, то на узел n, помимо блокировки SI необходимо установить еще и блокировку LM. Если транзакция вставляет новый узел перед узлом n, то на узел n должна быть установлена блокировка SB, а на родителя узла n - блокировка LM. При этом блокировка LM конфликтует с блокировкой CD.

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

    В заключение раздела отметим, что при использовании описанного подхода к реализации в SXTM дополнительного менеджера восстановления XML-транзакций (если в РСУБД не поддерживается модель транзакций ONT) для операций D требуется выполнять дополнительный XQuery-запрос, а также приходится установливать дополнительные блокировки.Этих накладных расходов можно избежать, если использовать отложенную стратегию выполнения D операций.

    Основная идея заключается в том, что SXTM может отложить реальное выполнение операции удаления до тех пор, пока в этой же транзакции не понадобится выполнить какую-либо операцию, зависящую от результатов операции удаления, либо не произойдет фиксация транзакции. Если операция удаления выполняется в конце транзакции (при выполнении последней DB-транзакции), то в журнал уже не нужно писать какую-либо информацию по поводу этой операции, поскольку UNDO и REDO для последней DB-транзакции всегда выполняет РСУБД.

    При отложенном выполнении операции D SXTM должен установить обычные XDGL-блокировки для операции D в момент ее появления в транзакции, а LM- и CD-блокировки можно устанавливать непосредственно перед фактическим выполнением (возможно отложенном) операции D .




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