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

4.9.6 Выбор периода для сенсорных транзакций

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

Естественное желание − выбрать период P сенсорной транзакции, обновляющей значение элемента d, таким образом, чтобы d гарантированно имел абсолютно корректное состояние. Предположим, что транзакции для работы требуется время (0<<P). Период сенсорной транзакции гарантирует нам только, что в течение этого интервала времени сенсорная транзакция будет выполнена, но не указывает время начала ее выполнения. Рассмотрим наихудшую ситуацию – это когда одна сенсорная транзакция начинается в момент t (и соответственно заканчивается в t+), а следующая за ней начинается в момент t+2Pe (и соответственно заканчивается в t+2P). В таком случае на интервале t+, t+2P) значение d останется неизменным, и, следовательно, для того чтобы все это время оно было абсолютно корректным необходимо, чтобы Pdavi/2.

4.9.7 Выбор версии непрерывного объекта

К моменту завершения очередной сенсорной транзакции предыдущее значение обновляемого элемента данных все еще может быть абсолютно корректным. В таком случае предыдущее значение не теряется, а представляет собой отдельную версию этого элемента данных. Формально, тройка (dvalue, dtimestamp, davi) описывает как раз версию элемента данных, и для одного элемента данных может существовать несколько таких троек.

Существование нескольких версий одного и того же объекта на первый взгляд кажется излишним усложнением, а использование только самой свежей информации о состоянии непрерывного объекта − наиболее правильным решением. Однако на самом деле это не так.

Рассмотрим следующий пример. Допустим, что множество непрерывных данных состоит из двух объектов a (версии (a0,0,20) и (a1,10,20)) и b (версия (b0,0,20)) и пусть интервал относительной корректности для этого множества Rrvi=9. Транзакция T начинается в момент времени t=10 и завершается к t=20. При этом T использует и a, и b. На время работы T существует две корректных версии элемента a-a0 и a1. Однако, если транзакция воспользуется a1, то она не сможет быть завершена из-за того, что использованные данные не будут относительно корректными. При использовании же более старого значения (a0) критерий относительной корректности не будет нарушен.

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