Änderungsstreams – Übersicht

Ein Änderungsstream beobachtet und streamt einen Spanner Datenänderungen der Datenbank – Einfügungen, Aktualisierungen und Löschungen – nahezu in Echtzeit.

Diese Seite bietet eine allgemeine Übersicht über die Spanner-Änderungen Streams: was sie tun und wie sie funktionieren. Um zu erfahren, wie Sie Änderungsstreams in Ihrer Datenbank verwalten und mit anderen finden Sie unter Weitere Informationen.

Zweck von Änderungsstreams

Änderungsstreams bieten eine flexible, skalierbare Möglichkeit, Daten zu streamen Änderungen an anderen Diensten. Zu den häufigsten Anwendungsfällen gehören:

  • Das Replizieren von Spanner-Datenänderungen in ein Data Warehouse, z. B. BigQuery für Analysen

  • Anwendungslogik basierend auf Datenänderungen auslösen, die an eine Nachricht gesendet werden wie z. B. Pub/Sub.

  • Datenänderungen zu Compliancezwecken in Cloud Storage speichern oder Archivierungs- zwecken dienen.

Streamkonfiguration ändern

Spanner behandelt Änderungsstreams als Schemaobjekte, wie Tabellen und Indexe. Daher erstellen, ändern und löschen Sie Änderungen Streams mit DDL-Anweisungen und Sie können die Änderungsstreams genau wie bei anderen DDL-verwalteten Schemas Objekte.

Sie können einen Änderungsstream so konfigurieren, dass Datenänderungen in einer gesamten Datenbank überwacht werden, oder seinen Umfang auf bestimmte Tabellen und Spalten beschränken. A Datenbank mehrere Änderungsstreams und eine bestimmte Tabelle oder Spalte kann sich das Video von mehreren Streams innerhalb eines .

Sie können auch einen Änderungsstream konfigurieren, um eine Datenaufbewahrungsdauer Werterfassungstyp TTL-basierte Löschvorgänge filtern oder Filter für Tabellenänderungen.

Durch das Ausführen der DDL, mit der ein Änderungsstream erstellt wird, wird ein Vorgang mit langer Ausführungszeit gestartet. Nach Abschluss beginnt der neue Änderungsstream sofort, die zugewiesenen Tabellen und Spalten zu beobachten.

Tabellen und Spalten implizit beobachten

Änderungsstreams, die eine gesamte Tabelle beobachten, beobachten implizit alle Spalten in dieser Tabelle, auch wenn die Tabellendefinition aktualisiert wird. Wenn Sie dieser Tabelle beispielsweise neue Spalten hinzufügen, werden diese neuen Spalten automatisch vom Änderungsstream beobachtet, ohne dass die Konfiguration des Änderungsstreams geändert werden muss. In ähnlicher Weise Der Änderungsstream beendet die Beobachtung von Spalten, die entfernt wurden, automatisch aus dieser Tabelle.

Änderungsstreams für die gesamte Datenbank funktionieren auf die gleiche Weise. Sie sehen sich die Inhalte jede Spalte in jeder Tabelle, die automatisch alle Tabellen überwacht, Spalten, die nach der Erstellung des Änderungsstreams hinzugefügt wurden und nicht mehr angesehen werden alle gelöschten Tabellen oder Spalten.

Tabellen und Spalten explizit beobachten

Wenn Sie einen Änderungsstream so konfigurieren, dass nur bestimmte Spalten in einer Tabelle beobachtet werden, und dieser Tabelle später Spalten hinzufügen, werden diese Spalten erst dann vom Änderungsstream beobachtet, wenn Sie den Änderungsstream entsprechend neu konfigurieren.

Das Datenbankschema behandelt Änderungsstreams als abhängige Objekte eines beliebigen Spalten oder Tabellen, die sie explizit beobachten. Bevor Sie eine solche Spalte oder Tabelle löschen können, müssen Sie sie manuell aus der Konfiguration aller Änderungsstreams entfernen, die sie explizit beobachten.

