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

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

Изменения, внесенные одной операцией записи, создают новую версию данных в истории изменений.

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

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

  • начало — версия, в которой запись появилась;
  • конец — версия, после которой запись была удалена или заменена.

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

  • для логических таблиц:
    • при завершении операции записи — если операция выполнена вне дельты;
    • при закрытии дельты — если операция выполнена в дельте;
  • для материализованных представлений — при успешном завершении синхронизации.

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

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

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

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

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

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