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

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

Операция записи — действие по сохранению изменений данных в логической таблице или материализованном представлении.

Система создает и обрабатывает операцию записи:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

В каждой логической таблице и материализованном представлении операции упорядочены по возрастанию номеров и меток времени: операция 4 всегда имеет более позднюю метку, чем операция 3. Между разными сущностями логической БД такой порядок не гарантируется, но операция всегда имеет более позднюю метку времени, чем завершенная перед ней.

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

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

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

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

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

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

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

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

При ошибке загрузки, обновления или синхронизации данных система отменяет неуспешную операцию записи и возвращает данные датасорсов в состояние, которое предшествовало операции.

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

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

Возможности по ручному управлению операциями описаны в разделе Управление операциями записи.