Типы конфликтов и политики их устранения при использовании нескольких регионов записи
Область применения: Nosql Mongodb Кассандра Гремлин Таблица
Конфликты и политики их устранения целесообразно изучать, если ваша учетная запись Azure Cosmos DB настроена на несколько регионов записи.
Если это так, при одновременном обновлении одного и того же элемента средствами записи в разных регионах могут возникнуть конфликты. Конфликты обновления принадлежат к следующим трем типам:
Конфликты вставки — могут возникать, если приложение одновременно вставляет два или более элемента с одним и тем же уникальным индексом в два или более региона. Например, может возникнуть конфликт вставки со свойством идентификатора.
Конфликты замены — могут возникать, если приложение одновременно обновляет один и тот же элемент в двух или более регионах.
Конфликты удаления — могут возникать, если приложение одновременно удаляет элемент в одном регионе и обновляет его в другом регионе.
Политик разрешения конфликтов
Azure Cosmos DB предоставляет гибкий механизм устранения конфликтов записи на основе политики. Вы можете выбрать одну из политик устранения конфликтов в контейнере Azure Cosmos DB:
Приоритет последней записи (LWW). Эта политика применяется по умолчанию и использует свойство метки времени, назначенное системой (на основе протокола синхронизации времени). Если вы используете API для NoSQL, можно указать любое другое пользовательское числовое свойство (например, собственное понятие метки времени), которое будет использоваться для разрешения конфликтов. Настраиваемое числовое свойство иначе называется путем устранения конфликтов.
Если во время вставки или замены двух или более элементов возникает конфликт, приоритет получает элемент с более высоким значением пути устранения конфликтов. Если несколько элементов имеют одинаковое числовое значение пути устранения конфликта, то приоритет определяется системой. Во всех регионах будет использоваться одна и та же версия элемента, получившего приоритет. При наличии конфликтов удаления удаленная версия всегда имеет приоритет в конфликтах вставки или замены. Этот результат не зависит от значения пути устранения конфликтов.
Примечание.
Приоритет последней записи — это заданная по умолчанию политика устранения конфликтов, которая использует метку времени
_ts
для следующих API: SQL, MongoDB, Cassandra, Gremlin и Table. Пользовательское числовое свойство доступно только для API для NoSQL.Дополнительные сведения см. в разделе с примерами использования политик устранения конфликтов LWW.
Настраиваемая политика. Предназначена для семантики, определяемой приложением, и служит для разрешения конфликтов. При настройке этой политики в контейнере Azure Cosmos DB также необходимо зарегистрировать хранимую процедуру слияния. Эта процедура вызывается автоматически при обнаружении конфликтов в рамках транзакции базы данных на сервере. Система гарантирует только однократное выполнение слияния в рамках протокола обязательств.
Если в контейнере применяется настраиваемый параметр устранения конфликтов, но вам не удалось зарегистрировать процедуру слияния в контейнере либо процедура вызывает исключение во время выполнения, конфликты записываются в специальный веб-канал. Приложение должно затем устранить конфликты в веб-канале. Дополнительные сведения см. в разделе с примерами использования веб-каналов и настраиваемой политики устранения конфликтов.
Примечание.
Настраиваемая политика разрешения конфликтов доступна только для учетных записей API для NoSQL и может быть задана только во время создания. Такую политику нельзя применить к существующему контейнеру.
Следующие шаги
Узнайте, как настроить политики устранения конфликтов.