Änderungsstreams – Übersicht

Ein Änderungsstream überwacht und streamt die Datenänderungen einer Spanner-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. Wie Sie Änderungsstreams in Ihrer Datenbank erstellen und verwalten und mit anderen Diensten verknüpfen, erfahren Sie unter Nächste Schritte.

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

  • Auslösen der Anwendungslogik basierend auf Datenänderungen, die an eine Nachrichtenwarteschlange gesendet werden, 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. Eine Datenbank kann mehrere Änderungsstreams haben und eine bestimmte Tabelle oder Spalte kann innerhalb der Limits von mehreren Streams beobachtet werden.

Sie können einen Änderungsstream auch so konfigurieren, dass ein Datenerhaltszeitraum, ein Typ der Datenerfassung, TTL-basierte Löschungen gefiltert oder Tabellenänderungsfilter festgelegt wird.

Durch das Ausführen der DDL, mit der ein Änderungsstream erstellt wird, wird ein Vorgang mit langer Ausführungszeit gestartet. Wenn es abgeschlossen ist, beginnt der neue Änderungsstream sofort mit der Beobachtung der Tabellen und die ihr zugewiesenen Spalten.

Implizit Tabellen und Spalten 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 mit der Überwachung der neuen Spalten, ohne dass an der Konfiguration dieses Änderungsstreams vorgenommen wird. Ebenso werden alle Spalten, die aus dieser Tabelle gelöscht werden, automatisch aus dem Änderungsstream entfernt.

Änderungsstreams für die gesamte Datenbank funktionieren auf die gleiche Weise. Sie beobachten implizit jede Spalte in jeder Tabelle und überwachen automatisch alle Tabellen oder Spalten, die nach dem Erstellen des Änderungsstreams hinzugefügt wurden. Tabellen oder Spalten, die gelöscht wurden, werden nicht mehr beobachtet.

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 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 Änderungen können folgende Ursachen haben:

Änderungsstreams können nur Datenänderungen in von Nutzern erstellten Spalten und Tabellen beobachten. Sie überwachen keine Indexes, Ansichten, anderen Änderungsstreams oder Systemtabellen wie das Informationsschema oder Statistiktabellen. Für Änderungsstreams werden generierte Spalten nur beobachtet, wenn die Spalte Teil des Primärschlüssels ist. Primärschlüsselspalten werden immer erfasst.

Außerdem werden in Änderungsstreams keine Schemaänderungen oder Datenänderungen beobachtet, die direkt aus Schemaänderungen resultieren. Eine Änderung Beobachtung einer ganzen Datenbank behandelt, würde 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, die von einem Änderungsstream beobachtet wird, schreibt es einen Datenänderungsdatensatz in den internen Speicher. Das Schreiben der Datenänderung und der Datenänderungsdatensatz werden in derselben Transaktion geschrieben. Spanner fasst beide Schreibvorgänge zusammen, sodass sie vom selben Server verarbeitet, wodurch die Schreibverarbeitung minimiert wird. Die Transaktion ist werden dann in den Replikaten der Datenbank repliziert, Speicher- und Replikationskosten. Weitere Informationen finden Sie unter Spanner-Preise.

Inhalt eines Datenänderungseintrags

Jeder Datenänderungseintrag, der von einem Änderungsstream geschrieben wird, enthält die folgenden 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 gemäß der Definition des Änderungsstreams erfasst wurden.

  • Die alten Werte der Spalten der Zeile. Die Verfügbarkeit der alten Werte und den von ihnen erfassten 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

  • Transaktions-ID

  • Die Sequenznummer des Datensatzes

  • Der Werterfassungstyp des Datenänderungssatzes.

Weitere Informationen zur Struktur von Datenänderungseinträgen finden Sie unter Datenänderungseinträge.

Datenaufbewahrung

Ein Änderungsstream speichert seine Datensätze mit Datenänderungen für einen bestimmten Zeitraum zwischen einem und sieben Tagen. Sie können DDL für Folgendes verwenden: 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 die Datenbank des Streams.

Werterfassungstyp

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

  • OLD_AND_NEW_VALUES: Erfasst sowohl alte als auch neue Werte der geänderten Spalten einer Zeile.

  • NEW_VALUES: Es werden nur die neuen Werte der nicht-Schlüsselspalten erfasst, 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 enthalten Änderungsstreams alle TTL-basierten Löschvorgänge. Mit exclude_ttl_deletes können Sie Ihren Änderungsstream so konfigurieren, 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. Wenn Sie TTL-basierte Löschungen ausschließen möchten, 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.

Art der Tabellenänderung

Standardmäßig umfassen Änderungsstreams alle Tabellenänderungen wie Einfügungen, Aktualisierungen und Löschungen. Mit den folgenden Filteroptionen können Sie eine oder mehrere dieser Tabellenänderungen aus dem Gültigkeitsbereich Ihres Änderungsstreams herausfiltern:

  • 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 für Tabellenänderungen setzen Sie den Filter auf true. Sie können einen oder mehrere Filter gleichzeitig festlegen.

Sie können beim Erstellen eines Änderungsstreams einen Filter für einen Tabellenänderungstyp hinzufügen oder den Filter für einen Tabellenänderungstyp für einen vorhandenen Änderungsstream ändern.

Änderungsstreams lesen

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

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

  • Direkt über die 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 gezielten Lesezugriffen können Sie die Auswirkungen auf transaktionale Arbeitslasten in Ihrer Datenbank minimieren. Sie können die Spanner API verwenden, um Routenänderungen vorzunehmen streamt Lesevorgänge in einen bestimmten Replikattyp oder eine bestimmte Region innerhalb eines multiregionalen Standorts Instanzkonfiguration oder eine benutzerdefinierte regionale Konfiguration mit optionaler schreibgeschützte Region(en). Weitere Informationen finden Sie unter gerichtete Lesevorgänge.

Dataflow verwenden

Verwenden Sie den Apache Beam SpannerIO-Connector, um Dataflow-Pipelines zu erstellen, die Daten aus Ä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

In Dataflow werden Windowing-Funktionen verwendet, um unbegrenzte Sammlungen in logische Komponenten oder Fenster zu unterteilen. 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

Anstatt Dataflow zum Erstellen von Änderungsstream-Pipelines zu verwenden, können Sie stattdessen Code schreiben, der die Spanner API verwendet, 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. Weitere Informationen zum Abfragen von Änderungsstreams und zum Interpretieren der zurückgegebenen Datensätze finden Sie unter Änderungsstream-Partitionen, -Datensätze und -Abfragen.

Kafka-Connector verwenden

Der Kafka-Connector gibt Änderungsstream-Eintragsdaten direkt in ein Kafka-Thema aus. Sie abstrahiert die Details der Abfrage von Änderungsstreams mit der Spanner API.

Weitere Informationen zur Zusammenarbeit von Änderungsstreams und dem Kafka-Connector finden Sie unter Verbindungen von Änderungsstreams mit dem Kafka-Connector erstellen.

Limits

Für Änderungsstreams gelten mehrere Einschränkungen, darunter die maximale Anzahl von Änderungsstreams, die eine Datenbank haben kann, und die maximale Anzahl von Streams, die eine einzelne Spalte beobachten können. 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, 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