Дельта

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

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

На рисунке ниже показана последовательность операций записи, выполненных в дельтах 0 и 1. В дельте 0 выполнены операции записи с номерами 0-2, в дельте 1 — операции записи с номерами 3-4.

Операции записи двух дельт

Дельту можно открыть, закрыть, отменить (откатить) и удалить. Дельта, которая была открыта и еще не была закрыта, содержит горячие записи и называется открытой или горячей. Для каждой логической базы данных одновременно может быть открыто не более одной дельты. Дельта, которая была закрыта (зафиксирована), содержит актуальные и архивные записи и называется закрытой.

На рисунке ниже показана последовательность дельт, где дельта с номером 3 является открытой, а все предыдущие — закрытыми.

Открытая и закрытые дельты

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

Минимально допустимая разница между закрытием дельт — 1 секунда.

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

Дельта должна содержать непротиворечивые данные о состоянии объектов: каждая добавляемая запись таблицы должна иметь уникальный первичный ключ. Если в одной горячей дельте в таблицу добавляются разные записи с одинаковым первичным ключом, система не гарантирует сохранение определенной записи. Исключение — полные дубликаты записи, из которых система сохраняет только один экземпляр.

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

Изменение данных магазина, сменившего адрес

Вернуть данные в состояние, предшествовавшее дельте, можно следующими запросами:

  • ROLLBACK DELTA — отменяет изменения, внесенные в текущей открытой дельте,
  • ERASE DELTA — отменяет изменения, внесенные в одной или нескольких последних закрытых дельтах.

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

Работа с дельтами, закрытыми с датой и временем в будущем

При закрытии дельты можно указать любую дату и время. Но, если вы указываете дату и время в будущем относительно серверного времени, учитывайте, что SELECT-запрос без ключевого слова FOR SYSTEM_TIME и запрос DELETE работают с данными, актуальными по состоянию на текущее время сервера системы. То есть данные дельт, закрытых с будущими датой и временем, не возвращаются по умолчанию* и не удаляются.

* Чтобы получить данные «будущих» дельт, укажите в SELECT-запросе ключевое слово FOR SYSTEM_TIME с номером нужной дельты, меткой времени или диапазоном дельт.