Поделиться через


Режимы канала изменений в Azure Cosmos DB

ОБЛАСТЬ ПРИМЕНЕНИЯ: NoSQL

Azure Cosmos DB предлагает два режима канала изменений. Каждый режим предлагает одинаковые основные функциональные возможности. Различия включают операции, которые записываются в веб-канале, метаданные, доступные для каждого изменения, и период хранения изменений. Канал изменений можно использовать в разных режимах в нескольких приложениях для одного контейнера Azure Cosmos DB, чтобы соответствовать требованиям каждой рабочей нагрузки. Каждое приложение канала изменений может быть настроено только для чтения канала изменений в одном режиме. Использование канала изменений в одном режиме не запрещает использовать веб-канал изменений в другом режиме в другом приложении.

Примечание.

У вас есть какие-либо отзывы о режимах канала изменений? Нам очень интересно ваше мнение! Вы можете поделиться отзывами напрямую с командой инженеров Azure Cosmos DB. cosmoschangefeed@microsoft.com

Режим канала изменений последней версии

Последняя версия — это постоянная запись изменений, внесенных в элементы из создания и обновления. Вы получаете последнюю версию каждого элемента в контейнере. Например, если элемент создается, а затем обновляется перед чтением канала изменений, в канале изменений отображается только обновленная версия. Удаления не записываются в виде изменений и при удалении элемента больше не будут доступны в веб-канале. Режим канала изменений последней версии включен по умолчанию и совместим со всеми учетными записями Azure Cosmos DB, кроме API для таблицы и API для PostgreSQL. Этот режим ранее был способом использования канала изменений по умолчанию.

Все версии и удаление режима канала изменений (предварительная версия)

Все версии и режим удаления (предварительная версия) — это постоянная запись всех изменений элементов из операций создания, обновления и удаления. Вы получаете запись о каждом изменении элементов в том порядке, в том числе промежуточные изменения элемента между считываемым каналом изменений. Например, если элемент создается, а затем обновляется перед чтением канала изменений, в канале изменений отображаются версии создания и обновления элемента. Чтобы прочитать из канала изменений во всех версиях и режиме удаления, необходимо иметь непрерывные резервные копии , настроенные для учетной записи Azure Cosmos DB. Включение непрерывных резервных копий создает все версии и удаляет канал изменений. При использовании этого режима канала изменений можно считывать только изменения, произошедшие в течение периода непрерывного резервного копирования. Этот режим совместим только с учетными записями Azure Cosmos DB для NoSQL. Узнайте больше о том, как зарегистрироваться для предварительной версии.

Варианты использования канала изменений

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

Ниже приведены сценарии, которые хорошо подходят для этого режима:

  • Миграция всего контейнера в дополнительное расположение.

  • Возможность повторной обработки изменений с самого начала контейнера.

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

  • Рабочие нагрузки, которые не должны записывать удаления или промежуточные изменения между чтением.

Функции каждого режима

Помимо общих функций во всех режимах канала изменений каждый режим канала изменений имеет следующие характеристики:

  • Веб-канал изменений включает операции вставки и обновления, которые вносятся в элементы в контейнере.

  • Этот режим канала изменений не регистрирует удаления. Вы можете записать удаления, задав флаг обратимого удаления в элементах вместо их непосредственного удаления. Например, можно добавить атрибут в элемент, который вызывается deleted со значением true, а затем задать время жизни (TTL) элемента. Веб-канал изменений фиксирует его как обновление, и элемент автоматически удаляется при истечении срока действия TTL. Кроме того, можно задать конечный срок действия элементов с помощью функции TTL. Эта возможность позволяет обрабатывать изменения быстрее, чем с использованием срока жизни.

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

  • Когда элемент удаляется, он больше недоступен в канале изменений.

  • Изменения могут быть синхронизированы в любой момент времени, и не существует фиксированного периода хранения данных, для которого доступны изменения.

  • Возможность фильтрации канала изменений для просмотра только операций определенного типа не предусмотрена. Одним из возможных вариантов является добавление "обратимого маркера" на элемент для обновлений и фильтрации на основе маркера при обработке элементов в веб-канале изменений.

  • Начальная точка чтения канала изменений может быть начиная с начала контейнера, с точки времени, с момента "сейчас" или с определенной контрольной точки. Точность времени начала составляет примерно пять секунд.

Работа с каналом изменений

Каждый режим совместим с различными методами для чтения канала изменений для каждого языка.

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

Метод чтения канала изменений .NET Java Python Node.js
Модель извлечения данных канала изменений Да Да Да Да
Обработчик канала изменений Да Да No No
триггер Функции Azure Да Да Да Да

Анализ объекта ответа

В последнем режиме версии объект ответа по умолчанию представляет собой массив измененных элементов. Каждый элемент содержит стандартные метаданные для любого элемента Azure Cosmos DB, включая _etag и _tsс добавлением нового свойства _lsn.

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

ETag On FeedResponse отличается от того, что _etag отображается на элементе. _etag — это внутренний идентификатор, который используется для управления параллелизмом. Свойство _etag представляет версию элемента, а ETag свойство используется для последовательности веб-канала.

Следующие шаги

Дополнительные сведения об канале изменений см. в следующих статьях: