MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Was ist der Unterschied zwischen einem changeStream und einem Tailable-Cursor in MongoDB

Streams ändern (verfügbar in MongoDB v3.6+) ist eine Funktion, die es Ihnen ermöglicht, auf Datenänderungen in Echtzeit zuzugreifen, ohne die Komplexität und das Risiko, den oplog . Hauptvorteile von Änderungsströmen über hinter dem oplog stehen:

  1. Nutzen Sie die integrierte rollenbasierte Zugriffskontrolle von MongoDB . Anwendungen können Änderungsströme nur für Sammlungen öffnen, die sie gelesen haben Zugriff auf. Raffinierte und spezifische Zulassung.

  2. Stellen Sie eine gut definierte API bereit, die zuverlässig ist. Die Änderungsereignisse Ausgaben, die von Änderungsströmen zurückgegeben werden, sind gut dokumentiert. Außerdem alle offizielle MongoDB-Treiber befolgen Sie dieselben Spezifikationen bei der Implementierung einer Change-Streams-Schnittstelle.

  3. Änderungsereignisse, die als Teil von Änderungsdatenströmen zurückgegeben werden, werden zumindest für den Großteil des Replikatsatzes festgeschrieben. Dies bedeutet, dass die an den Client gesendeten Änderungsereignisse dauerhaft sind. Anwendungen müssen bei einem Failover kein Daten-Rollback durchführen.

  4. Stellen Sie eine Gesamtreihenfolge von Änderungen über Shards bereit, indem Sie eine globale logische Uhr verwenden. MongoDB garantiert, dass die Reihenfolge der Änderungen beibehalten wird und Änderungsereignisse sicher in der empfangenen Reihenfolge interpretiert werden können. Beispielsweise gibt ein Change-Stream-Cursor, der für einen 3-Shard-Shard-Cluster geöffnet wird, Änderungsereignisse zurück, die die Gesamtreihenfolge dieser Änderungen in allen drei Shards berücksichtigen.

  5. Aufgrund der Ordnungscharakteristik sind auch Änderungsströme von Natur aus wiederaufsetzbar. Die _id von Ereignisausgabe ändern ist ein Lebenslauf-Token. Offizielle MongoDB-Treiber cachen dieses Resume-Token automatisch, und im Falle eines vorübergehenden Netzwerkfehlers wird der Treiber es einmal wiederholen. Darüber hinaus können Anwendungen auch manuell fortgesetzt werden, indem der Parameter resume_after verwendet wird . Siehe auch Änderungsstream fortsetzen .

  6. Verwenden Sie die MongoDB-Aggregationspipeline . Anwendungen können die Ausgabe von Änderungsereignissen ändern. Derzeit sind fünf Pipeline-Stufen verfügbar, um die Ereignisausgabe zu ändern. Beispielsweise können Änderungsereignisausgaben (serverseitig) herausgefiltert werden, bevor sie mit $match-Phase . Siehe Change-Stream-Ausgabe ändern für mehr Informationen.

Wenn Ihre MongoDB-Bereitstellung Version 3.6 oder höher ist, würde ich empfehlen, MongoDB Change Streams zu verwenden, anstatt das Oplog zu verfolgen.

Sie können auch Change Streams-Produktionsempfehlungen finden eine nützliche Ressource.