Link Search Menu Expand Document

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

Все записи логической таблицы с одинаковым первичным ключом рассматриваются системой как исторические состояния одного объекта. Объект системы может одновременно иметь множество архивных состояний, а также не более одного актуального и не более одного нового (“горячего”) состояния.

Данные, добавленные в систему с помощью функций загрузки и обновления данных, считаются новым состоянием объектов и сохраняются в виде горячих записей. При фиксации изменений система одномоментно обновляет состояние объектов, исключая возможность чтения “грязных” данных. Обновление происходит в следующем порядке:

  1. По каждой горячей записи:
    1. Выполняется поиск соответствующей актуальной записи. Записи сопоставляются по значению первичного ключа.
    2. Если актуальная запись найдена, она перемещается в архив. При этом горячая запись перемещается в категорию актуальных, если содержит признак добавления, или удаляется, если содержит признак удаления.
    3. Если актуальная запись не найдена, горячая запись перемещается в категорию актуальных.
  2. В историю изменений данных системы добавляется новая дельта с номером, равным номеру предыдущей зафиксированной дельты + 1.

Под признаком добавления или удаления записи понимается значение sys_op (0 — добавление, 1 — удаление), если запись была загружена, и тип запроса (UPSERT VALUES и UPSERT SELECT — добавление, DELETE — удаление), если запись была обновлена.

Пример версионирования данных

Рассмотрим пример версионирования данных для одного объекта логической таблицы stores — набора данных одного магазина. Адрес магазина был ранее изменен со значения ул. Старая, 9 на ул. Новая, 11, это изменение было зафиксировано, и теперь фиксируется изменение категории магазина со значения basic на vip.

В этом случае данные магазина обновляются в следующем порядке (см. рисунок ниже):

  1. В горячей дельте (до фиксации изменений): запись с новой категорией сохраняется в качестве горячей записи.
  2. При закрытии дельты и фиксации изменений: запись с предыдущей категорией становится архивной, а запись с новой категорией — актуальной. Обновление записей происходит одномоментно.

На рисунке ниже показаны версии записей до закрытия и после закрытия одной дельты. Актуальные версии записей помечены значком пользователя: именно они по умолчанию возвращаются в ответ на запрос внешней системы, если в запросе не указан момент времени, на который запрашиваются данные.

Обновление данных магазина