Операция записи
Содержание раздела
Операция записи — действие по сохранению изменений данных в логической таблице. Каждая операция является результатом выполнения одного запроса на загрузку или обновление данных. Источником данных может быть топик Kafka, сам запрос или датасорс.
В одной логической таблице одновременно может выполняться только одна операция. В разных логических таблицах операции могут выполняться параллельно.
Операции атомарны: если системе не удалось выполнить какое-то изменение в таблице, вся операция отменяется. Система изолирует изменения по операции от изменений по другим операциям и позволяет обращаться к данным отдельной операции.
Шаги по добавлению, удалению и изменению данных описаны в разделах главы Работа с данными.
Операции в дельте и вне дельты
Операции записи можно выполнять в дельте или вне дельты.
Дельта позволяет сгруппировать операции записи и управлять ими как группой, сохраняя или отменяя изменения по всем операциям группы сразу. Если в логической базе данных есть открытая дельта, все операции записи, начатые после ее открытия и завершенные до ее закрытия, попадают в эту дельту. Изменения по операциям записи в дельте становятся доступны для чтения и выгрузки без указания FOR SYSTEM_TIME после закрытия этой дельты.
Операциями вне дельты можно управлять по отдельности, а их изменения становятся доступны для чтения и выгрузки без указания FOR SYSTEM_TIME
сразу после завершения этих операций.
Номера и метки времени операций
Каждая операция записи имеет номер и метку времени.
Порядок назначения номеров операций
Операции получают номера в порядке начала их исполнения в логической БД, начиная с нуля. То есть операция 3 всегда следует после операции 2, но при этом операция 3 может завершиться раньше операции 2, если эти операции выполняются в разных таблицах.
Номер операции соответствуют номеру версий данных в истории изменений логической БД. К любой такой версии можно обратиться по номеру или метке времени с помощью ключевого слова FOR SYSTEM_TIME.
Система не гарантирует непрерывность нумерации операций.
На рисунке ниже показан пример с двумя операциями записи в одной логической таблице stores
. Для примера записи таблицы добавлены разными операциями.
Порядок назначения меток операций
Операция записи получает метку времени при закрытии дельты, если операция выполнена в дельте, или при завершении этой операции, если операция выполнена вне дельты. Метка устанавливается по серверному времени ноды.
Упорядоченность операций по номерам и меткам
В рамках каждой логической таблицы гарантируется упорядоченность операций по возрастанию номеров и меток времени. Среди разных таблиц логической БД такой гарантии нет: операция с меньшим номером в одной таблице может иметь более позднюю метку времени, чем операция с бóльшим номером в другой таблице. При этом для всех операций логической БД гарантируется, что каждая операция имеет бóльшую метку времени, чем операция, завершенная перед ней.
Непротиворечивость изменений в операции
Операция записи должна содержать непротиворечивые изменения данных. Это означает, что каждая добавляемая или изменяемая запись должна иметь уникальное значение первичного ключа в рамках операции. Исключение — полные дубликаты записей, из которых система сохраняет только один экземпляр.
Информацию о разных состояниях одного объекта необходимо разделять по разным операциям записи, как показано в примере на рисунке ниже. В примере показано изменение данных магазина, сменившего адрес. Первоначальные данные добавлены операцией 2, а новые данные — операцией 3.
Статусы операций
Возможные статусы операции записи:
- Выполняется (0) — обработка операции запущена и еще не завершена,
- Успешно обработана (1) — обработка операции успешно завершена,
- Отменяется (2) — отмена операции запущена и еще не завершена,
- Отменена (3) — отмена операции успешно завершена.
Операции со статусами «Выполняется» и «Отменяется» называются незавершенными, операции со статусами «Успешно обработана» и «Отменена» — завершенными.
При ошибках загрузки и обновления данных система отменяет неуспешные операции записи и возвращает данные датасорсов в состояние, которое предшествовало загрузке или обновлению. Но, если произошел сбой, например из-за неполадок в сети, операция может остаться в статусе «Отменяется» и потребовать ручного разбора.
Управление операциями
Незавершенные операции записи можно перезапускать и отменять. Подробнее см. в разделе Управление операциями записи.