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. При закрытии дельты и фиксации изменений: запись с предыдущей категорией становится архивной, а запись с новой категорией — актуальной. Обновление записей происходит одномоментно.

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

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