СУБД ЛИНТЕР. Технический обзор

          

Иерархия транзакций в СУБД ЛИНТЕР


В СУБД ЛИНТЕР каждое приложение может использовать как обычные плоские транзакции, так и иерархические.

Классические плоские транзакции представляют собой последовательность запросов, завершающуюся оператором фиксации/отката Commit/Rollback. Причём необходимость отката транзакции может возникнуть и в середине транзакции. При этом из базы данных будет удалены все изменения, которые успела сделать транзакция. Приложение не может откатить лишь отдельные изменения, ему разрешено руководствоваться только одним принципом - “или всё, или ничего”.

Несомненно, это слишком категоричный и, следовательно, не всегда приемлемый принцип. Особенно в системах с нечёткой логикой.

Например, приложению (см. следующий рисунок) нужно произвести три действия A, B и D в одной транзакции. Причём действия A и D являются необходимыми, а вот для действия B есть “запасной вариант” - действие C. Так что приложение после выполнения действия А пытается в первую очередь выполнить действие B, и только если по какой-либо причине результаты отработки B “не устраивают” или возникла ошибка, то изменения, сделанные B, откатываются, и приложение предпринимает резервное действие C.

Иерархия транзакций в СУБД ЛИНТЕР

Такую логику транзакции не удастся реализовать при помощи линейных транзакций. Для использования подобных транзакций СУБД ЛИНТЕР предоставляет пользователю возможность иерархии транзакций.

Иерархия транзакций в СУБД ЛИНТЕР

При этом действуют следующие правила.

  • Подчинённые (вложенные) транзакции действуют по линейному принципу. И могут работают независимо друг от друга в любом из режимов (от оптимистичного до read-only).
  • Каждая из подчинённых транзакций может быть фиксирована/откачена независимо от других подчинённых транзакций.
  • Подчинённые транзакции “видят” изменения, сделанные прочими подчинёнными транзакциями (имеющими общего предка). Полностью изолированы только транзакции различных иерархий.
  • Фиксация/откат головной транзакции приведёт к фиксации/откату всех подчинённых транзакций.
  • Подобный подход к системе использования транзакций гораздо более гибкий.

    Кроме того, в СУБД ЛИНТЕР дополнительно введён аппарат контрольных точек (SAVE POINTS). При помощи этого аппарата можно будет откатить все изменения (даже фиксированные) до указанной контрольной точки.



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