Änderungsfeedmodi in Azure Cosmos DB
GILT FÜR: NoSQL
Azure Cosmos DB bietet zwei Änderungsfeedmodi. Jeder Modus bietet die gleiche Kernfunktionalität. Zu den Unterschieden gehören die Vorgänge, die im Feed erfasst werden, die Metadaten, die für jede Änderung verfügbar sind, und die Beibehaltungsdauer der Änderungen. Sie können den Änderungsfeed in verschiedenen Modi für mehrere Anwendungen im gleichen Azure Cosmos DB-Container nutzen, um die Anforderungen der einzelnen Workloads zu erfüllen. Jede einzelne Änderungsfeedanwendung kann nur zum Lesen des Änderungsfeeds in einem Modus konfiguriert werden. Die Verwendung des Änderungsfeeds in einem Modus verhindert nicht, dass Sie den Änderungsfeed in einem anderen Modus in einer anderen Anwendung verwenden können.
Hinweis
Liegt Ihnen Feedback zu Änderungsfeedmodi vor? Teilen Sie uns Ihre Meinung mit! Sie können Feedback direkt an das Azure Cosmos DB-Entwicklungsteam senden: cosmoschangefeed@microsoft.com.
Änderungsfeedmodus „Neueste Version“
Der Modus „Neueste Version“ bietet eine persistente Aufzeichnung der Änderungen, die an Elementen aus Erstellungs- und Aktualisierungsvorgängen vorgenommen wurden. Es wird immer die neueste Version eines Elements im Container angezeigt. Wird beispielsweise ein Element erstellt und anschließend aktualisiert, bevor Sie den Änderungsfeed lesen, wird nur die aktualisierte Version im Änderungsfeed angezeigt. Löschvorgänge werden nicht als Änderungen erfasst, d. h. dass gelöschte Elemente nicht mehr im Feed verfügbar sind. Der Änderungsfeedmodus „Neueste Version“ ist standardmäßig aktiviert und mit allen Azure Cosmos DB-Konten kompatibel, mit Ausnahme der API für Tabellen und der API für PostgreSQL. In diesem Modus wurde der Änderungsfeed bisher standardmäßig genutzt.
Änderungsfeedmodus „Alle Versionen und Löschvorgänge“ (Vorschau)
Im Modus „Alle Versionen und Löschvorgänge“ (Vorschau) werden sämtliche Änderungen an Elementen aus Erstellungs-, Aktualisierungs- und Löschvorgängen persistent aufgezeichnet. Sie erhalten einen Eintrag für alle Änderungen in der Reihenfolge, in der sie vorgenommen wurden, einschließlich zwischenzeitlicher Änderungen an einem Element zwischen den Lesevorgängen des Änderungsfeeds. Wird beispielsweise ein Element erstellt und anschließend aktualisiert, bevor Sie den Änderungsfeed lesen, werden sowohl die Erstellungsversion als auch die aktualisierte Version des Elements im Änderungsfeed angezeigt. Wenn Sie den Änderungsfeed im Modus „Alle Versionen und Löschvorgänge“ lesen möchten, müssen Sie für Ihr Azure Cosmos DB-Konto fortlaufende Sicherungen konfiguriert haben. Durch Aktivieren der fortlaufenden Sicherungen wird der Änderungsfeed „Alle Versionen und Löschvorgänge“ erstellt. Wenn Sie Änderungen innerhalb des Zeitraums der fortlaufenden Sicherung lesen möchten, müssen Sie diesen Änderungsfeedmodus verwenden. Dieser Modus ist nur mit Azure Cosmos DB for NoSQL-Konten kompatibel. Erfahren Sie mehr über die Registrierung für die Vorschauversion.
Anwendungsfälle für die Änderungsfeedmodi
Der Modus „Neueste Version“ stellt eine einfache Möglichkeit dar, sowohl Echtzeit- als auch vergangene Änderungen an Elementen in einem Container zu verarbeiten, und dies vom Anfang des Containers an.
Die folgenden Szenarios sind für diesen Modus geeignet:
Migrieren eines gesamten Containers zu einem sekundären Standort.
Erneutes Verarbeiten von Änderungen vom Anfang des Containers an.
Verarbeiten in Echtzeit von Änderungen aus Erstellungs- und Aktualisierungsvorgängen an Elementen in einem Container.
Workloads, die keine Löschvorgänge oder zwischenzeitliche Änderungen zwischen Lesevorgängen erfassen müssen.
Features der einzelnen Modi
Neben den für alle Modi gültigen Features weisen die Änderungsfeedmodi die folgenden Merkmale auf:
Der Änderungsfeed enthält Einfüge- und Aktualisierungsvorgänge an Elementen im Container.
Bei diesem Änderungsfeedmodus werden keine Löschvorgänge protokolliert. Sie können Löschvorgänge durch Kennzeichnen von Elementen mit einem Flag für „vorläufiges Löschen“ erfassen, anstatt sie direkt zu löschen. Sie können dem Element z. B. ein Attribut mit dem Namen
deleted
hinzufügen, dessen Wert auftrue
festgelegt ist, und dann für das Element eine Gültigkeitsdauer (Time to Live, TTL) festlegen. Der Änderungsfeed erfasst dies als Update, und das Element wird nach Ablauf der Gültigkeitsdauer automatisch gelöscht. Alternativ können Sie über die TTL-Funktion einen begrenzten Ablaufzeitraum für die Elemente festlegen. Mit dieser Lösung müssen Sie die Änderungen in einem kürzeren Zeitraum als dem TTL-Ablaufzeitraum verarbeiten.Nur die letzte Änderung für ein bestimmtes Element ist im Änderungsfeed enthalten. Zwischenzeitliche Änderungen sind möglicherweise nicht verfügbar.
Ein gelöschtes Element ist im Änderungsfeed nicht mehr verfügbar.
Änderungen können für jeden Zeitpunkt synchronisiert werden, und es gibt keine feste Datenaufbewahrungsdauer, in der die Änderungen verfügbar sind.
Sie können den Änderungsfeed nicht nach einen bestimmten Vorgangstyp filtern. Als Alternative können Sie für das Element eine „schwache Markierung“ für Aktualisierungen hinzufügen und dies bei der Verarbeitung von Elementen im Änderungsfeed entsprechend filtern.
Der Startpunkt für das Lesen des Änderungsfeeds kann der Anfang des Containers, ein bestimmter Zeitpunkt, „jetzt“ oder ein bestimmter Prüfpunkt sein. Die Genauigkeit der Startzeit beträgt etwa fünf Sekunden.
Verwenden des Änderungsfeeds
Beide Modi sind mit verschiedenen Methoden zum Lesen des Änderungsfeeds für alle Sprachen kompatibel.
Sie können Änderungen aus dem Änderungsfeed im Modus „Neueste Version“ mit den folgenden Methoden verarbeiten:
Methode zum Lesen des Änderungsfeeds | .NET | Java | Python | Node.js |
---|---|---|---|---|
Pullmodell für den Änderungsfeed | Ja | Ja | Ja | Ja |
Change Feed Processor | Ja | Ja | Nr. | Nein |
Auslösen von Azure Functions | Ja | Ja | Ja | Ja |
Analysieren des Antwortobjekts
Im Modus „Neueste Version“ ist das Standardantwortobjekt ein Array der geänderten Elemente. Jedes Element enthält die Standardmetadaten für alle Azure Cosmos DB-Elemente, einschließlich _etag
und _ts
zuzüglich der neuen Eigenschaft _lsn
.
Das Format _etag
ist intern, und da es jederzeit geändert werden kann, sollten Sie keine Abhängigkeit davon erstellen. _ts
ist ein Änderungs- oder Erstellungszeitstempel. Sie können _ts
für chronologische Vergleiche verwenden. _lsn
ist eine Batch-ID, die nur für den Änderungsfeed hinzugefügt wird und die Transaktions-ID darstellt. Viele Elemente können den gleichen Wert für _lsn
aufweisen.
ETag
auf FeedResponse
unterscheidet sich von _etag
, das Sie im Element sehen. _etag
ist ein interner Bezeichner, der für die Parallelitätssteuerung verwendet wird. Die Eigenschaft _etag
stellt die Version des Elements dar, während die Eigenschaft ETag
zum Sequenzieren des Feeds verwendet wird.
Nächste Schritte
Weitere Informationen zu Änderungsfeeds finden Sie in den folgenden Artikeln: