Mit der Gültigkeitsdauer (TTL) können Sie Richtlinien festlegen, damit Daten regelmäßig aus Cloud Spanner-Tabellen gelöscht werden. Nicht benötigte Daten entfernen:
- Reduziert die Speicher- und Sicherungskosten.
- Es verringert die Anzahl der Zeilen, die die Datenbank nach einigen Abfragen scannen muss, wodurch die Abfrageleistung potenziell erhöht wird.
- Hilft dabei, Vorschriften oder Branchenrichtlinien einzuhalten, die die Aufbewahrungsdauer für bestimmte Datentypen beschränken.
TTL ist ideal für regelmäßige Bereinigungsaktivitäten. Sie wird kontinuierlich im Hintergrund ausgeführt und löscht zulässige Daten regelmäßig in Batches. Die Daten werden in der Regel innerhalb von 72 Stunden nach ihrem Ablaufdatum gelöscht. Durch eine TTL werden Daten nicht sofort entwertet oder für Abfragen ausgeblendet, wenn sie gelöscht werden können. TTL überprüft auch keine eingefügten Daten. Sie können also keine Zeile mit einem abgelaufenen Zeitstempel einfügen.
TTL soll die Auswirkungen auf andere Datenbankaktivitäten minimieren. Es parallelisiert die Arbeit effizienter als Endnutzerabfragen und enthält eine Wiederholungslogik, um eine End-to-End-Bereinigung zu gewährleisten.
Ein anderer Prozess der Hintergrundverdichtung gibt Speicherplatz von gelöschten Zeilen zurück, normalerweise innerhalb von sieben Tagen.
Wie funktioniert TTL?
Sie können für Spanner-Tabellen eine TTL festlegen, indem Sie eine Zeile für das Löschen von Zeilen im Datenbankschema definieren, damit Spanner nicht benötigte Daten regelmäßig löschen kann. Jede Tabelle kann eine eigene Richtlinie haben. Pro Tabelle kann nur eine TTL-Richtlinie angegeben werden. Sie richten TTL für Google-SQL- und Dialect-Datenbanken unterschiedlich ein.
TTL mit Google SQL
In Google SQL definieren Sie eine Richtlinie zum Löschen von Zeilen, indem Sie einen Zeitstempel und ein Intervall angeben, um zu ermitteln, wann eine Zeile gelöscht werden kann. Beispiel: Datum der letzten Aktualisierung plus 30 Tage.
Ein Hintergrundsystemprozess prüft täglich, ob geeignete Zeilen vorhanden sind. Sie parallelisiert die tatsächlichen Löschvorgänge in Batches, die in der Nähe der Speicherorte der Daten ausgeführt werden. Jeder Batch wird mit einem eigenen Zeitstempel in einer eigenen Transaktion ausgeführt. Daher werden die Zeilen in einem bestimmten Batch zusammen mit allen Indexen und verschränkten untergeordneten Elementen garantiert untrennbar gelöscht. Das Löschen in Batches findet jedoch in verschiedenen Transaktionen statt.
Da dies ein asynchroner Hintergrundprozess ist, gibt es eine Verzögerung zwischen Berechtigung und Löschen. In der Regel beträgt die Verzögerung weniger als 72 Stunden. Daher können Zeilen bis zu drei Tage nach Ablauf ihres TTL-Zeitraums in Ihrer Tabelle verbleiben. Eine Tabelle mit einer Richtlinie zum Löschen von Zeilen, die Zeilen löscht, die älter als vier Tage sind, kann beispielsweise Zeilen enthalten, die bis zu sieben Tage sowie ältere, nicht lösbare Zeilen enthalten.
Eine detaillierte Anleitung zum Erstellen einer Google SQL-Löschrichtlinie für Zeilen finden Sie unter TTL-Richtlinie erstellen.
TTL mit PostgreSQL
Mit PostgreSQL kann ein Datenbankinhaber eine TTL INTERVAL
-Klausel in der CREATE TABLE
- oder ALTER TABLE
-Anweisung verwenden, um eine Richtlinie zum Löschen von Zeilen zu definieren.
Zum Festlegen einer Richtlinie für das Löschen von Zeilen in einer PostgreSQL-Tabelle muss die Tabelle eine Spalte mit dem Datentyp TIMESTAMPTZ
enthalten. Die TTL INTERVAL
-Klausel verwendet diese Spalte, um eine Intervallspezifikation dafür festzulegen, wann eine Zeile zum Löschen berechtigt ist.
Die Klausel muss eine ganze Anzahl von Tagen ergeben. Zum Beispiel ist '3
DAYS'
zulässig, ebenso wie '4 DAYS 2 MINUTES - 2 MINUTES'
, aber '4 DAYS 3
MINUTES'
ist nicht zulässig und es wird ein Fehler zurückgegeben. Negative Zahlen sind nicht zulässig.
Die automatische Speicherbereinigung für die TTL löscht aktive Zeilen kontinuierlich und im Hintergrund. Da dies ein asynchroner Hintergrundprozess ist, gibt es eine Verzögerung zwischen der Berechtigung und dem Löschen. Die Tabelle enthält möglicherweise Zeilen, die für das Löschen von TTLs zulässig sind, aber für die TTL noch nicht abgeschlossen ist. In der Regel beträgt die Verzögerung weniger als 72 Stunden.
Eine Anleitung zum Erstellen einer PostgreSQL-Löschrichtlinie für Zeilen finden Sie unter TTL-Richtlinie erstellen.
Sicherungen und TTL
Sicherung wiederherstellen
Wenn Sie eine Datenbank aus einer Sicherung wiederherstellen, werden alle Richtlinien zum Löschen von Zeilen, die in der Quelldatenbank konfiguriert wurden, automatisch gelöscht. Dadurch wird verhindert, dass Spanner abgelaufene Daten löscht, sobald die Sicherung wiederhergestellt wurde. Daher müssen Sie die TTL manuell neu konfigurieren.
Datenkonsistenz
Eine Sicherung ist ein konsistenter Snapshot Ihrer Daten zu einem bestimmten Zeitpunkt (version_time
). Die Sicherung kann Zeilen enthalten, die möglicherweise zum Löschen von TTLs verwendet werden, aber für die TTL noch nicht abgeschlossen ist.
Entsprechend lesen Dataflow-Exportjobs die gesamte Tabelle zu einem festen Zeitstempel.
Audit
TTL unterstützt die Prüfung von Löschvorgängen über Änderungsstreams. Bei Änderungsstreams werden Datensätze, die TTL-Änderungen an einer Datenbank verfolgen, im Feld transaction_tag
auf RowDeletionPolicy
und im Feld is_system_transaction
auf true
gesetzt. Änderungsstream-Leser können dann je nach Anwendungsfall alle TTL-Einträge oder alle Datensätze außer den TTL-Einträgen herausfiltern. Hier finden Sie ein Beispiel für die Verwendung von Beam zum Filtern nach Transaktions-Tags.