Операция записи

Содержание раздела
  1. Операции в дельте и вне дельты
  2. Номера и метки времени операций
    1. Порядок назначения номеров операций
    2. Порядок назначения меток операций
    3. Упорядоченность операций по номерам и меткам
  3. Непротиворечивость изменений в операции
  4. Статусы операций
  5. Управление операциями

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

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

Операции атомарны: если системе не удалось выполнить какое-то изменение в таблице, вся операция отменяется. Система изолирует изменения по операции от изменений по другим операциям и позволяет обращаться к данным отдельной операции.

Шаги по добавлению, удалению и изменению данных описаны в разделах главы Работа с данными.

Операции в дельте и вне дельты

Операции записи можно выполнять в дельте или вне дельты.

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

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

Номера и метки времени операций

Каждая операция записи имеет номер и метку времени.

Порядок назначения номеров операций

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

Номер операции соответствуют номеру версий данных в истории изменений логической БД. К любой такой версии можно обратиться по номеру или метке времени с помощью ключевого слова FOR SYSTEM_TIME.

Система не гарантирует непрерывность нумерации операций.

На рисунке ниже показан пример с двумя операциями записи в одной логической таблице stores. Для примера записи таблицы добавлены разными операциями.

Операции записи в одной логической таблице

Порядок назначения меток операций

Операция записи получает метку времени при закрытии дельты, если операция выполнена в дельте, или при завершении этой операции, если операция выполнена вне дельты. Метка устанавливается по серверному времени ноды.

Упорядоченность операций по номерам и меткам

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

Непротиворечивость изменений в операции

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

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

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

Статусы операций

Возможные статусы операции записи:

  • Выполняется (0) — обработка операции запущена и еще не завершена,
  • Успешно обработана (1) — обработка операции успешно завершена,
  • Отменяется (2) — отмена операции запущена и еще не завершена,
  • Отменена (3) — отмена операции успешно завершена.

Операции со статусами «Выполняется» и «Отменяется» называются незавершенными, операции со статусами «Успешно обработана» и «Отменена» — завершенными.

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

Управление операциями

Незавершенные операции записи можно перезапускать и отменять. Подробнее см. в разделе Управление операциями записи.