Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Введение в СУБД HyTech.doc
Скачиваний:
11
Добавлен:
01.03.2025
Размер:
2.67 Mб
Скачать

Отслеживание изменений данных

Работа с БД в сети порождает ряд проблем, связанных с отслеживанием изменений данных, производимыми одними пользователями, в процессе выполнения поисков другими пользователями. При выполнении сложных запросов к БД пользователь начинает поиск при одном состоянии данных, а завершает в совершенно другом.

Если не предпринять специальных действий, то при достаточно динамичной работе нескольких пользователей окажется невозможным, например, подготовить отчет (выполнить ряд сложных взаимосвязанных поисков), так как через некоторое время полученные промежуточные результаты уже потеряют актуальность (устареют) и общий результат будет содержать явную «бессмыслицу».

Для того, чтобы разрешить возможные коллизии и создать у пользователей иллюзию их «единственности», в СУБД HyTech используется механизм «фотографий» (мгновенных снимков) состояния БД.

Механизм снимков

Механизм работы снимков можно описать следующим образом: при выполнении первого атомарного запроса из всей группы поисковых операций состояние таблицы «фотографируется». Последующие операции, используя этот «снимок», выполняют поиск для того же состояния БД, которое было на момент первого запроса. Все внесенные другими пользователями изменения «не видны» для данного пользователя. Это позволяет завершить всю сколь угодно длинную цепочку поисковых запросов без нарушения логической целостности. Снимок можно получить и не выполняя поиска при помощи функции htMakePhoto.

Для каждой открытой таблицы и для каждого пользователя хранится текущий снимок состояния таблицы. Снимок делается автоматически (при первом поиске по таблице) или при явном вызове функции htMakePhoto.

Отключение механизма снимков

Текущий снимок можно отменить с помощью оператора fix. Операции, закрывающие доступ к таблице, также отменяют текущий снимок. Для таблиц, которые включены в транзакцию, механизм снимков отключается. Для временных таблиц механизм снимков также отключается.

Фиксация состояний таблиц не захватывает таблицы в монопольное пользование. Другие пользователи могут продолжать работать с этими же таблицами.

Механизм транзакций

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

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

Во многих приложениях существует ряд операций с данными, которые надо выполнить по принципу «все или ничего». Например, перенос денег со счета на счет. Эта операция требует выполнить несколько действий:

  • Вычесть некоторую сумму с одного счета;

  • Прибавить эту же сумму на другой счет;

  • Занести некоторую запись в протокол.

Если хотя бы одно из этих действий не выполнится, надо аннулировать все изменения, внесенные предыдущими действиями (откатить транзакцию). Если транзакция откачена, то это эквивалентно тому, что ни одно из действий, входящих в операцию, выполняющуюся под транзакцией, не выполнялось вовсе.

В многопользовательском режиме остальные пользователи могут обращаться к данным из модифицируемых таблиц. Они не должны видеть частичные или незавершенные изменения и механизм транзакций обеспечивает это. Т.е. при использовании механизма транзакций для «внешних» пользователей база данных (совокупность нескольких таблиц) «скачком» переходит из одного допустимого состояния в другое.