Системы с устаревшими данными
В предыдущем разделе мы рассматривали системы, в которых только транзакции имеют временные ограничения. Однако в системах реального времени зачастую и сами данные могут иметь временную природу [79]. Например, для работы системы автопилота необходимо использовать информацию о силе и направлении ветра, а эта информация меняется непрерывно и очень быстро устаревает. Необходимость работы с устаревающими данными порождает новые проблемы.
В СУБД реального времени объекты данных делятся на два типа: дискретные и непрерывные. Дискретные данные − это «обычные» данные в смысле классических СУБД, т.е. данные, которые не связаны с реальным временем.
Непрерывные данные − это данные, связанные с внешними объектами, состояние которых непрерывно меняется во времени. Естественно, что состояние непрерывного объекта данных отображается в СУБД как дискретно обновляемая величина. Эта величина отражает состояние объекта на определенный момент времени в прошлом и с течением времени может все более отличаться от текущего состояния объекта. Например, если для расчета траектории самолета использовать данные о ветре часовой давности, то полученные результаты не будут соответствовать действительности.
Формально непрерывный объект данных можно описать при помощи следующей тройки (dvalue, dtimestamp, davi), где dvalue − состояние объекта d на момент времени dtimestamp и davi − это длина интервала, в течение которого это состояние можно считать корректным. Этот интервал называется интервалом абсолютной корректности элемента данных.
Непрерывными являются не только те элементы данных, которые непосредственно связаны с внешними объектами, но также и те элементы данных, значение которых зависит от других непрерывных объектов. Такие объекты называются соответственно базовыми и выведенными.
Все изменения состояния базы данных выполняются от имени транзакций. Это касается и изменений состояний непрерывных элементов данных. По типу изменяемых данных транзакции подразделяются на следующие классы:
Сенсорные − это транзакции, которые модифицируют базовые объекты. Такие транзакции обычно выполняются периодически и не работают с дискретными элементами данных.
Порожденные − это транзакции, которые модифицируют состояние выведенных объектов. Такие транзакции порождаются в результате изменений тех непрерывных объектов, из которых выводится модифицируемый объект.
Пользовательские − это все остальные транзакции. Они не могут изменять никакие непрерывные объекты, но могут их читать.
Сенсорные и порожденные транзакции обычно имеют крепкие директивные сроки. Это естественное решение − с одной стороны, бессмысленно завершать работу по обновлению состояния объекта, зная, что оно уже не корректно, с другой − если обновить состояние не удалось вовремя, то само по себе это не фатально.
Корректность транзакций
В предыдущем разделе корректной считалась транзакция, действия которой не привели к нарушению логической целостности БД, транзакция не имела конфликтов с другими транзакциями и директивный срок транзакции не оказался пропущен. В случае, когда данные также имеют временные характеристики, этого недостаточно. Например, нельзя считать корректными результаты работы транзакции по вычислению траектории самолета, если она использовала данные о ветре часовой давности. Таким образом, в определении корректности транзакции необходимо учитывать характеристики используемых ею данных.
Как было отмечено выше, с каждым отдельным значением непрерывного элемента данных ассоциируется интервал абсолютной корректности. Казалось бы, что дополнительное требование того, чтобы все использованные транзакцией данные были абсолютно корректны на какой-то момент времени, должно быть достаточным для получения правильного определения корректности транзакции, но это не так.
Интервал абсолютной корректности просто гарантирует, что в течение этого интервала отклонение от текущего состояния не превысит некоторой погрешности. Поскольку в результате вычислений погрешность накапливается, то для того, чтобы итоговая погрешность была разумной, необходимо накладывать более жесткие условия на погрешности используемых данных. При этом очень важно учитывать, как соотносятся моменты времени, в которые были сделаны обновления используемых элементов данных. Например, информация о режиме работы правого двигателя самолета может существенно отличаться от информации о режиме работы левого двигателя, полученной на минуту позже, хотя они все время работали в одинаковом режиме, и сделанные выводы могут оказаться неправильными.
Во избежание подобных проблем на используемые данные накладывается дополнительное условие, которое называется условием относительной целостности данных. Оно определяется следующим образом.
Для каждого множества непрерывных объектов данных R задается длина относительного интервала корректности Rrvi. Множество R называется относительно целостным, если выполнено следующее условие:
. (4.9.1)
Теперь мы можем определить понятие корректности набора непрерывных данных. Множество элементов данных R имеет корректное состояние на момент времени t (t>0), если выполнены следующие условия:
"dÎR, dvalue – логически целостное (удовлетворяет всем ограничениям целостности).
R – временно целостное:
все элементы d из R абсолютно целостны на момент времени t, т.е.
"dÎR, (t-dtimestamp)£ davi. (4.9.2)
R является относительно целостным, т.е. выполнена формула (4.9.2).
Теперь мы можем описать критерий корректности транзакции с учетом ограничений на используемые данные. Таким образом, транзакция может корректно завершиться, если:
· она логически целостна;
· ее директивный срок не пропущен;
· она использовала временно целостное множество непрерывных данных (т.е. и абсолютно, и относительно целостное), и эти данные остаются свежими на момент завершения транзакции.
Системы с устаревающими данными имеют много общего с системами реального времени, в которых используются только дискретные данные. В частности, в них можно использовать те же протоколы управления транзакциями при условии использования другого критерия корректности работы транзакции.
Однако практическая реализация поддержки временной целостности приводит к необходимости ответов на ряд дополнительных вопросов, которые рассматриваются в следующих подразделах.