Azure Cosmos DB: Modo Change Feed All Versions and Deletes chega à Disponibilidade Geral
TL;DR: O novo modo All Versions and Deletes do Change Feed do Azure Cosmos DB expõe cada criação, atualização e exclusão (inclusive por TTL) com metadados de operação, eliminando a necessidade de soft deletes para capturar remoções. Ele funciona simultaneamente com o modo padrão no mesmo container, usando processadores separados. Ideal para auditoria, sincronização em tempo real, event sourcing e fluxos acionados por exclusão — tudo disponível em GA a partir de junho de 2026.
Aplicativos modernos não apenas escrevem dados e seguem em frente. Eles reagem às mudanças. Um novo pedido aciona uma atualização de estoque. Uma alteração de perfil sincroniza com um índice de busca. Um registro deletado dispara um workflow de compliance. O Change Feed do Azure Cosmos DB torna isso possível ao fornecer um stream em tempo real de todas as alterações em um container, e esse é um dos recursos mais poderosos da plataforma. A partir de hoje, o modo all versions and deletes está disponível em GA para Azure Cosmos DB for NoSQL! Esse modo oferece a imagem completa do que está mudando nos seus dados, incluindo exclusões e atualizações intermediárias que antes eram invisíveis no change feed.
O que é o modo All Versions and Deletes?
O Change Feed padrão (modo latest version) mostra apenas o estado mais recente de cada item após uma criação ou atualização, mas não captura exclusões e, se um item mudar várias vezes entre as leituras, você vê apenas a versão final. O modo all versions and deletes oferece a imagem completa. Cada criação, cada atualização e cada exclusão aparece no feed com metadados que dizem exatamente o que aconteceu:
- Criações e atualizações incluem o documento completo atual mais o tipo de operação (create ou replace).
- Exclusões incluem o id do item, partition key e se foi uma exclusão explícita ou expiração por TTL.
- A ordenação é preservada: as alterações aparecem na ordem em que ocorreram, incluindo versões intermediárias entre leituras.
Isso significa que você pode construir padrões que eram difíceis ou impossíveis com o modo padrão: trilhas de auditoria, sincronização de dados em tempo real sem soft deletes, workflows acionados por exclusão e lógica de ramificação baseada no tipo de operação.
Posso usar ambos os modos?
Uma das perguntas mais comuns: preciso escolher um modo para toda a minha conta? Não. Você habilita all versions and deletes como uma capacidade na conta, mas escolhe qual modo usar em código por processor, trigger ou pull mode iterator. Você pode até executar ambos os modos simultaneamente no mesmo container com containers de lease separados! Por exemplo, um processor em modo latest version sincronizando pedidos para um índice de busca, outro em modo all versions and deletes para auditoria.
Quando usar
- Auditoria e compliance. Capture um registro completo de cada alteração, incluindo exclusões e expirações por TTL, para fins regulatórios ou de depuração.
- Sincronização em tempo real sem soft deletes. Replique dados para um sistema secundário e mantenha-o preciso quando itens forem excluídos, sem adicionar flags isDeleted e lógica de limpeza à sua aplicação.
- Workflows acionados por exclusão. Dispare ações downstream como envio de notificações, limpeza de dados relacionados ou atualização de caches quando itens forem removidos.
- Event sourcing. Processe cada mudança de estado intermediário, não apenas a versão final, para reconstruir o histórico completo de um item.
Novo: Suporte para Azure Functions trigger
A maneira mais fácil de processar continuamente as mudanças em um container é com um Azure Functions trigger. Você escreve uma função, aponta para seu container, e o Azure Functions cuida do resto: gerenciamento de lease, checkpointing e scaling. Uma das funcionalidades mais solicitadas durante o preview era o suporte para o modo all versions and deletes no trigger — e agora está disponível. Você pode usar o trigger do Azure Cosmos DB com all versions and deletes tanto no modelo .NET isolated worker quanto in-process, com suporte para todas as outras linguagens em breve.
Aqui está um exemplo que processa mudanças em um container de pedidos. Quando um pedido é criado ou atualizado, a função loga os detalhes. Quando um pedido é excluído ou expira via TTL, ela loga a remoção:
public class Order
{
public string id { get; set; } = string.Empty;
public string CustomerId { get; set; } = string.Empty;
public string Status { get; set; } = string.Empty;
public decimal Total { get; set; }
}
public class OrderChangeFeedFunction
{
private readonly ILogger<OrderChangeFeedFunction> _logger;
public OrderChangeFeedFunction(ILogger<OrderChangeFeedFunction> logger)
{
_logger = logger;
}
[Function(nameof(OrderChangeFeedFunction))]
public void Run(
[CosmosDBTrigger(
databaseName: "store-db",
containerName: "orders",
Connection = "CosmosDBConnection",
LeaseContainerName = "leases",
CreateLeaseContainerIfNotExists = true,
ChangeFeedMode = CosmosDBChangeFeedMode.AllVersionsAndDeletes)]
IReadOnlyList<ChangeFeedItem<Order>> changes)
{
foreach (var change in changes)
{
switch (change.Metadata.OperationType)
{
case ChangeFeedOperationType.Create:
_logger.LogInformation(
"New order {Id} from customer {CustomerId}, total: {Total}",
change.Current.id, change.Current.CustomerId, change.Current.Total);
break;
case ChangeFeedOperationType.Replace:
_logger.LogInformation(
"Order {Id} updated, status: {Status}",
change.Current.id, change.Current.Status);
break;
case ChangeFeedOperationType.Delete:
var reason = change.Metadata.IsTimeToLiveExpired ? "TTL expired" : "deleted";
_logger.LogInformation(
"Order {Id} removed ({Reason})",
change.Metadata.Id, reason);
break;
}
}
}
}
O wrapper ChangeFeedItem<T> fornece tanto o documento (Current) quanto os metadados (Metadata) para cada mudança. Em exclusões, Current é null, mas os metadados incluem id, partition key e se foi expiração por TTL. Veja o exemplo completo no GitHub.
Se você precisar de mais controle sobre como as mudanças são consumidas, também pode usar o change feed processor para aplicações hospedadas ou o change feed pull model para leituras sob demanda. Ambos suportam o modo all versions and deletes.
Como começar
Para começar, siga os passos em change feed modes documentation para habilitar all versions and deletes na sua conta. Você precisará primeiro ter o backup contínuo habilitado, depois ativar o recurso na página Features do Portal Azure ou via REST API.
Para o Azure Functions trigger, instale o pacote NuGet apropriado para seu modelo de hospedagem e defina CosmosDBChangeFeedMode para AllVersionsAndDeletes no atributo CosmosDBTrigger conforme mostrado acima.
O que você vai construir?
O modo all versions and deletes libera o stream completo de eventos do seu container do Azure Cosmos DB: cada criação, cada atualização, cada exclusão, com os metadados para distingui-los. Estamos ansiosos para ver o que você vai construir!
Artigo originalmente publicado por Justine Cocchi em Azure Updates - Latest from Azure Charts.
Perguntas Frequentes
-
Preciso escolher entre o modo padrão e o All Versions and Deletes para toda a conta do Cosmos DB?
Não. Você habilita o recurso na conta, mas define o modo por processor, trigger ou pull mode iterator no código. É possível rodar ambos os modos simultaneamente no mesmo container com containers de lease separados. -
Como fica o suporte para Azure Functions?
O trigger do Azure Functions para Cosmos DB agora suporta nativamente o modo All Versions and Deletes nos modelos de host .NET isolated worker e in-process. Basta configurar CosmosDBChangeFeedMode no atributo CosmosDBTrigger. -
Esse modo captura exclusões por TTL (Time-to-Live)?
Sim. O metadado de cada exclusão inclui o campo IsTimeToLiveExpired, permitindo distinguir entre exclusão explícita e expiração por TTL, o que é essencial para auditoria e workflows de compliance. -
O que acontece com o documento quando uma exclusão é capturada?
No evento de exclusão, a propriedade Current (documento completo) fica null, mas o metadado contém id, partition key e indicação de se foi TTL. Para versões intermediárias (atualizações entre leituras), o modo preserva a ordem e mostra cada versão individualmente. -
Quais os pré-requisitos para habilitar esse modo?
É necessário ter o backup contínuo habilitado na conta do Cosmos DB. Depois, ative o recurso na página Features do Portal Azure ou via REST API. Para usar com Azure Functions, instale o pacote NuGet adequado.