Версионирование данных

Версионирование на логическом уровне

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

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

Записи, которые принадлежат текущей версии данных, называются текущими записями, а записи, принадлежащие предыдущим версиям данных, — историческими записями. Система перемещает обновленные и удаленные записи из категории текущих в категорию исторических:

  • при завершении операции записи — если операция выполнена вне дельты;
  • при закрытии дельты — если операция выполнена в дельте.

На рисунке ниже показан пример нескольких версий данных (v0, v1 и т.д.). В версиях v0 и v4 внесены изменения в логическую таблицу stores, в версиях v1-v3 внесены изменения в другие таблицы.

Записи о магазине, относящиеся к разным версиям данных

Версионирование на физическом уровне

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

В некоторых СУБД все постоянные данные логической таблицы хранятся в одной физической таблице, в других СУБД — распределяются по разным физическим таблицам.

Подробнее о распределении данных по физическим таблицам см. в разделе Физическая схема данных > Состав физической схемы.