Werte bei der Schreibzeit zusammenfassen
Wenn Sie einen Zähler erstellen oder Ihre Daten in Bigtable beim Schreiben zusammenfassen möchten, können Sie Summenfunktionen verwenden. Aggregate sind Bigtable-Tabellenzellen, in denen Zellenwerte beim Schreiben der Daten zusammengefasst werden. Wenn Sie einen neuen Wert hinzufügen, wird er mit dem zusammengefassten Wert in der Zelle zusammengeführt. Andere Datenbanken bezeichnen ähnliche Funktionen als verteilte Zähler.
Sie können zusammengefasste Werte mit der cbt
-Befehlszeile und den Bigtable-Clientbibliotheken für C++, Go und Java lesen und schreiben. Sie können Aggregationsergebnisse auch mit SQL lesen. Sie aktualisieren Summenzellen mithilfe von Methoden, die eine MutateRow
-Anfrage mit einer AddToCell
- oder MergeToCell
-Mutation senden. Mit MergeToCell
können Sie einen Akkumulator einfügen und mit AddToCell
eine Eingabe hinzufügen.
In diesem Dokument finden Sie einen Überblick über Aggregate und eine Beschreibung zum Erstellen einer Aggregate-Spaltenfamilie. Bevor Sie dieses Dokument lesen, sollten Sie sich mit der Bigtable-Übersicht und Schreiben vertraut gemacht haben.
Wann sollten Aggregate verwendet werden?
Bigtable-Aggregationen sind nützlich, wenn Sie Daten für eine Entität insgesamt und nicht als einzelne Datenpunkte benötigen.
Zähler
Sie können einen Zähler mithilfe von Summenzellen erstellen und den Wert beim Schreiben erhöhen, ohne die Einschränkungen einer ReadModifyWriteRow
-Anfrage.
Wenn Sie von Datenbanken wie Apache Cassandra oder Redis zu Bigtable migrieren, können Sie Bigtable-Aggregationen an Stellen verwenden, an denen Sie zuvor Zähler in diesen Systemen verwendet haben.
Eine Kurzanleitung zum Implementieren von Zählern mithilfe der cbt
CLI finden Sie unter Zähler erstellen und aktualisieren.
Zeit-Buckets
Mit Zeitblöcken können Sie zusammengefasste Werte für einen bestimmten Zeitraum abrufen, z. B. eine Stunde, einen Tag oder eine Woche. Anstatt Daten vor oder nach dem Schreiben in die Tabelle zu aggregieren, fügen Sie neue Werte hinzu, um Zellen in der Tabelle zu aggregieren.
Wenn Sie beispielsweise einen Dienst anbieten, mit dem Wohltätigkeitsorganisationen Geld sammeln können, möchten Sie vielleicht wissen, wie viele Onlinespenden pro Tag für jede Kampagne eingegangen sind. Sie müssen aber nicht die genaue Uhrzeit jeder Spende oder den Betrag pro Stunde kennen. In Ihrer Tabelle stehen Zeilenschlüssel für IDs von Wohltätigkeitsorganisationen und Sie erstellen eine aggregierte Spaltenfamilie namens donations
. Die Spaltenbezeichner in der Zeile sind Kampagnen-IDs.
Jeder für einen bestimmten Tag für eine Kampagne eingegangene Spendenbetrag wird der Summe in der Summenzelle in der Spalte für diesen Tag hinzugefügt. Für jede Anfrage zum Hinzufügen von Daten in die Zelle wird ein Zeitstempel verwendet, der auf den Beginn des Tages gekürzt ist. Daher hat jede Anfrage denselben Zeitstempel. Wenn Sie die Zeitstempel kürzen, werden alle Spenden an diesem Tag derselben Zelle hinzugefügt. Am nächsten Tag werden alle Ihre Anfragen in eine neue Zelle verschoben. Dabei werden die Zeitstempel auf das neue Datum gekürzt. Dieses Muster wird fortgesetzt.
Je nach Anwendungsfall können Sie stattdessen neue Spalten für die neuen Aggregate erstellen. Je nach Anzahl der geplanten Bucket-Ansammlungen können Sie ein anderes Zeilenschlüsseldesign in Betracht ziehen.
Weitere Informationen zu Zeitblöcken finden Sie unter Schemadesign für Zeitachsendaten.
Workflows optimieren
Mit Aggregaten können Sie Ihre Daten in Ihrer Bigtable-Tabelle zusammenfassen, ohne dass Sie vor oder nach dem Schreiben in Bigtable eine ETL- oder Streaming-Verarbeitungssoftware verwenden müssen. Wenn Ihre Anwendung beispielsweise zuvor Nachrichten in Pub/Sub veröffentlicht und dann mit Dataflow die Nachrichten gelesen und die Daten aggregiert hat, bevor sie in Bigtable geschrieben wurden, können Sie die Daten stattdessen direkt an aggregierte Zellen in Bigtable senden.
Spaltenfamilien zusammenführen
Wenn Sie Summenzellen erstellen und aktualisieren möchten, müssen Sie in Ihrer Tabelle eine oder mehrere Summenspaltenfamilien haben. Das sind Spaltenfamilien, die nur Summenzellen enthalten. Sie können sie beim Erstellen einer Tabelle erstellen oder einer bereits verwendeten Tabelle eine Summenspaltenfamilie hinzufügen. Beim Erstellen der Spaltenfamilie geben Sie den Aggregationstyp an, z. B. „Summe“.
Sie können eine Spaltenfamilie, die keine aggregierten Daten enthält, nicht in eine aggregierte Spaltenfamilie umwandeln. Spalten in Aggregierungsspaltenfamilien dürfen keine nicht aggregierten Zellen enthalten und Standardspaltenfamilien dürfen keine aggregierten Zellen enthalten.
Informationen zum Erstellen einer neuen Tabelle mit einer zusammengefassten Spaltenfamilie finden Sie unter Tabelle erstellen. Informationen zum Hinzufügen einer Summen-Spaltenfamilie zu einer Tabelle finden Sie unter Spaltenfamilien hinzufügen.
Aggregationstypen
Bigtable unterstützt die folgenden Aggregationstypen:
Summe
Wenn Sie einen Wert in eine Summen-Aggregatzelle (sum
) schreiben, wird der Zellenwert durch die Summe des neu hinzugefügten Werts und des aktuellen Zellenwerts ersetzt. Für Summen wird der Eingabetyp Int64
unterstützt.
Minimum
Wenn Sie einen Wert in eine Mindestsummezelle (min
) schreiben, wird der Zellenwert durch den niedrigeren Wert zwischen dem neu hinzugefügten Wert und dem aktuellen Zellenwert ersetzt. Der für „min“ unterstützte Eingabetyp ist Int64
.
Maximum
Wenn Sie einen Wert in eine maximale Aggregationszelle (max
) schreiben, wird der Zellenwert durch den höheren Wert zwischen dem neu hinzugefügten Wert und dem aktuellen Zellenwert ersetzt. Der für „max“ unterstützte Eingabetyp ist Int64
.
HyperLogLog (HLL)
Wenn Sie einen Wert in eine HLL-Summenzelle (inthll
) schreiben, wird der Wert zu einem probabilistischen Satz aller Werte hinzugefügt, die seit dem letzten Zurücksetzen hinzugefügt wurden. Der Zellenwert gibt den Status dieses Satzes an. Allgemeinere Informationen zum HLL-Algorithmus finden Sie unter HyperLogLog.
Sie können HLL-Werte mit der Zetasketch-Bibliothek lesen. Weitere Informationen finden Sie im GitHub-Repository von Zetasketch. Der für HLL unterstützte Eingabetyp ist BYTES
.
Zeitstempel
Eine Summenzelle wird durch den Zeilenschlüssel, die Spaltenfamilie, den Spaltenqualifizierer und den Zeitstempel definiert. Sie verwenden jedes Mal denselben Zeitstempel, wenn Sie der Zelle Daten hinzufügen. Wenn Sie einen Wert mit demselben Zeilenschlüssel, derselben Spaltenfamilie und demselben Spaltenqualifizierer, aber mit einem anderen Zeitstempel senden, wird in der Spalte eine neue Aggregierungszelle erstellt.
Jede an eine Gesamtzellanfrage gesendete Anfrage muss einen Zeitstempel enthalten.
Eingabetyp
Der Eingabetyp des Werts in der Schreibanfrage muss mit dem Eingabetyp übereinstimmen, mit dem die Spaltenfamilie erstellt wurde. Wenn Sie beispielsweise einen Stringwert an eine Spaltenfamilie senden, die für Int64
konfiguriert ist, wird die Anfrage abgelehnt.
Mutationstyp
Eine Bigtable-MutateRow
-Anfrage enthält den Typ der Mutation, also einer Änderung an der Tabelle. Die Mutationen, die Sie zum Erstellen und Aktualisieren von Summenzellen senden können, sind AddToCell
und MergeToCell
. Im Gegensatz dazu ist bei einer nicht zusammengefassten Schreiboperation eine SetCell
-Mutation erforderlich. Sie können auch Löschmutationen verwenden, um den angesammelten Wert einer Zelle zu löschen.
In einer replizierten Tabelle konvergiert eine Aggregierungszelle in allen Clustern innerhalb der aktuellen Replikationsverzögerung auf denselben Endwert. Der endgültige Wert ist die Summe aller AddToCell
-Mutationen, die seit dem letzten Löschvorgang oder seit der Erstellung der Zelle an diese Zelle in allen Clustern gesendet wurden.
Für Aggregationsvorgänge gelten dieselben Operationseinschränkungen wie für andere Tabellenmutationen.
AddToCell
Wenn Sie einer Summenzelle Daten hinzufügen möchten, z. B. wenn Sie einen Zähler inkrementieren, senden Sie eine AddToCell
-Mutation in einer MutateRow
-Anfrage. Weitere Informationen finden Sie in der Bigtable Data API-Referenz unter AddToCell
.
MergeToCell
Wenn Sie Daten zwischen Zellen kopieren möchten, verwenden Sie eine MergeToCell
-Mutation. Wenn Sie beispielsweise den Status aus Zelle A in Zelle B kopieren möchten, können Sie [DeleteCell(B), MergeToCell(B)]
mit dem Wert aus Zelle A verwenden. Weitere Informationen finden Sie in der Bigtable Data API-Referenz unter MergeToCell
.
Löschvorgänge
Genau wie bei nicht aggregierten Daten können Sie einen Zähler mithilfe von Data API-Mutationen zurücksetzen oder aggregierte Daten löschen. Weitere Informationen finden Sie in der Bigtable Data API-Referenz unter Mutation.
Automatische Speicherbereinigung
Aggregierte Zellen werden beim Garbage Collection wie jede andere Zelle behandelt: Wenn eine Zelle zum Löschen markiert wird, wird das Löschen auf alle Cluster in der Instanz repliziert. Weitere Informationen finden Sie unter Replikation und Garbage Collection. Wenn eine Anfrage zum Hinzufügen an eine Summenzelle gesendet wird, die durch die Garbage Collection entfernt wurde, wird eine neue Summenzelle erstellt.
Nächste Schritte
- In dieser Kurzanleitung erfahren Sie, wie Sie mit der
cbt
CLI Zähler erstellen und aktualisieren. - Codebeispiele zum Hinzufügen eines Werts zu einer Summenzelle
- Konzepte zum Schemadesign ansehen