Версионирование данных
Версионирование на логическом уровне
Изменения данных, внесенные одной операцией записи, приводят к появлению новой версии данных в истории изменений. Версии нумеруются в рамках логической БД. Последовательность нумерации гарантируется только на уровне логической таблицы, так как запись в разные таблицы может происходить параллельно.
Все записи логической таблицы, которые имеют одинаковое значение первичного ключа, рассматриваются системой как состояния одного объекта, относящиеся к разным версиям данных. По каждой записи система хранит информацию о диапазоне версий, в которых эта запись действовала. Начало диапазона — это версия, в которой запись появилась, конец диапазона — версия, после которой запись была удалена или заменена другой записью.
Записи, которые принадлежат текущей версии данных, называются текущими записями, а записи, принадлежащие предыдущим версиям данных, — историческими записями. Система перемещает обновленные и удаленные записи из категории текущих в категорию исторических:
- при завершении операции записи — если операция выполнена вне дельты;
- при закрытии дельты — если операция выполнена в дельте.
На рисунке ниже показан пример нескольких версий данных (v0
, v1
и т.д.). В версиях v0
и v4
внесены изменения в логическую таблицу stores
, в версиях v1
-v3
внесены изменения в другие таблицы.
Версионирование на физическом уровне
Все изменения, вносимые в логическую таблицу, сохраняются в буферную таблицу — физическую таблицу, предназначенную для временного хранения данных. По мере завершения операций записи данные перемещаются в физическую таблицу, предназначенную для постоянного хранения данных.
В некоторых СУБД все постоянные данные логической таблицы хранятся в одной физической таблице, в других СУБД — распределяются по разным физическим таблицам.
Подробнее о распределении данных по физическим таблицам см. в разделе Физическая схема данных > Состав физической схемы.