Modos de feed de alterações no Azure Cosmos DB

APLICA-SE A: NoSQL

O Azure Cosmos DB oferece dois modos de feed de alterações. Cada modo oferece a mesma funcionalidade principal. As diferenças incluem as operações capturadas no feed, os metadados disponíveis para cada alteração e o período de retenção das alterações. Você pode consumir o feed de alterações em modos diferentes entre vários aplicativos do mesmo contêiner do Azure Cosmos DB para atender aos requisitos de cada carga de trabalho. Cada aplicativo de feed de alterações individual só pode ser configurado para fazer a leitura do feed de alterações em um modo. O consumo do feed de alterações em um modo não o proíbe de consumir o feed de alterações em outro modo em um aplicativo diferente.

Observação

Você tem algum comentário sobre os modos de feed de alterações? Queremos saber sua opinião! Sinta-se à vontade para compartilhar comentários diretamente com a equipe de engenharia do Azure Cosmos DB: cosmoschangefeed@microsoft.com.

Modo de feed de alterações de versão mais recente

O modo de versão mais recente é um registro persistente de alterações feitas em itens com base em criações e atualizações. Você obtém a versão mais recente de cada item no contêiner. Por exemplo, se um item for criado e atualizado antes de você ler o feed de alterações, somente a versão atualizada será exibida no feed de alterações. As exclusões não são capturadas como alterações e, quando um item é excluído, ele não fica mais disponível no feed. O modo de feed de alterações da versão mais recente é habilitado por padrão e é compatível com todas as contas do Azure Cosmos DB, exceto a API para Tabela e a API para PostgreSQL. Esse modo era anteriormente a maneira padrão de consumir o feed de alterações.

Todas as versões e exclusões do modo de feed de alterações (versão prévia)

O modo Todas as versões e exclusões (versão prévia) é um registro persistente de todas as alterações em itens com base em operações de criação, atualização e exclusão. Você obtém um registro de cada alteração em itens na ordem em que ocorreu, incluindo alterações intermediárias em um item entre as leituras do feed de alterações. Por exemplo, se um item for criado e atualizado antes de você ler o feed de alterações, as versões Criar e Atualizar do item aparecerão no feed de alterações. Para ler no feed de alterações em todas as versões e modos de exclusão, você precisará ter backups contínuos configurados para sua conta do Azure Cosmos DB. A ativação de backups contínuos cria o feed de alterações Todas as versões e exclusões. Você só pode ler as alterações que ocorreram dentro do período de backup contínuo ao usa esse modo de feed de alterações. Esse modo só é compatível com contas do Azure Cosmos DB for NoSQL. Saiba mais sobre como se inscrever para a versão prévia.

Casos de uso de feed de alterações

O modo de versão mais recente fornece uma maneira fácil de processar alterações históricas e em tempo real em itens em um contêiner com a capacidade de voltar para as alterações desde o início do contêiner.

Veja abaixo cenários adequados para esse modo:

  • Migrações de um contêiner inteiro para um local secundário.

  • Capacidade de reprocessar alterações desde o início do contêiner.

  • Processamento em tempo real de alterações em itens em um contêiner resultantes de operações de criação e atualização.

  • Cargas de trabalho que não precisam capturar exclusões ou alterações intermediárias entre leituras.

Recursos de cada modo

Além dos recursos comuns em todos os modos de feed de alterações, o modo de feed de alterações tem as seguintes características:

  • O feed de alterações inclui inserções e operações de atualização feitas em itens no contêiner.

  • Esse modo de feed de alterações não registra exclusões em log. Você pode capturar exclusões com a definição de sinalizador “exclusão reversível” nos seus itens em vez de excluí-los diretamente. Por exemplo, você pode adicionar um atributo no item chamado deleted com o valor true e definir uma TTL (vida útil) no item. O feed de alterações o captura como uma atualização e o item é excluído automaticamente quando o TTL expira. Como alternativa, é possível definir um período de expiração finito para seus itens usando a funcionalidade TTL. Com essa solução, é necessário processar alterações em um intervalo de tempo menor do que o período de expiração da TTL.

  • Somente a alteração mais recente para um item específico está incluída no feed de alterações. As alterações intermediárias podem não estar disponíveis.

  • Quando um item é excluído, ele não fica mais disponível no feed de alterações.

  • As alterações podem ser sincronizadas de qualquer ponto no tempo e não há nenhum período de retenção de dados fixo para o qual haja alterações disponíveis.

  • Não é possível filtrar o feed de alterações para um tipo específico de operação. Uma alternativa possível é adicionar um "marcador flexível" ao item para atualizações e filtrar com base no marcador quando você processar itens no feed de alterações.

  • O ponto de partida para ler o feed de alterações pode ser desde o início do contêiner, de um ponto no tempo, de "agora" ou de um ponto de verificação específico. A precisão da hora de início é de aproximadamente cinco segundos.

Trabalhar com o feed de alterações

Cada modo é compatível com métodos diferentes para ler o feed de alterações em cada idioma.

Você pode usar as seguintes maneiras de consumir alterações do feed de alterações no modo de versão mais recente:

Método para ler o feed de alterações .NET Java Python Node.js
Modelo de pull do feed de alterações Sim Sim Sim Yes
Alterar o processador de feed Sim Sim Não Não
Gatilho do Azure Functions Yes Sim Sim Yes

Analisar o objeto de resposta

No modo de versão mais recente, o objeto de resposta padrão é uma matriz de itens que foram alterados. Cada item contém os metadados padrão para um item do Azure Cosmos DB, incluindo _etag e _ts, com a adição de uma nova propriedade, _lsn.

O formato _etag é interno e você não deve assumir uma dependência dele, pois ele pode ser alterado a qualquer momento. _ts é um carimbo de data/hora de modificação ou de criação. Use o _ts para uma comparação cronológica. _lsn é uma ID de lote que é adicionada apenas para o feed de alterações e representa a ID da transação. Muitos itens podem ter a mesma _lsn.

O ETag no FeedResponse é diferente do _etag que você vê no item. _etag é um identificador interno e é usado para controle de simultaneidade. A propriedade _etag representa a versão do item, ao passo que a propriedade ETag é usada para sequenciar o feed.

Próximas etapas

Para saber mais sobre o feed de alterações, confira os seguintes artigos: