Wijzigingenfeed in Azure Cosmos DB

VAN TOEPASSING OP: Nosql MongoDB Cassandra Gremlin

Wijzigingenfeed in Azure Cosmos DB is een permanente record van wijzigingen in een container in de volgorde waarin ze plaatsvinden. Wijzigingenfeed-ondersteuning in Azure Cosmos DB-taken door te luisteren naar een Azure Cosmos DB-container voor alle wijzigingen. Als output verschijnt er vervolgens een gesorteerde lijst met gewijzigde documenten op volgorde van wijziging. De persistente wijzigingen kunnen asynchroon en incrementeel worden verwerkt en de uitvoer kan worden verdeeld over een of meer consumenten voor parallelle verwerking.

Meer informatie over ontwerppatronen voor wijzigingenfeeds.

Ondersteunde API's en client-SDK's

De functie voor wijzigingenfeeds wordt momenteel ondersteund in de volgende Azure Cosmos DB SDK's.

Clientstuurprogramma's NoSQL Apache Cassandra MongoDB Apache Gremlin Tabel PostgreSQL
.NET Pictogram dat aangeeft dat deze functie wordt ondersteund in de .NET SDK voor de API voor NoSQL. Pictogram dat aangeeft dat deze functie wordt ondersteund in de .NET SDK voor de API voor Apache Cassandra. Pictogram dat aangeeft dat deze functie wordt ondersteund in de .NET SDK voor de API voor MongoDB. Pictogram dat aangeeft dat deze functie wordt ondersteund in de .NET SDK voor de API voor Apache Gremlin. Pictogram dat aangeeft dat deze functie niet wordt ondersteund in de .NET SDK voor de API voor Table. Pictogram dat aangeeft dat deze functie niet wordt ondersteund in de .NET SDK voor de API voor PostgreSQL.
Java Pictogram dat aangeeft dat deze functie wordt ondersteund in de Java SDK voor de API voor NoSQL. Pictogram dat aangeeft dat deze functie wordt ondersteund in de Java SDK voor de API voor Apache Cassandra. Pictogram dat aangeeft dat deze functie wordt ondersteund in de Java SDK voor de API voor MongoDB. Pictogram dat aangeeft dat deze functie wordt ondersteund in de Java SDK voor de API voor Apache Gremlin. Pictogram dat aangeeft dat deze functie niet wordt ondersteund in de Java-SDK voor de API voor Table. Pictogram dat aangeeft dat deze functie niet wordt ondersteund in de Java SDK voor de API voor PostgreSQL.
Python Pictogram dat aangeeft dat deze functie wordt ondersteund in de Python SDK voor de API voor NoSQL. Pictogram dat aangeeft dat deze functie wordt ondersteund in de Python SDK voor de API voor Apache Cassandra. Pictogram dat aangeeft dat deze functie wordt ondersteund in de Python SDK voor de API voor MongoDB. Pictogram dat aangeeft dat deze functie wordt ondersteund in de Python SDK voor de API voor Apache Gremlin. Pictogram dat aangeeft dat deze functie niet wordt ondersteund in de Python SDK voor de API voor Table. Pictogram dat aangeeft dat deze functie niet wordt ondersteund in de Python SDK voor de API voor PostgreSQL.
Node/JavaScript Pictogram dat aangeeft dat deze functie wordt ondersteund in de JavaScript SDK voor de API voor NoSQL. Pictogram dat aangeeft dat deze functie wordt ondersteund in de JavaScript SDK voor de API voor Apache Cassandra. Pictogram dat aangeeft dat deze functie wordt ondersteund in de JavaScript SDK voor de API voor MongoDB. Pictogram dat aangeeft dat deze functie wordt ondersteund in de JavaScript SDK voor de API voor Apache Gremlin. Pictogram dat aangeeft dat deze functie niet wordt ondersteund in de JavaScript-SDK voor de API voor Table. Pictogram dat aangeeft dat deze functie niet wordt ondersteund in de JavaScript SDK voor de API voor PostgreSQL.

Wijzigingenfeed en verschillende bewerkingen

Vandaag ziet u alle invoegingen en updates in de wijzigingenfeed. U kunt de wijzigingenfeed niet filteren op een specifiek type bewerking.

Tip

Een mogelijke alternatief is het toevoegen van een 'zachte markering' aan het item voor updates en het filteren op basis daarvan bij het verwerken van items in de wijzigingenfeed.

Er worden momenteel geen verwijderingsbewerkingen in logboeken door de wijzigingenfeed uitgevoerd. Als tijdelijke oplossing kunt u een zachte markering toevoegen aan de items die worden verwijderd. U kunt bijvoorbeeld een kenmerk toevoegen aan het item met de naam 'verwijderd', de waarde ervan instellen op 'true' en vervolgens een TTL-waarde (time-to-live) voor het item instellen. Als u de TTL instelt, zorgt u ervoor dat het item automatisch wordt verwijderd. Zie Time to Live (TTL) voor meer informatie.

U kunt de wijzigingenfeed voor historische items lezen. Deze historische gegevens bevatten de meest recente wijziging die betrekking heeft op het item. De historische gegevens bevatten niet de tussenliggende wijzigingen. U kunt bijvoorbeeld de wijzigingenfeed gebruiken om items te lezen die vijf jaar geleden zijn toegevoegd. De tussenliggende wijzigingen zijn sindsdien echter niet meer te zien. U kunt de wijzigingenfeed lezen tot aan de oorsprong van uw container. Als een item wordt verwijderd, wordt het volledig verwijderd uit de wijzigingenfeed.

Sorteervolgorde van items in wijzigingenfeed

Wijzigingenfeeditems komen binnen in de volgorde van de wijzigingstijd. Deze sorteervolgorde wordt gegarandeerd per logische partitiesleutel.

Consistentieniveau

Het gebruik van de wijzigingenfeed in een consistentieniveau Uiteindelijk kan leiden tot dubbele gebeurtenissen tussen de volgende leesbewerkingen van de wijzigingenfeed. De laatste gebeurtenis van één leesbewerking kan bijvoorbeeld worden weergegeven als de eerste gebeurtenis van de volgende bewerking.

Wijzigingenfeed in Azure Cosmos DB-accounts voor meerdere regio's

Als in een Azure Cosmos DB-account voor meerdere regio's een failover van een schrijfregio wordt uitgevoerd, werkt de wijzigingenfeed via de handmatige failoverbewerking en blijft de feed aaneengesloten.

Wijzigingenfeed en Time to Live (TTL)

Als de eigenschap TTL voor een item -1is ingesteld op , blijft de wijzigingenfeed dat item voor altijd behouden. Als de gegevens niet worden verwijderd, blijven deze in de wijzigingenfeed.

Wijzigingenfeed en _etag, _lsn of _ts

Azure Cosmos DB bevat meerdere interne velden die automatisch worden toegewezen aan een nieuw item. Deze velden zijn belangrijk om te begrijpen in de context van de wijzigingenfeed.

Het _etag veld is intern en u moet er geen afhankelijkheid van nemen, omdat het op elk gewenst moment kan worden gewijzigd. Normaal gesproken wordt het _etag veld gewijzigd wanneer het item wordt gewijzigd. Zie Optimistisch gelijktijdigheidsbeheer voor meer informatie. De _etag waarde van het wijzigingenfeeditem verschilt van de _etag waarde van het oorspronkelijke bronitem. In de context van de wijzigingenfeed wordt de _etag waarde gebruikt om de feed te volgorde.

_ts is een wijziging of een tijdstempel voor het maken. U kunt gebruiken _ts voor chronologische vergelijking.

_lsn is een batch-id die alleen binnen de context van de wijzigingenfeed aan het item wordt toegevoegd. Het _lsn veld bestaat niet in het oorspronkelijke bronitem. In de wijzigingenfeed vertegenwoordigt het veld de transactie-id. Veel items kunnen hetzelfde _lsnhebben.

Werken met wijzigingenfeed

U kunt met wijzigingenfeed werken met behulp van de volgende opties:

Wijzigingenfeed is beschikbaar voor elke logische partitiesleutel in de container en kan worden gedistribueerd over een of meer consumenten voor parallelle verwerking.

Gedistribueerde verwerking van Azure Cosmos DB-wijzigingenfeed

Functies van wijzigingenfeed

  • Wijzigingenfeed is standaard ingeschakeld voor alle Azure Cosmos DB-accounts.

  • U kunt de ingerichte doorvoer gebruiken om te lezen uit de wijzigingenfeed, net als elke andere Azure Cosmos DB-bewerking, in elk van de regio's die zijn gekoppeld aan uw Azure Cosmos DB-database.

  • De wijzigingenfeed bevat invoeg- en updatebewerkingen voor items in de container. U kunt verwijderingen vastleggen door een vlag 'voorlopig verwijderen' in te stellen in uw items (bijvoorbeeld documenten) in plaats van verwijderingen. U kunt ook een eindige verloopperiode instellen voor uw items met de TTL-mogelijkheid. Bijvoorbeeld 24 uur en gebruik de waarde van die eigenschap om verwijderingen vast te leggen. Met deze oplossing moet u de wijzigingen binnen een korter tijdsinterval verwerken dan de TTL-verloopperiode.

  • Alleen de meest recente wijziging voor een bepaald item wordt opgenomen in het wijzigingenlogboek. Tussenliggende wijzigingen zijn mogelijk niet beschikbaar.

  • Elke wijziging in het wijzigingenlogboek wordt precies één keer weergegeven in de wijzigingenfeed en de clients moeten de controlepuntlogica beheren. Als u de complexiteit van het beheer van controlepunten wilt voorkomen, biedt de wijzigingenfeedprocessor automatische controlepunten en 'ten minste eenmaal' semantiek. wijzigingenfeed gebruiken met wijzigingenfeedverwerker.

  • De wijzigingenfeed wordt gesorteerd op de volgorde van wijziging binnen elke waarde van de logische partitiesleutel. Er is geen gegarandeerde volgorde tussen de partitiesleutelwaarden.

  • Wijzigingen kunnen vanaf elk tijdstip worden gesynchroniseerd. Er is geen vaste bewaarperiode voor gegevens waarvoor wijzigingen beschikbaar zijn.

  • Wijzigingen zijn parallel beschikbaar voor alle logische partitiesleutels van een Azure Cosmos DB-container. Met deze mogelijkheid kunnen meerdere gebruikers wijzigingen van grote containers parallel verwerken.

  • Toepassingen kunnen meerdere wijzigingenfeeds op dezelfde container tegelijk aanvragen. ChangeFeedOptions.StartTime kan worden gebruikt om een eerste beginpunt op te geven. Bijvoorbeeld om het vervolgtoken te vinden dat overeenkomt met een bepaalde kloktijd. Het ContinuationToken, indien opgegeven, heeft voorrang op de waarden StartTime en StartFromBeginning. De precisie van ChangeFeedOptions.StartTime is ~5 sec.

Wijzigingenfeed in API's voor Cassandra en MongoDB

De functionaliteit van de wijzigingenfeed wordt weergegeven als wijzigingsstroom in API voor MongoDB en Query met predicaat in API voor Cassandra. Zie de Wijzigingsstromen in de Azure Cosmos DB-API voor MongoDB voor meer informatie over de implementatiedetails voor API voor MongoDB.

Systeemeigen Apache Cassandra biedt Change Data Capture (CDC), een mechanisme om specifieke tabellen te markeren voor het archiveren en weigeren van schrijfbewerkingen naar deze tabellen zodra een configureerbare grootte op schijf voor het CDC-logboek is bereikt. De functie voor wijzigingenfeed in Azure Cosmos DB voor Apache Cassandra verbetert de mogelijkheid om via CQL query's uit te voeren op de wijzigingen met het predicaat. Zie Wijzigingenfeed in Azure Cosmos DB voor Apache Cassandra voor meer informatie over de implementatiedetails.

Verbruik van aanvraageenheden voor wijzigingenfeeds meten

Gebruik Azure Monitor om het verbruik van de aanvraageenheid (RU) van de wijzigingenfeed te meten. Zie Doorvoer of gebruik van aanvraageenheden bewaken in Azure Cosmos DB voor meer informatie.

Volgende stappen

U kunt nu verdergaan met meer informatie over wijzigingenfeed in de volgende artikelen: