Версионирование данных
Некоторые логические сущности поддерживают версионирование — отслеживают изменения, внесенные в их данные.
Каждая версия данных — это набор изменений по одной операции записи, имеющий:
- номер — равен номеру операции;
- метку времени — равна моменту завершения операции (для операций вне дельты) или закрытия дельты (для операций в дельте).
Нумерация версий данных
Версии данных нумеруются в рамках логической БД — в микросекундах с 00:00:00 UTC 1 января 1970 года. Последовательность нумерации гарантируется только на уровне логической сущности, так как запись в разные логические таблицы и синхронизация разных материализованных представлений могут происходить параллельно.
Диапазон актуальности записи
Записи логической таблицы, снапшот-таблицы или материализованного представления с одинаковым первичным ключом считаются разными состояниями одного объекта.
Для каждой записи фиксируется диапазон ее актуальности:
- начало — версия, когда запись появилась;
- конец* — версия, после которой запись была обновлена или удалена.
* Для снапшот-таблиц конец диапазона актуальности записей фиксируется только при удалении записей из таблиц с включенным отслеживанием удалений.
Текущие и исторические записи
Добавленные записи называются текущими записями, пока они не обновлены и не удалены. Записи, которые перестали быть текущими из-за их обновления или удаления, но при этом остались храниться в сущности, называются историческими.
Текущие записи поддерживаются для всех сущностей, хранящих данных; исторические — только для сущностей, поддерживающих историю данных.
Система перемещает обновленные и удаленные записи в категорию исторических:
- для логических таблиц:
- при завершении операции записи — если операция выполнена вне дельты;
- при закрытии дельты — если операция выполнена в дельте;
- для материализованных представлений — при успешном завершении синхронизации.
Пример версионирования
На рисунке ниже показан пример нескольких версий данных. В версиях 1745030465002175 и 1745030465113976 изменения внесены в логическую таблицу stores, в версии 1745030465003246 — в другую таблицу.
Записи о магазине, добавленные в разных версиях
Версионирование на физическом уровне
Система хранит информацию о версионировании записей в служебных столбцах физических таблиц:
sys_from— версия, когда появилась запись;sys_to— последняя версия, когда запись была текущей (NULL— если запись текущая);sys_op— тип изменения (0— добавление или обновление,1— удаление).
Эти столбцы по умолчанию скрыты на логическом уровне, но доступны для чтения при явном указании в запросе.