Arten von Datenänderungen, die sich auf die Wiedergabe von Streams auswirken

Die von einem Änderungsstream beobachteten Datenänderungen umfassen alle Einfügungen, Aktualisierungen und Löschungen an den Tabellen und Spalten, die überwacht werden sollen. Diese können Änderungen auf Folgendes zurückzuführen sein:

Änderungsstreams können Datenänderungen nur in von Nutzern erstellten Spalten und Tabellen. Sie beobachten keine Indexe, Ansichten, Änderungsstreams, oder Systemtabellen wie das Informationsschema oder Statistiktabellen enthalten. Ändern Streams beobachten generierte Spalten nur, wenn die Spalte Teil des Primärschlüssel. Primärschlüsselspalten werden immer erfasst.

Darüber hinaus werden in Änderungsstreams keine Schemaänderungen oder Daten beobachtet. die direkt aus Schemaänderungen resultieren. Ein Änderungsstream, der eine ganze Datenbank beobachtet, würde das Löschen einer Tabelle beispielsweise nicht als Datenänderung behandeln, obwohl durch diese Aktion alle Daten dieser Tabelle aus der Datenbank entfernt werden.

So schreibt und speichert Spanner Änderungsstreams

Jedes Mal, wenn Spanner eine Datenänderung in einer Spalte erkennt, die von einem Änderungsstream beobachtet wird, schreibt es einen Datenänderungseintrag in den internen Speicher. Dies geschieht synchron mit der Datenänderung innerhalb derselben Transaktion. Spanner platziert beide Schreibvorgänge an derselben Stelle, damit sie vom selben Server verarbeitet werden. Dadurch wird die Schreibverarbeitung minimiert.

Inhalt eines Datenänderungseintrags

Jeder Änderungseintrag, der von einem Änderungsstream geschrieben wird, enthält folgende Informationen zur Datenänderung:

  • Der Name der betroffenen Tabelle

  • Die Namen, Werte und Datentypen der Primärschlüssel zur Identifizierung der geänderte Zeile

  • Die Namen und Datentypen der Spalten der geänderten Zeile, die Änderungsstream-Definition erfasst.

  • Die alten Werte der Spalten der Zeile. Die Verfügbarkeit der alten Werte und der erfassten Inhalte, also entweder nur der geänderten Spalten oder der gesamten erfassten Zeile, hängt vom vom Nutzer konfigurierten Typ der Datenerfassung ab.

  • Die neuen Werte der Spalten der Zeile. Die Verfügbarkeit der neuen Werte und der Inhalte, die sie erfassen, hängt vom vom Nutzer konfigurierten Typ der Datenerhebung ab.

  • Der Änderungstyp (Einfügen, Aktualisieren oder Löschen)

  • Commit-Zeitstempel

  • Die Transaktions-ID

  • Die Sequenznummer des Datensatzes

  • Der Werterfassungstyp des Datenänderungseintrags.

Weitere Informationen zur Struktur von Datensätzen für Datenänderungen finden Sie unter Datensätze zu Datenänderungen.

Datenaufbewahrung

In einem Änderungsstream werden Datenänderungssätze für einen Zeitraum zwischen einem und sieben Tagen aufbewahrt. Mit DDL können Sie eine andere Beschränkung als die Standardeinstellung von einem Tag, erstellen oder zu einem späteren Zeitpunkt anpassen. Wenn Sie das Limit für die Datenaufbewahrung eines Änderungsstreams reduzieren, werden alle Änderungsdaten, die älter als das neue Limit sind, dauerhaft nicht für die Leser dieses Änderungsstreams verfügbar.

Diese Aufbewahrungsdauer für Daten ist mit Kompromissen verbunden. eine längere Aufbewahrung erfordert einen größeren Speicherbedarf in der Datenbank des Streams.

