Automatische Speicherbereinigung
Auf dieser Seite wird beschrieben, wie die automatische Speicherbereinigung in Bigtable funktioniert, und es werden die folgenden Themen behandelt:
- Arten der automatischen Speicherbereinigung
- Standardeinstellungen für die automatische Speicherbereinigung
- Zeitpunkt zum Löschen von Daten
- Änderungen an den Richtlinien der automatischen Speicherbereinigung für replizierte Tabellen
Übersicht über die automatische Speicherbereinigung
Bei der automatischen Speicherbereinigung handelt es sich um den automatischen, fortlaufenden Prozess, bei dem abgelaufene und veraltete Daten aus Bigtable-Tabellen entfernt werden. Eine Richtlinie für die automatische Speicherbereinigung ist ein Satz von Regeln, die Sie erstellen, wenn Daten in einer bestimmten Spaltenfamilie nicht mehr benötigt werden.
Die automatische Speicherbereinigung ist ein integrierter, asynchroner Hintergrundprozess. Es kann bis zu einer Woche dauern, bis Daten, die für die automatische Speicherbereinigung vorgesehen sind, tatsächlich entfernt werden. Die automatische Speicherbereinigung erfolgt nach einem festen Zeitplan, der nicht davon abhängt, wie viele Daten entfernt werden müssen. Solange die Daten nicht gelöscht wurden, werden sie in den Leseergebnissen angezeigt. Sie können die Leseergebnisse filtern, um diese Daten auszuschließen.
Dies sind Vorteile von Richtlinien für die automatische Speicherbereinigung:
- Minimierung der Zeilengröße: Sie möchten immer vermeiden, dass die Zeilengröße unbegrenzt zunimmt. Große Zeilen wirken sich negativ aus. Im Idealfall sollte eine Zeile niemals größer als 100 MB sein. Das Limit beträgt 256 MB. Wenn Sie keine alten Daten und keine alten Versionen Ihrer aktuellen Daten aufbewahren müssen, können Sie mithilfe der automatischen Speicherbereinigung die Größe jeder Zeile minimieren.
- Niedrigere Kosten: Durch die automatische Speicherbereinigung wird dafür gesorgt, dass Sie nicht für die Speicherung von Daten bezahlen müssen, die nicht mehr benötigt oder verwendet werden. Die Speicherung abgelaufener oder veralteter Daten wird Ihnen in Rechnung gestellt, bis die Verdichtung erfolgt und für die automatische Speicherbereinigung geeignete Daten gelöscht werden. Dieser Vorgang dauert in der Regel einige Tage, kann aber bis zu einer Woche in Anspruch nehmen.
Sie können Richtlinien für die automatische Speicherbereinigung entweder programmatisch oder mit der
cbt
-Befehlszeile festlegen.
Richtlinien für die automatische Speicherbereinigung werden auf der Ebene der Spaltenfamilien festgelegt.
Für jede Spaltenfamilie in einer Tabelle gilt eine eigene Richtlinie für die automatische Speicherbereinigung. Bei der automatischen Speicherbereinigung wird für jede Spaltenfamilie die aktuelle Richtlinie für die automatische Speicherbereinigung geprüft und anschließend werden die Daten gemäß den Regeln der Richtlinie entfernt.
Zeitstempel
In Bigtable kann der Schnittbereich einer Zeile und einer Spalte mehrere Zellen umfassen, die Zeitstempelversionen des Werts für diesen Schnittbereich enthalten.
Jede Zelle hat einen Zeitstempel. Ein Zeitstempel ist die Anzahl der Mikrosekunden seit der Unix-Epoche 1970-01-01 00:00:00 UTC
. Sie können Standardzeitstempel verwenden oder Zeitstempel beim Senden von Schreibanfragen festlegen.
Ein Zeitstempel, den Sie an Bigtable senden, muss ein Mikrosekundenwert sein und darf höchstens eine Genauigkeit im Millisekundenbereich haben. Ein Zeitstempel mit einer Genauigkeit bis auf Mikrosekunden wie 3023483279876543
wird abgelehnt. In diesem Beispiel ist der zulässige Zeitstempelwert 3023483279876000
.
Das Zeitstempelattribut einer Zelle kann ein "echter" Zeitstempel, der den tatsächlichen Zeitpunkt angibt, zu dem der Wert für die Zelle geschrieben wurde, oder ein "künstlicher" Zeitstempel sein. Künstliche Zeitstempel können z. B. fortlaufende Nummern, Nullen oder wie Zeitstempel formatierte Werte sein, die nicht den tatsächlichen Zeitpunkt angeben, zu dem die Zelle geschrieben wurde. Bevor Sie künstliche Zeitstempel verwenden, sehen Sie sich die Anwendungsfälle für künstliche Zeitstempel an und beachten Sie auch die Risiken bei ihrer Verwendung:
Achten Sie darauf, beim Senden von Schreibanfragen einen Standardzeitstempel festzulegen, es sei denn, Sie müssen einen Anwendungsfall mit künstlichen Zeitstempeln unterstützen.
Arten der automatischen Speicherbereinigung
In diesem Abschnitt werden die in Bigtable verfügbaren Arten der automatischen Speicherbereinigung beschrieben. Codebeispiele für jeden Typ von automatischer Speicherbereinigung finden Sie unter Automatische Speicherbereinigung konfigurieren.
Ablaufende Werte (altersbasiert)
Sie können eine Regel für die automatische Speicherbereinigung basierend auf dem Zeitstempel der jeweiligen Zelle festlegen. Angenommen, Sie möchten keine Zellen mit Zeitstempeln beibehalten, deren Datum und Uhrzeit mehr als 30 Tage in der Vergangenheit liegt. Bei dieser Art von Regel für die automatische Speicherbereinigung legen Sie die Gültigkeitsdauer (TTL) für Daten fest. Bigtable prüft während der automatischen Speicherbereinigung jede Spaltenfamilie und entfernt alle abgelaufenen Zellen.
Anzahl der Versionen
Sie können eine Regel für die automatische Speicherbereinigung festlegen, die explizit die maximale Anzahl von Zellen angibt, die für alle Spalten in einer Spaltenfamilie aufbewahrt werden sollen.
Wenn Sie beispielsweise nur den aktuellen Nutzernamen und die aktuelle E-Mail-Adresse eines Kunden speichern möchten, können Sie eine Spaltenfamilie erstellen, die diese zwei Spalten enthält, und die maximale Anzahl von Werten für die Spaltenfamilie auf 1
setzen.
In einem anderen Fall möchten Sie vielleicht die letzten fünf Versionen des Passwort-Hashs eines Nutzers beibehalten, um sicherzustellen, dass er Passwörter nicht wiederverwendet. Daher setzen Sie die maximale Anzahl von Versionen für die Spaltenfamilie mit der Passwortspalte auf 5
. Wenn Bigtable während der automatischen Speicherbereinigung die Spaltenfamilie prüft und in die Passwortspalte eine sechste Zelle geschrieben wurde, wird die älteste Zelle entfernt, um die Anzahl der Zellen auf fünf zu beschränken.
Kombinationen von Ablauf- und Versionsnummerregeln
Sie können eine Kombination aus Ablauf- und Versionsnummerregeln für die automatische Speicherbereinigung verwenden. Die Kombinationstypen sind Intersection, Union und Nested. Konfigurationsbeispiele finden Sie unter Automatische Speicherbereinigung basierend auf mehreren Kriterien.
Kreuzung
Durch eine Intersection-Richtlinie für die automatische Speicherbereinigung werden Daten zum Löschen hervorgehoben, wenn alle Kriterien in einem bestimmten Satz von Regeln erfüllt sind. Angenommen, Sie möchten Profile entfernen, die älter als 30 Tage sind, aber für jeden Nutzer immer mindestens ein Profil beibehalten. In diesem Fall würde Ihre Intersection-Richtlinie für die Spaltenfamilie, die die Profilspalte enthält, eine Regel für einen ablaufenden Wert sowie eine Regel für die Anzahl der Versionen umfassen.
Union
Eine Union-Richtlinie für die automatische Speicherbereinigung markiert Daten zum Löschen, wenn sie ein beliebiges Element in einem bestimmten Satz erfüllen. Angenommen, Sie möchten maximal zwei Seitenaufrufdatensätze pro Nutzer speichern, gleichzeitig aber nur solche, die weniger als 30 Tage alt sind. In diesem Fall ist Ihre Union-Richtlinie für einen ablaufenden Wert oder für eine Reihe von Versionen festgelegt.
Nested
Eine Nested-Richtlinie für die automatische Speicherbereinigung besteht aus einer Kombination von Union- und Intersection-Richtlinien.
Standardeinstellungen für die automatische Speicherbereinigung
Es gibt keine Standard-TTL für eine Spaltenfamilie. Die Standardanzahl der Zellen für eine Spalte hängt davon ab, wie Sie die Spaltenfamilie erstellen, in der sich die Spalte befindet. Dies wird in den folgenden Abschnitten erläutert.
HBase-Richtlinie
Wenn Sie die Spaltenfamilie mit dem HBase-Client für Java, der HBase-Shell oder einem anderen Tool, das den HBase-Client für Java verwendet, erstellen, behält Bigtable nur die neueste Zelle jedes Werts in der Spaltenfamilie bei, sofern Sie die Regel nicht ändern. Diese Standardeinstellung stimmt mit HBase überein.
Alle anderen Clientbibliotheken oder Tools
Wenn Sie die Spaltenfamilie mit einer anderen Clientbibliothek oder einem anderen Tool erstellen, behält Bigtable die unbegrenzte Anzahl von Zellen in jeder Spalte in der Spaltenfamilie bei. Dies schließt Spaltenfamilien ein, die mit gcloud
und der cbt
-Befehlszeile erstellt wurden. Sie müssen die Richtlinie der automatischen Speicherbereinigung für die Spaltenfamilie ändern, wenn Sie die Anzahl der Versionen begrenzen möchten.
Zeitpunkt zum Löschen von Daten
Die automatische Speicherbereinigung ist ein kontinuierlicher Prozess, bei dem Bigtable die Regeln für jede Spaltenfamilie prüft und abgelaufene und veraltete Daten entsprechend entfernt. Im Allgemeinen kann es bis zu einer Woche dauern, bis die Daten, die die Kriterien in den Regeln erfüllen, tatsächlich entfernt werden. Den zeitlichen Ablauf der automatischen Speicherbereinigung können Sie nicht ändern.
Da es bis zu einer Woche dauern kann, bis Daten gelöscht werden, sollten Sie sich niemals allein auf Richtlinien für die automatische Speicherbereinigung verlassen, wenn sichergestellt werden soll, dass bei Leseanfragen die gewünschten Daten zurückgegeben werden. Wenden Sie auf Ihre Leseanfragen immer einen Filter an, durch den dieselben Werte wie durch Ihre Regeln für die automatische Speicherbereinigung ausgeschlossen werden. Sie können zur Filterung die Anzahl der Zellen pro Spalte begrenzen oder einen Zeitstempelbereich angeben.
Angenommen, die Regel für die automatische Speicherbereinigung einer Spaltenfamilie besagt, dass nur die fünf neuesten Versionen eines Profils beibehalten werden, und es sind bereits fünf Versionen gespeichert. Nachdem eine neue Version des Profils geschrieben wurde, kann es bis zu einer Woche dauern, bis die älteste Zelle gelöscht wird. Wenn Sie vermeiden möchten, dass der sechste Wert gelesen wird, sollten Sie immer alles außer den fünf neuesten Versionen herausfiltern.
Die Speicherung abgelaufener Daten wird Ihnen in Rechnung gestellt, bis die Verdichtung erfolgt und die Daten gelöscht werden.
Die automatische Speicherbereinigung erfolgt rückwirkend: Wenn eine neue Richtlinie für die automatische Speicherbereinigung festgelegt ist, wird sie im Laufe der nächsten Tage auf alle Daten in der Tabelle angewendet. Wenn die neue Richtlinie restriktiver als die vorherige Richtlinie ist, werden im Rahmen der Hintergrundarbeit alte Daten entfernt. Dies wirkt sich auf Daten aus, die vor der Richtlinienänderung geschrieben wurden.
Wenn Sie prüfen möchten, ob für die automatische Speicherbereinigung hervorgehobene Daten gelöscht werden, können Sie Ihre Tabelle abfragen und die Daten mit den erwarteten Ergebnissen vergleichen. Sie können auch die Tabellengröße in der Google Cloud Console beobachten. Wenn eine Tabelle nie kleiner wird, kann dies bedeuten, dass die Richtlinie für die automatische Speicherbereinigung nicht wie erwartet funktioniert. Denken Sie aber daran, dass die automatische Speicherbereinigung verzögert durchgeführt wird.
Replikation und automatische Speicherbereinigung
Die Replikation kann sich auf verschiedene Arten auf die automatische Speicherbereinigung auswirken.
Versionsbasierte automatische Speicherbereinigung und CPU-Nutzung
In einer Instanz mit Replikation werden Löschvorgänge aus der versionsbasierten automatischen Speicherbereinigung auf dieselbe Weise in alle Cluster in der Instanz repliziert, wie Anwendungsanfragen repliziert werden. Wenn Sie schnell neue Zellen schreiben, die dazu führen, dass ältere Zellen zum Löschen markiert werden, erhöht sich möglicherweise die CPU-Auslastung, wenn Bigtable die veralteten Zellen löscht und diese Löschvorgänge in anderen Clustern in der Instanz repliziert. Bereiten Sie sich auf diese Erhöhung der CPU-Auslastung vor, wenn Sie einen Cluster einer Instanz hinzufügen, die Tabellen enthält, die eine versionsbasierte automatische Speicherbereinigung verwenden.
Die altersbasierte automatische Speicherbereinigung hingegen erhöht nicht die CPU-Auslastung in replizierten Instanzen.
Versionsbasierte Richtlinien für die automatische Speicherbereinigung ändern
Sie können die maximale Anzahl von Versionen einer Spaltenfamilie in einer replizierten Tabelle ändern. Wenn Sie jedoch die Anzahl der Versionen für eine Spaltenfamilie verringern, kann es bis zu einer Woche dauern, bis alle replizierten Cluster die neue, niedrigere Anzahl widerspiegeln. Daher sollten Sie beim Lesen der Daten immer Filter verwenden.
Altersbasierte Richtlinien für die automatische Speicherbereinigung ändern
Sie können die in den Richtlinien für die Garbage Collection angegebene Aufbewahrungsdauer unabhängig davon erhöhen oder verringern, ob für die Instanz die Replikation verwendet wird. Sie können auch eine altersbasierte Richtlinie für die automatische Speicherbereinigung löschen.
Verkürzung der Aufbewahrungsdauer
Wenn Sie die Aufbewahrungsdauer in einer altersbasierten Richtlinie verkürzen, kann es bis zu einer Woche dauern, bis alle Cluster synchronisiert sind und die neue Richtlinie verwenden.
Speicherdauer verlängern
Bei einer replizierten Tabelle können Sie die Aufbewahrungsdauer einer Richtlinie für die automatische Speicherbereinigung um maximal 90 Tage verlängern.
Wenn Sie die Aufbewahrungsdauer für eine Spaltenfamilie verlängern, kann es länger als eine Woche dauern, bis Ihre Cluster synchronisiert sind. Wenn Sie den Grund dafür verstehen möchten, stellen Sie sich einen hypothetischen Fall vor: Sie haben eine Tabelle in einer Instanz mit zwei Clustern und möchten die Aufbewahrungsdauer einer Spaltenfamilie von 30 auf 50 Tage erhöhen:
- Eine Schreibanfrage für den Zeilenschlüssel
ip#685
wird an Cluster A mit dem Wert2023-01-02
für die Spalteclick-through
in der Spaltenfamilieprofile
gesendet. Die Daten werden in Cluster B repliziert. - 31 Tage später erfolgt in Cluster A eine automatische Speicherbereinigung und der Wert in der Spalte
click-through
wird als abgelaufen betrachtet und gelöscht. - Sie ändern die Richtlinie für die automatische Speicherbereinigung für die Spaltenfamilie
profile
und erhöhen die TTL von 30 auf 50 Tage. - Ein Tag später wird die automatische Speicherbereinigung in Cluster B ausgeführt. Da die TTL 50 Tage beträgt, wird der Wert
2023-01-02
beibehalten. - Die Cluster sind jetzt nicht mehr synchron und bleiben so fast 20 Tage lang, bis der in Cluster B, aber nicht in Cluster A vorhandene Wert schließlich gelöscht wird.
Nächste Schritte
- Strategien zur Simulation der TTL auf Zellenebene
- Auswirkungen von Zeitstempeln in Form fortlaufender Nummern auf die automatische Speicherbereinigung
- Mehr über Speicherpreise
- Schauen Sie sich Codebeispiele zur automatischen Speicherbereinigung in Ihrer bevorzugten Programmiersprache an