Gültigkeitsdauer (TTL) – Übersicht

Mit einer Gültigkeitsdauer (TTL) können Sie Richtlinien festlegen, mit denen Daten regelmäßig aus 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 bei der Einhaltung von Vorschriften oder Branchenrichtlinien, die die Aufbewahrungsdauer für bestimmte Datentypen begrenzen.

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. Jedes Löschen erfordert eine Replikation des Primärschlüssels in den Replikaten der Datenbank, was zu Replikationskosten führt. Weitere Informationen finden Sie unter Preise für die Datenreplizierung. Durch eine TTL werden Daten nicht sofort entwertet oder für Abfragen ausgeblendet, wenn sie gelöscht werden können. Außerdem werden Daten bei der TTL nicht geprüft, während sie eingefügt werden. Das Einfügen einer Zeile mit einem abgelaufenen Zeitstempel wird also nicht verhindert.

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 Hintergrundverdichtungsprozess gibt Speicher aus gelöschten Zeilen zurück, normalerweise innerhalb von sieben Tagen.

Wie funktioniert TTL?

Sie können die TTL für Spanner-Tabellen festlegen, indem Sie im Datenbankschema eine Richtlinie zum Löschen von Zeilen definieren. So kann Spanner nicht mehr benötigte Daten regelmäßig löschen. Jede Tabelle kann eine eigene Richtlinie haben. Pro Tabelle kann nur eine TTL-Richtlinie angegeben werden. Die TTL wird für Datenbanken mit Google SQL- und PostgreSQL-Dialekt unterschiedlich eingerichtet.

TTL mit GoogleSQL

In GoogleSQL definieren Sie eine Richtlinie zum Löschen von Zeilen, indem Sie einen Zeitstempel und ein Intervall angeben, um zu bestimmen, wann eine Zeile gelöscht werden kann. Beispiel: Datum der letzten Aktualisierung plus 30 Tage.

Ein Hintergrundsystemprozess prüft täglich nach zulässigen Zeilen. 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. Löschvorgänge sind jedoch in unterschiedlichen Transaktionen möglich.

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 der TTL in Ihrer Tabelle verbleiben. Beispielsweise kann eine Tabelle mit einer Richtlinie zum Löschen von Zeilen, die älter als vier Tage ist, Zeilen enthalten, die bis zu sieben Tage alt sind, sowie ältere, nicht lösbare Zeilen.

Eine detaillierte Anleitung zum Erstellen einer GoogleSQL-Richtlinie zum Löschen von Zeilen finden Sie unter TTL-Richtlinie erstellen.

TTL mit PostgreSQL

Unter PostgreSQL kann ein Datenbankinhaber mithilfe einer TTL INTERVAL-Klausel in der CREATE TABLE- oder ALTER TABLE-Anweisung eine Richtlinie zum Löschen von Zeilen definieren.

Wenn Sie eine Richtlinie zum Löschen von Zeilen für eine PostgreSQL-Tabelle festlegen möchten, muss die Tabelle eine Spalte mit dem Datentyp TIMESTAMPTZ haben. In der TTL INTERVAL-Klausel wird mithilfe dieser Spalte ein Intervall festgelegt, in dem eine Zeile gelöscht werden kann.

Die Klausel muss auf eine ganze Anzahl von Tagen ausgewertet werden. Beispiel: '3 DAYS' und '4 DAYS 2 MINUTES - 2 MINUTES' sind zulässig, '4 DAYS 3 MINUTES' jedoch nicht. In diesem Fall wird ein Fehler zurückgegeben. Sie können keine negativen Zahlen verwenden.

Bei der TTL-automatischen Speicherbereinigung werden berechtigte Zeilen kontinuierlich und im Hintergrund gelöscht. Da dies ein asynchroner Hintergrundprozess ist, gibt es eine Verzögerung zwischen Berechtigung und Löschen. Die Tabelle kann Zeilen enthalten, die zum Löschen durch TTL berechtigt sind, für die die TTL aber noch nicht abgelaufen ist. In der Regel beträgt die Verzögerung weniger als 72 Stunden.

Eine Anleitung zum Erstellen einer PostgreSQL-Richtlinie zum Löschen von 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 TTL berechtigt sind, für die die TTL aber noch nicht abgelaufen ist. Ebenso lesen Dataflow-Exportjobs die gesamte Tabelle zu einem festen Zeitstempel.

Audit

TTL unterstützt die Prüfung von Löschungen über Änderungsstreams. Bei Datensätzen von Änderungsstreams, die TTL-Änderungen an einer Datenbank erfassen, ist das Feld transaction_tag auf RowDeletionPolicy und das Feld is_system_transaction auf true festgelegt. Leser von Änderungsstreams können dann je nach Anwendungsfall alle TTL-Einträge oder alle Einträge mit Ausnahme der TTL-Einträge herausfiltern. Hier finden Sie ein Beispiel für die Verwendung von Beam zum Filtern nach Transaktions-Tags.

Nächste Schritte