Werterfassungstyp

Mit der Konfigurationsoption Werterfassungstyp eines Änderungsstreams wird festgelegt, wie die Werte einer geänderten Zeile gespeichert werden. Sie können DDL um einen der folgenden Werterfassungstypen für einen Änderungsstream anzugeben:

  • OLD_AND_NEW_VALUES: Erfasst sowohl den alten als auch den neuen Wert einer geänderten Zeile Spalten.

  • NEW_VALUES: Erfasst nur die neuen Werte der Nicht-Schlüsselspalten, aber keine alten Werte.

  • NEW_ROW: Erfasst alle neuen Werte von beobachteten Spalten, sowohl geänderte als auch unverändert, wenn sich eine dieser Spalten ändert. Es werden keine alten Werte erfasst.

  • NEW_ROW_AND_OLD_VALUES: Erfasst alle neuen Werte sowohl für geänderte als auch unveränderten Spalten und alte Werte für geänderte Spalten.

Löschvorgänge für die Zeit bis zur Gültigkeitsdauer ausschließen

In Spanner können Sie mithilfe der Gültigkeitsdauer (Time to Live, TTL) Richtlinien festlegen, mit denen Daten regelmäßig aus Spanner-Tabellen gelöscht werden. Standardmäßig umfassen Änderungsstreams alle TTL-basierten Löschvorgänge. Sie können exclude_ttl_deletes, um Ihren Änderungsstream so festzulegen, dass TTL-basierte Löschvorgänge ausgeschlossen werden. Wann? legen Sie diesen Filter so fest, dass TTL-basierte Löschvorgänge ausgeschlossen werden. aus dem Änderungsstream ausgeschlossen.

Der Standardwert für diesen Filter ist false. Um TTL-basierte Löschvorgänge auszuschließen, Legen Sie den Filter auf true fest. Sie können den Filter entweder beim Erstellen eines Änderungsstreams hinzufügen oder einen vorhandenen Änderungsstream so ändern, dass er den Filter enthält.

Typ der Tabellenänderung

Standardmäßig umfassen Änderungsstreams alle Tabellenänderungen wie Einfügungen, Aktualisierungen und Löschungen. Sie können eine oder mehrere dieser Tabellenänderungen aus Ihren den Umfang des Streams mithilfe der folgenden verfügbaren Filteroptionen ändern:

  • exclude_insert: Alle INSERT-Tabellenänderungen ausschließen
  • exclude_update: Alle UPDATE-Tabellenänderungen ausschließen
  • exclude_delete: Alle DELETE-Tabellenänderungen ausschließen

Der Standardwert für diese Filter ist false. Um eine bestimmte Art von Tabellenänderung für den Filter true. Sie können eine oder mehrere gleichzeitig filtern.

Sie können einen Filter für einen Tabellenänderungstyp hinzufügen. wenn Sie einen Änderungsstream oder Filter für einen Tabellenänderungstyp ändern für einen vorhandenen Änderungsstream.

Änderungsstreams lesen

Spanner bietet mehrere Möglichkeiten, die Daten eines Änderungsstreams zu lesen:

  • Über Dataflow mit dem Apache Beam SpannerIO-Connector Dies ist unsere empfohlene Lösung für die meisten Change-Stream-Anwendungen. Google stellt auch Dataflow-Vorlagen für gängige Anwendungsfälle bereit.

  • Direkt mithilfe der Spanner API. Dadurch wird die Abstraktion und Funktionen von Dataflow-Pipelines für maximale und Flexibilität.

  • Mit dem Debezium-basierten Kafka-Connector für Spanner-Änderungsstreams. Dieser Connector streamt Änderungseinträge direkt in Kafka-Themen.

