Kontinuierliche materialisierte Ansichten
Dieses Dokument bietet einen Überblick über kontinuierliche materialisierte Ansichten und gängige Anwendungsfälle dafür. Bevor Sie diese Seite lesen, sollten Sie sich mit der Bigtable-Übersicht vertraut machen.
In Bigtable ist eine kontinuierliche materialisierte Ansicht das Ergebnis eines kontinuierlichen, vollständig verwalteten Hintergrundprozesses. Bei diesem Prozess wird eine von Ihnen bereitgestellte SQL-Abfrage verwendet, um eine vorberechnete Tabelle zu erstellen und zu verwalten, die von Bigtable inkrementell aktualisiert wird, wenn sich die Quelldaten ändern. Die SQL-Abfrage kann Aggregationen und Transformationen für die zugrunde liegende Bigtable-Tabelle enthalten.
Daten in einer kontinuierlichen materialisierten Ansicht umfassen Folgendes:
- Aggregierte oder transformierte Werte, die aus Daten in der Quelltabelle abgeleitet werden
- Nicht aggregierte Werte, die den Gruppierungsschlüssel definieren
Mit kontinuierlichen materialisierten Ansichten können Sie Ihre Daten beim Aufnehmen vorab aggregieren. Außerdem hat eine kontinuierliche materialisierte Ansicht ein anderes Schema als ihre Quelltabelle. Die Daten der Quelltabelle werden in einer Struktur dargestellt, die für Abfragen mit anderen Suchmustern als die in der Quelltabelle verwendeten Abfragen optimiert ist.
Kontinuierliche materialisierte Ansichten in Bigtable haben folgende Hauptmerkmale:
- Keine Wartung: Eine kontinuierlich aktualisierte materialisierte Ansicht wird im Hintergrund vorberechnet. Datenänderungen an der Quelltabelle, einschließlich Aktualisierungen und Löschungen, werden automatisch im Hintergrund an die kontinuierliche materialisierte Ansicht weitergegeben, ohne dass der Nutzer eingreifen muss.
- SQL-Entwicklungsmuster: Kontinuierlich aktualisierte materialisierte Ansichten basieren auf GoogleSQL für Bigtable-Abfragen, einschließlich SQL-Funktionen, Filtern und Aggregationen. Die Funktionen sind standardmäßig deterministisch. Für eingeschränkte Anwendungsfälle können Sie jedoch eine ausgewählte Gruppe von nicht deterministischen Funktionen verwenden.
- Synchronisierung mit der automatischen Speicherbereinigung: Eine kontinuierliche materialisierte Ansicht bleibt mit den Richtlinien für die automatische Speicherbereinigung der Quelltabelle synchronisiert und wird automatisch aktualisiert, wenn Tabellendaten ablaufen oder gelöscht werden.
- Lese- und Schreiblatenz sind nicht betroffen: Eine kontinuierliche materialisierte Ansicht hat minimale Auswirkungen auf die Leistung der Quelltabelle, wenn die Cluster der Instanz ausreichend bereitgestellt sind oder Autoscaling verwenden.
- Letztendlich konsistent: Kontinuierliche materialisierte Ansichten werden im Hintergrund berechnet. Aktualisierungen einer kontinuierlichen materialisierten Ansicht können sich verzögern, aber die kontinuierlichen materialisierten Ergebnisse sind im Laufe der Zeit immer konsistent.
Der Zeilenschlüssel, der Spaltenqualifizierer und die Spaltenwerte, die Sie zum Definieren einer kontinuierlichen materialisierten Ansicht verwenden, werden als Dienstdaten behandelt. Erstellen Sie daher keine kontinuierliche materialisierte Ansicht mit Zeilenschlüsseln, Spaltenqualifizierern oder Spaltenwerten, die vertrauliche Informationen enthalten. Informationen zum Umgang mit Dienstdaten finden Sie in den Datenschutzhinweisen fürGoogle Cloud .
Sie können eine kontinuierliche materialisierte Ansicht mit der Google Cloud CLI, dem Bigtable Studio-Abfrageeditor in der Google Cloud -Konsole oder den Bigtable-Clientbibliotheken für Java und Go erstellen.
So können Sie aus einer kontinuierlichen materialisierten Ansicht lesen:
- Bigtable Studio-Abfrageeditor
- Die Bigtable-Clientbibliotheken, die SQL-Abfragen unterstützen
ReadRows-API-Aufruf mit den Bigtable-Clientbibliotheken für Java und Go
Weitere Informationen finden Sie unter Aus einer kontinuierlichen materialisierten Ansicht lesen.
Wann kontinuierliche materialisierte Ansichten verwendet werden sollten
Mit kontinuierlich aktualisierten materialisierten Ansichten können Sie eine neue Darstellung Ihrer Bigtable-Daten mithilfe von SQL definieren. Nach der Erstellung werden die Daten aus der Quelltabelle kontinuierlich und automatisch in das durch die SQL-Abfrage definierte Format umstrukturiert. Anstatt die Tabelle abzufragen und die Daten nach dem Lesen zu transformieren oder zu aggregieren, können Sie dann die kontinuierliche materialisierte Ansicht abfragen.
Kontinuierliche materialisierte Ansichten können die Abfrageleistung für die folgenden Anwendungsfälle verbessern:
- Datenvoraggregation: Sie können eine kontinuierliche materialisierte Ansicht verwenden, um eingehende Daten über Zeilen hinweg zu aggregieren. So können Sie zusammengefasste und aggregierte Daten, z. B. Messwerte für Dashboards, schnell abrufen.
- Automatisierung von Lambda- und Kappa-Architekturen: Wenn Ihre Anwendung eine Mischung aus Echtzeit-Streaming-Pipelinedaten und Batch-Pipelinedaten mit Verlaufsdaten erfordert, verwenden Sie kontinuierliche materialisierte Ansichten. Diese Ansichten bieten eine Ansicht aller Datenquellen, die im Laufe der Zeit aktualisiert wird, um Änderungen an den zugrunde liegenden Daten widerzuspiegeln, ohne dass zusätzliche Streamverarbeitungstools oder benutzerdefinierte ETL-Jobs erforderlich sind.
- Sekundäre Zugriffsmuster: Kontinuierliche materialisierte Ansichten erstellen eine alternative Darstellung Ihrer Daten. Diese Darstellung kann für Abfragen mit anderen Suchmustern als die in der Quelltabelle verwendeten Abfragen optimiert werden. Das macht kontinuierliche materialisierte Ansichten zu einem leistungsstarken Tool, mit dem Sie einen asynchronen sekundären Index für Ihre Daten erstellen können. Weitere Informationen zu diesen Mustern finden Sie unter Asynchronen sekundären Index erstellen.
Informationen zum Vergleichen von kontinuierlichen materialisierten Ansichten mit anderen Arten von Bigtable-Ansichten finden Sie unter Tabellen und Ansichten.
Wann Zähler verwendet werden sollten
Eine weitere Möglichkeit, Ihre Daten vorab zu aggregieren, besteht darin, verteilte Zähler mit Aggregatzellen zu erstellen.
Schreibvorgänge in aggregierte Zellen sind sofort aus dem Cluster lesbar, in den sie geschrieben werden. Kontinuierliche materialisierte Ansichten werden verarbeitet, nachdem Daten geschrieben wurden, und werden schließlich mit der Quelltabelle konsistent.
Verwenden Sie in den folgenden Fällen Zähler anstelle von kontinuierlichen materialisierten Ansichten:
- Aggregationen, die keine Filter erfordern und nicht zeilenübergreifend sein müssen.
- Wenn Sie Ihre Schreibvorgänge sofort aus dem Cluster lesen müssen, in den sie geschrieben werden.
Verwenden Sie kontinuierliche materialisierte Ansichten, wenn Sie Folgendes tun möchten:
- Generieren Sie einen anderen Schlüssel für Abfragen für Ihre Aggregationen.
- Änderungen an der Basistabelle werden in Ihren Aggregationen berücksichtigt.
- Daten aus mehreren Zeilen automatisch kombinieren.
Verwenden Sie eine Kombination aus Zählern und kontinuierlichen materialisierten Ansichten für Anwendungsfälle wie die folgenden:
- Erfassen Sie neue Messwerte in einer aggregierten Zelle, behalten Sie aber die Verlaufs-Roll-ups dieser Messwerte bei.
- Messwerte in einer kontinuierlichen materialisierten Ansicht kombinieren.
Ressourcenbereitstellung und Leistung
Die laufende Verarbeitung für kontinuierliche materialisierte Ansichten erfolgt als Hintergrundjob mit niedriger Priorität. Daher hat es nur minimale Auswirkungen auf die Anwendungsleistung und die Lese- und Schreiblatenz der Quelltabelle, sofern Ihre Cluster ausreichend dimensioniert sind.
Als Best Practice, um sicherzustellen, dass die Daten in der kontinuierlichen materialisierten Ansicht aktuell bleiben, aktivieren Sie Autoscaling für die Cluster in der Instanz, die Ihre kontinuierliche materialisierte Ansicht enthält. Beim Autoscaling werden automatisch genügend Knoten hinzugefügt, um den Verarbeitungsaufwand zu bewältigen. Anschließend werden sie entfernt, wenn sie nicht mehr benötigt werden. So ist während der Ausführung der kontinuierlich ausgeführten SQL-Abfrage genügend Rechenkapazität verfügbar. Mit Autoscaling können Sie auch dafür sorgen, dass Sie genügend Knoten haben, um den Speicherbedarf Ihrer kontinuierlichen materialisierten Ansichten zu decken.
Kontinuierliche materialisierte Ansichten werden auf das Limit von 1.000 Tabellen pro Instanz angerechnet.
Kontinuierliche materialisierte Ansichten für vorhandene Tabellen erstellen
Wenn Sie eine kontinuierliche materialisierte Ansicht für eine vorhandene Tabelle erstellen, startet Bigtable einen einmaligen Prozess, bei dem die Ansicht mit vorhandenen Tabellendaten gefüllt wird. Dieser Vorgang wird als Erstbefüllung bezeichnet. Die für die anfängliche Befüllung erforderliche Zeit hängt von der Größe der Tabelle und der Komplexität der Abfrage ab. Standardmäßig können Sie die Ansicht während der ersten Befüllung nicht abfragen. Wenn Ihr Anwendungsfall jedoch unvollständige Daten zulässt, z. B. während der Anwendungsentwicklung, können Sie den Abfragehinweis allow_incomplete_view verwenden, um die Ansicht abzufragen, bevor die Befüllung abgeschlossen ist. Wenn die Ansicht während dieser Zeit eine Aggregation durchführt, spiegeln die zurückgegebenen Aggregate möglicherweise nur einen Teil der Daten wider. Weitere Informationen finden Sie unter Daten während der ersten Befüllung lesen.
Diese erste Befüllung wird als Hintergrundjob mit niedriger Priorität ausgeführt, um die Auswirkungen auf die Leistung Ihres Clusters zu minimieren. Bei großen Tabellen können Sie Ihrem Cluster vorübergehend weitere Knoten hinzufügen, um die Erstellung der Ansicht zu beschleunigen.
Das folgende Diagramm zeigt den Prozess zum Erstellen kontinuierlicher materialisierter Ansichten:
Angenommen, Ihre Quelltabelle enthält Zeilen mit Schlüsseln, die dem Muster advertiser_id#region#ad_id entsprechen, und eine Spaltenfamilie data, die einen Spaltenqualifizierer spend_usd mit numerischen Daten enthält, die die Werbeausgaben darstellen:
| Zeilenschlüssel | data:spend_usd |
|---|---|
adv1#us-east#ad1 |
100 |
adv1#us-west#ad2 |
150 |
adv2#us-east#ad3 |
200 |
Wenn Sie die folgende Abfrage verwenden, um eine kontinuierliche materialisierte Ansicht dieser Tabelle zu definieren, dauert die anfängliche Befüllung mit 1 TB Daten in einem Cluster mit 175 Knoten etwa drei Stunden.
SELECT
SPLIT(_key, "#")[SAFE_OFFSET(0)] AS advertiser_id,
count(*) AS count,
sum(cast(cast(data['spend_usd'] as string) as int64)) as sum_spend
FROM `$0`
GROUP BY advertiser_id
Da Bigtable linear skaliert, verarbeitet ein Cluster mit 175 Knoten 2 TB Daten in etwa sechs Stunden und 10 TB in etwa 30 Stunden, sofern die Daten eine ähnliche Form haben. Um die für die anfängliche Befüllung erforderliche Zeit zu verkürzen, können Sie Ihrem Cluster vorübergehend weitere Knoten hinzufügen oder, wenn Sie Autoscaling verwenden, die maximale Knotenanzahl vorübergehend erhöhen.
Nicht deterministische SQL-Funktionen
Standardmäßig unterstützen kontinuierliche materialisierte Ansichten nur deterministische Funktionen, um konsistente Ergebnisse über alle Cluster in einer Instanz hinweg zu gewährleisten. Sie können jedoch nicht deterministische Funktionen wie CLUSTER_ATTRIBUTE() verwenden, um Daten nach dem Cluster zu filtern, der sie verarbeitet. Weitere Informationen finden Sie unter Nicht deterministische Abfragen.
Wenn Sie diese Funktionen verwenden möchten, müssen Sie beim Erstellen der kontinuierlichen materialisierten Ansicht potenzielle semantische Unterschiede bestätigen. Weitere Informationen finden Sie unter Kontinuierliche materialisierte Ansicht erstellen.
Speicher
Für jede kontinuierliche materialisierte Ansicht speichert Bigtable Folgendes:
- Die Daten in der kontinuierlichen materialisierten Ansicht
- Zwischenspeicher
Wie jede Bigtable-Tabelle ist eine kontinuierliche materialisierte Ansicht in allen Clustern der Instanz vorhanden, die sie enthält. Die Cluster in Ihrer Instanz müssen genügend Knoten haben, um die Quelltabelle und alle kontinuierlichen materialisierten Ansichten zu speichern, die auf der Tabelle basieren. Mit Autoscaling können Sie die Größe Ihrer Cluster je nach Speicherbedarf erhöhen oder verringern.
Eine kontinuierliche materialisierte Ansicht muss in derselben Instanz wie die Quelltabelle erstellt werden, obwohl der Speicher für die kontinuierliche materialisierte Ansicht von der Quelltabelle getrennt ist.
Speicher für kontinuierliche materialisierte Ansichten
Eine kontinuierliche materialisierte Ansicht enthält Daten, die aus der SQL-Abfrage resultieren, auf der die kontinuierliche materialisierte Ansicht basiert. Das bedeutet, dass sie aggregierte Werte enthält, die durch Aggregationsklauseln in der SQL-Abfrage definiert sind, und nicht aggregierte Werte, die den Gruppierungsschlüssel definieren.
Zwischenspeicher
Um die Synchronisierung einer kontinuierlichen materialisierten Ansicht mit ihrer Quelltabelle zu unterstützen, verwendet Bigtable einen Zwischenspeicher, um Kopien der Daten zu speichern, die für die inkrementelle Aktualisierung der kontinuierlichen materialisierten Ansicht erforderlich sind.
Die Datenmenge im Zwischenspeicher entspricht in etwa der Datenmenge, die in der Quelltabelle gescannt wird, um das Ergebnis der SQL-Abfrage zu generieren, die die kontinuierliche materialisierte Ansicht definiert. Wenn Ihre Abfrage beispielsweise Daten über die gesamte Tabelle hinweg aggregiert, speichert Bigtable das Äquivalent der gesamten Tabelle im Zwischenspeicher. Bei einer kontinuierlichen materialisierten Ansicht, die auf einer Abfrage bestimmter Zeilenschlüsselbereiche oder Spalten basiert, werden nur diese Zeilen oder Spalten im Zwischenspeicher aufbewahrt.
Der Zwischenspeicher bleibt für die Lebensdauer der kontinuierlichen materialisierten Ansicht erhalten, um inkrementelle Aktualisierungen der Ansicht effizient zu unterstützen und Löschvorgänge aus der Quelltabelle an die kontinuierliche materialisierte Ansicht weiterzugeben. Sie können die Daten im Zwischenspeicher nicht lesen. Informationen zur Speichernutzung im Zwischenspeicher finden Sie unter Messwerte für kontinuierliche materialisierte Ansichten.
Replikation
In Instanzen, die Replikation verwenden, werden kontinuierliche materialisierte Ansichten nicht auf dieselbe Weise wie Tabellen repliziert. Stattdessen verarbeitet jeder Cluster in einer Instanz die kontinuierliche materialisierte Ansicht unabhängig und verwendet eine eigene Kopie der Quelltabelle. Das bedeutet beispielsweise, dass Daten, die in eine Quelltabelle in Cluster A geschrieben werden, in die Tabelle in Cluster B und dann in die kontinuierliche materialisierte Ansicht in Cluster B repliziert werden.
Kosten
Für die Verwendung kontinuierlicher materialisierter Ansichten fallen keine Kosten pro Ressource an. Für das Erstellen und Synchronisieren von kontinuierlichen materialisierten Ansichten sind jedoch Verarbeitungs- und Speicherkapazitäten erforderlich, die zu den Standardtarifen abgerechnet werden. Wenn Sie eine kontinuierliche materialisierte Ansicht erstellen, können Sie mit einer Erhöhung der folgenden Werte rechnen:
- Speicher: Ihnen werden die Kosten für das Speichern der Daten in der kontinuierlichen materialisierten Ansicht und für die Zwischenspeicherung in Rechnung gestellt. Weitere Informationen finden Sie unter Speicher.
- Computing: Die laufende Synchronisierung der Quelltabelle und der kontinuierlichen materialisierten Ansicht erfordert CPU-Verarbeitung. Ihre Cluster benötigen möglicherweise mehr Knoten, um die zusätzliche Hintergrundarbeit zu bewältigen.
Gleichzeitig kann die Verarbeitung der Quelltabelle abnehmen, z. B. wenn Sie keine Bereichsscans der Daten mehr durchführen, um wiederholte Berechnungen und andere weniger effiziente Abfragen auszuführen. Möglicherweise müssen Sie auch keine Pipelinejobs wie Dataflow oder Spark mehr ausführen, um Quelldaten zu aggregieren und zurück in Bigtable zu schreiben.
Weitere Informationen zu den Preisen finden Sie unter Bigtable-Preise. Messwerte, mit denen Sie die Nutzung Ihrer kontinuierlichen materialisierten Ansichten überwachen können, finden Sie unter Messwerte.
Messwerte
Eine kontinuierliche materialisierte Ansicht meldet mehrere wichtige Messwerte an Cloud Logging, mit denen Sie Ihre kontinuierlichen materialisierten Ansichten überwachen können.
| Messwert | Beschreibung |
|---|---|
materialized_view/max_delay |
Obergrenze der Verarbeitungsverzögerung für die kontinuierliche materialisierte Ansicht |
materialized_view/storage |
Datenmenge, die für die Speicherung der kontinuierlichen materialisierten Ansicht verwendet wird, in Byte |
materialized_view/intermediate_storage |
Datenmenge, die von der Zwischenverarbeitung für die kontinuierliche materialisierte Ansicht verwendet wird, in Byte |
table/materialized_view_intermediate_storage |
Datenmenge, die für die Zwischenverarbeitung für kontinuierliche materialisierte Ansichten verwendet wird, die für diese Tabelle definiert sind |
materialized_view/user_errors |
Anzahl der Fehler aus Nutzerdaten für die kontinuierliche materialisierte Ansicht. Nutzerfehler verhindern, dass Daten in die Ansicht übertragen werden. |
materialized_view/system_errors |
Anzahl der Systemfehler für die kontinuierliche materialisierte Ansicht |
Sie können auch viele Bigtable-Tabellenmesswerte verwenden, um eine kontinuierliche materialisierte Ansicht zu überwachen. Verwenden Sie dazu die ID der kontinuierlichen materialisierten Ansicht anstelle der Tabellen-ID. Insbesondere sind kontinuierliche materialisierte Ansichten in der Aufschlüsselung für CPU-Messwerte enthalten, was Ihnen helfen kann, ihre Auswirkungen zu verstehen. Bigtable-Messwerte für Anfragen pro Sekunde, Latenz und Durchsatz werden generiert, wenn Sie eine kontinuierliche materialisierte Ansicht mit der Methode ReadRows der Data API lesen. Weitere Informationen finden Sie unter „Messwerte“.
Informationen zu den ersten Schritten mit Cloud Logging finden Sie unter Logs abfragen und ansehen.
Beschränkungen
- Sie können bis zu 50 kontinuierliche materialisierte Ansichten pro Instanz erstellen.
- Sie können bis zu 5 kontinuierliche materialisierte Ansichten pro Tabelle erstellen. Bei Bedarf können Sie eine Erhöhung dieses Limits über Cloud Customer Care anfordern.
- Wenn Sie eine Ansicht ohne Angabe von
_keyerstellen, dürfen die ausgewählten Spalten in der Quelltabelle nichtNULLsein. Weitere Informationen finden Sie unter Zeilenschlüssel, die durch die KlauselGROUP BYoderORDER BYdefiniert werden. - Sie können die SQL-Abfrage, die eine kontinuierlich aktualisierte materialisierte Ansicht definiert, nicht ändern. Sie müssen die kontinuierliche materialisierte Ansicht löschen und eine neue mit Ihren Änderungen erstellen.
- Sie können keine kontinuierliche materialisierte Ansicht einer anderen kontinuierlichen materialisierten Ansicht oder einer logischen Ansicht erstellen.
- Die Abfrage, die eine kontinuierliche materialisierte Ansicht definiert, kann
SELECT *nicht verwenden. - Sie können keine Richtlinien für die automatische Speicherbereinigung für eine kontinuierliche materialisierte Ansicht konfigurieren. Die gesamte Datenaufbewahrung unterliegt den Richtlinien für die automatische Speicherbereinigung für die Quelltabelle. Die automatische Speicherbereinigung der Quelle wird automatisch in der kontinuierlichen materialisierten Ansicht widergespiegelt.
- Sie können keine kontinuierlichen materialisierten Ansichten für Tabellen mit Mikrosekunden-Zeitstempel-Detaillierungsgrad erstellen.