Ä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 konfigurieren, um Datenänderungen in einem der gesamten Datenbank oder ihren Bereich 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.

Das Ausstellen der DDL, die einen Änderungsstream erstellt, startet einen lang andauernden Wenn es abgeschlossen ist, beginnt der neue Änderungsstream sofort mit der Beobachtung der Tabellen und die ihr zugewiesenen Spalten.

Tabellen und Spalten implizit beobachten

Änderungsstreams, die eine ganze Tabelle beobachten, überwachen implizit alle Spalten in dieser Tabelle, auch wenn die Tabellendefinition aktualisiert wird. Für Wenn Sie z. B. dieser Tabelle neue Spalten hinzufügen, beginnt automatisch, diese neuen Spalten zu beobachten, an der Konfiguration dieses Änderungsstreams vorgenommen wird. In ähnlicher Weise Der Änderungsstream beendet die Beobachtung von Spalten, die entfernt wurden, automatisch aus dieser Tabelle.

Änderungsstreams der gesamten 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 einem und später Spalten hinzufügen, wird der Änderungsstream diese Spalten erst zu beobachten, wenn Sie diese Änderung neu konfigurieren streamen können.

Das Datenbankschema behandelt Änderungsstreams als abhängige Objekte eines beliebigen Spalten oder Tabellen, die sie explizit beobachten. Bevor Sie Spalte oder Tabelle enthält, müssen Sie diese manuell aus der Konfiguration eines Änderungsstreams, der diesen explizit ansieht.

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.

Außerdem werden bei Änderungsstreams keine Schemaänderungen oder Daten beobachtet. die direkt aus Schemaänderungen resultieren. Eine Änderung Beobachtung einer ganzen Datenbank behandelt, wird das Löschen einer Tabelle nicht ändern, obwohl dadurch alle Daten der Tabelle entfernt werden. aus der Datenbank.

So schreibt und speichert Spanner Änderungsstreams

Jedes Mal, wenn Spanner eine Datenänderung in einer Spalte erkennt von einem Änderungsstream beobachtet wird, schreibt er einen Datensatz für die Datenänderung in seine internen Speicher. Dies geschieht synchron mit diesen Daten. innerhalb derselben Transaktion ändern. Spanner bringt das Standort zusammen beide Schreibvorgänge, sodass sie vom selben Server verarbeitet werden, die Schreibverarbeitung minimieren.

Inhalt eines Datenänderungseintrags

Jeder Datensatz für eine Datenänderung, der von einem Änderungsstream geschrieben wird, enthält Folgendes: 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 den von ihnen verfolgten Inhalt, entweder nur die geänderten Spalten oder die gesamte erfasste Zeile, hängt vom vom Nutzer konfigurierten Werterfassungstyp ab.

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

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

  • Der Commit-Zeitstempel

  • Die Transaktions-ID

  • Sequenznummer des Eintrags

  • 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

Ein Änderungsstream speichert seine Datensätze mit Datenänderungen für einen bestimmten Zeitraum zwischen einem und sieben Tagen. Mit DDL können Sie eine andere Beschränkung als die Standardeinstellung von einem Tag, einen Änderungsstream 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

Konfigurationsoption für den Werterfassungstyp eines Änderungsstreams steuert, 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 mit der Gültigkeitsdauer (TTL) Richtlinien festlegen, um regelmäßig Daten aus Spanner-Tabellen zu löschen. 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 haben folgende Möglichkeiten: Filter 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 bietet auch Dataflow-Vorlagen für gängige Anwendungsfälle.

  • 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. Sie können die Spanner API verwenden, um Routenänderungen vorzunehmen streamt Lesevorgänge in einen bestimmten Replikattyp oder eine bestimmte Region innerhalb einer Multiregion Instanzkonfiguration oder eine benutzerdefinierte regionale Konfiguration mit optionalen schreibgeschützte Region(en). 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 nahezu in Echtzeit streamen, aus Änderungsstreams lesen.

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 für Änderungsstreams mit Dataflow 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 Änderungsstreameinträge direkt an ein 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 wird Folgendes 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, muss der Eigentümer der Für einen Dataflow-Job, der Änderungsstreamdaten liest, sind zusätzliche IAM-Berechtigungen, entweder für Ihre Anwendungsdatenbank oder in einer separaten Metadaten-Datenbank; Siehe Metadatendatenbank erstellen.

Nächste Schritte