Sie können für Änderungsstreams Lesevorgänge mit gezielter Isolierung gelesen wird. Mit gerichteten Lesevorgängen können die Auswirkungen auf Transaktionsarbeitslasten in in Ihrer Datenbank. Mit der Spanner API können Sie Lesevorgänge von Änderungsstreams an einen bestimmten Replikatyp oder eine bestimmte Region innerhalb einer multiregionalen Instanzkonfiguration oder einer benutzerdefinierten regionalen Konfiguration mit optionalen schreibgeschützten Regionen weiterleiten. Weitere Informationen finden Sie unter gerichtete Lesevorgänge.

Dataflow verwenden

Verwenden Sie den Apache Beam SpannerIO-Connector. zum Erstellen von Dataflow-Pipelines, die Änderungsstreams lesen. Nachher konfigurieren Sie den Connector mit Details Änderungsstreams ermittelt, werden automatisch neue Daten Datensätze in eine einzige, unbegrenzte PCollection das zur weiteren Verarbeitung durch nachfolgende Transformationen im Dataflow-Pipeline

Dataflow verwendet Windowing-Funktionen, um unbegrenzte Sammlungen in logische Komponenten oder Fenster. Daher bietet Dataflow ein nahezu Echtzeit-Streaming, wenn aus Änderungsstreams gelesen wird.

Google stellt Vorlagen zur Verfügung, mit denen Sie Dataflow-Pipelines für gängige Anwendungsfälle von Änderungsstreams, z. B. das Senden aller Datenänderungen eines Streams an einen in BigQuery oder kopieren Sie in ein Cloud Storage-Bucket.

Für eine detailliertere Übersicht über Änderungsstreams und Dataflow finden Sie unter Verbindungsaufbau mit Dataflow für Änderungsstreams erstellen.

API verwenden

Als Alternative zur Verwendung von Dataflow zum Erstellen eines Änderungsstreams Pipelines können Sie stattdessen Code schreiben, der die Spanner API verwenden, um die Datensätze eines Änderungsstreams direkt zu lesen. So können Sie Änderungseinträge auf dieselbe Weise lesen wie der Der SpannerIO-Connector tut dies und verzichtet auf die Abstraktion, die er bietet Austausch für geringstmögliche Latenzen beim Lesen des Änderungsstreams Daten.

Weitere Informationen finden Sie unter Änderungsstreams für Abfragen. Für eine detailliertere Diskussionen über das Abfragen von Änderungsstreams und die Interpretation der Datensätze erhalten Sie unter Partitionen, Datensätze und Abfragen von Änderungsstreams ändern.

Kafka-Connector verwenden

Der Kafka-Connector gibt Änderungsstream-Eintragsdaten direkt in einem Kafka-Thema aus. Sie abstrahiert die Details von Änderungsstreams mithilfe von die Spanner API erstellen.

Weitere Informationen zur Funktionsweise von Änderungsstreams und dem Kafka-Connector Weitere Informationen zum Erstellen von Verbindungen mit dem Kafka-Connector für Änderungsstreams

Limits

Für Änderungsstreams gelten mehrere Beschränkungen, unter anderem die maximale Anzahl von Änderungsstreams, die eine Datenbank haben kann, und die maximale Anzahl von Streams die eine einzelne Spalte beobachten kann. Eine vollständige Liste finden Sie unter Stream ändern .

Berechtigungen

Für Änderungsstreams werden folgende Elemente verwendet:

  • Zum Erstellen, Aktualisieren oder Löschen von Änderungsstreams müssen spanner.databases.updateDdl

  • Zum Lesen der Daten eines Änderungsstreams ist spanner.databases.select erforderlich.

Wenn Sie den SpannerIO-Connector verwenden, benötigt der Eigentümer des Dataflow-Jobs, der Änderungsstream-Daten liest, zusätzliche IAM-Berechtigungen, entweder für Ihre Anwendungsdatenbank oder für eine separate Metadatendatenbank. Weitere Informationen finden Sie unter Metadatendatenbank erstellen.

Nächste Schritte