logo
Учебник ИСПиУ

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