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

4.9.13 Использование сложных моделей транзакций

В предыдущих разделах подразумевалось использование простой модели транзакций, в которой транзакции не зависят друг от друга. Однако в системах реального времени используются и более сложные модели транзакций, например вложенная модель [79].

Для примера мы рассмотрим применение активных баз данных в системах реального времени [79].

Активные базы данных

В отличие от обычных систем управления базами данных системы управления активными базами данных могут выполнять определенные операции при возникновении определенного события. Формально такие системы содержат наборы правил вида Событие-Условие-Действие. В том случае, если произошло данное событие и соответствующее условие истинно, то должно быть выполнено заданное действие.

Примерами событий могут быть COMMIT или ABORT транзакции, операции доступа к данным или внешние события. Условие обычно представляет собой некоторый предикат от текущего состояние базы данных. Действие − это транзакция, которая выполняется в ответ на определенную ситуацию, где ситуация − это комбинация события и условия.

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

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

Активные базы данных реального времени

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

Одна проблема, которая возникает − какие приоритеты назначать подтранзакциям [79]. Также, поскольку транзакция порождает подтранзакцию (непосредственную или отложенную), то количество работы, которое должно быть сделано для завершения первоначальной транзакции, увеличивается. А следовательно, такая транзакция имеет меньший шанс завершиться успешно, чем например транзакция, которая имеет такой же приоритет, но не порождает никаких транзакций. Оперативный учет такой информации – еще одна проблема.

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