TTL auf Zellenebene simulieren
In Bigtable werden Richtlinien für die automatische Speicherbereinigung auf Spaltenfamilienebene festgelegt. Sie können keine Richtlinie für die automatische Speicherbereinigung auf Zellenebene angeben. Sie können jedoch eine TTL-Richtlinie (time to live, Gültigkeitsdauer) auf Zellenebene simulieren, indem Sie die Einstellungen für die automatische Speicherbereinigung ändern. Auf dieser Seite werden verschiedene Ansätze erläutert, die Sie verwenden können.
Bevor Sie diese Seite lesen, sollten Sie sich die Übersicht über die automatische Speicherbereinigung ansehen. Weitere Informationen zum Senden von Schreibanfragen mit Zeitstempeln finden Sie unter Schreibvorgänge in Bigtable.
Ablauf nach einer Sekunde
Bei diesem Ansatz legen Sie Ihre Regel für die automatische Speicherbereinigung so fest, dass die Daten nach einer Sekunde ablaufen. Setzen Sie beim Schreiben von Daten den Zeitstempel der Zelle auf den Zeitpunkt, zu dem der Wert ablaufen soll. Während der Verdichtung löscht Bigtable alle Zellen, deren Zeitstempel mindestens eine Sekunde in der Vergangenheit liegt. Wenn Sie beispielsweise den Zeitstempel einer Zelle auf den 30. April, 9:00:00 Uhr einstellen, wird die Zelle nach dem 30. April, 9:00:01 Uhr gelöscht. Mit diesem Ansatz können Sie für verschiedene Zellen in derselben Spaltenfamilie unterschiedliche Ablaufwerte festlegen.
Vorteile des Ablaufs nach einer Sekunde
- Der Zeitstempel hat eine „echte“ Bedeutung: Er gibt die Ablaufzeit an.
Nachteile des Ablaufs nach einer Sekunde
Jede Anwendung, die Daten in diese Bigtable-Spaltenfamilie schreibt, muss entsprechend dieser Regel konfiguriert werden. Wenn Sie dies vergessen und für einen Schreibvorgang einen standardmäßigen Serverzeitstempel verwenden, laufen diese Daten sofort ab und werden bei der nächsten Verdichtung gelöscht.
Da Ihre Zeitstempel nicht "echt" sind, können Sie sie nicht für andere Anwendungsfälle verwenden, z. B. zum Ermitteln des Zeitpunkts, zu dem ein Wert geschrieben wurde. Zur Umgehung dieses Problems können Sie den echten Zeitstempel in eine separate Spalte schreiben. Dadurch wird jedoch die von Ihnen gespeicherte Datenmenge erhöht.
Sie können diese Strategie nicht für eine Spaltenfamilie implementieren, die bereits Daten mit echten Zeitstempeln enthält. Wenn vorhandene Daten echte Zeitstempel haben oder Sie versehentlich neue Daten mit echten Zeitstempeln schreiben, werden diese Daten bei der nächsten Verdichtung gelöscht.
Sie können nicht festlegen, dass mehrere Zellen einer Zeile und Spalte zur selben Zeit ablaufen sollen. Neue Daten überschreiben alte Daten mit demselben Zeitstempel.
Da die automatische Speicherbereinigung bis zu eine Woche dauern kann, müssen Sie beim Lesen der Daten immer Filter verwenden.
Standardablauf
Angenommen, Sie möchten, dass die meisten Ihrer Daten eine Standard-TTL haben, möchten aber für einige Ihrer Daten unterschiedliche zellenspezifische Ablaufwerte festlegen.
Sie können beispielsweise Klickereignisse für zehn Kunden in einer einzigen Tabelle speichern. Die meisten Klickereignisse sollen nach zwei Tagen ablaufen. Sie haben aber auch einen Kunden, dessen Klickereignisse schon nach einer Stunde ablaufen sollen, und einen anderen Kunden, dessen Klickereignisse nach drei Tagen ablaufen sollen.
Bei diesem Ansatz erstellen Sie die Spaltenfamilie mit einer Altersgrenze für die automatische Speicherbereinigung, die auf die Standard-TTL gesetzt ist. Bei Daten, die früher als durch den Standardwert angegeben ablaufen sollen, setzen Sie den Zeitstempel auf einen früheren Zeitpunkt als den, zu dem die Daten tatsächlich geschrieben werden. Für Daten, die später ablaufen sollen, setzen Sie den Zeitstempel auf einen späteren Zeitpunkt als den, zu dem die Daten tatsächlich geschrieben werden.
Vorteile des Standardablaufs
Für Schreibvorgänge ohne benutzerdefinierte TTL gilt eine Standard-TTL.
Dieser Ansatz kann problemlos auf eine bereits vorhandene Tabelle angewendet werden.
Nachteile des Standardablaufs
Der Zeitstempel ist semantisch nicht aussagekräftig, da der Zeitstempel einer Zelle "echt" oder "künstlich" sein kann. Dies bedeutet, dass Sie die Zeitstempel der Zellen nicht für andere Anwendungsfälle verwenden können, z. B. das Ermitteln des Zeitpunkts, zu dem ein Wert geschrieben wurde. Zur Umgehung dieses Problems können Sie den echten Zeitstempel in eine separate Spalte schreiben. Dadurch wird jedoch die von Ihnen gespeicherte Datenmenge erhöht.
Sie können versehentlich einen benutzerdefinierten Zeitstempel angeben, der mit einem echten Zeitstempel in einer bestimmten Spalte in Konflikt steht.
Da die automatische Speicherbereinigung asynchron ist, müssen Sie, wenn Sie diese Strategie verwenden, beim Lesen der Daten immer Filter verwenden.
Nächste Schritte
- Automatische Speicherbereinigung, wenn die Zeitstempel fortlaufende Nummern sind
- Strategie dafür, immer den neuesten Wert einer Spalte zu lesen
- Codebeispiele überprüfen, die die automatische Speicherbereinigung konfigurieren.
- Mehr über Speicherpreise