Gültigkeitsdauer (TTL)

Mit der Gültigkeitsdauer (TTL) können Sie Richtlinien festlegen, um Daten regelmäßig aus Spanner-Tabellen zu löschen. 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. Durch eine TTL werden Daten nicht sofort entwertet oder für Abfragen ausgeblendet, wenn sie gelöscht werden können. Die TTL prüft außerdem keine Daten, während sie eingefügt werden. Sie werden also nicht daran gehindert, eine Zeile mit einem abgelaufenen Zeitstempel einzufü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 Hintergrundverdichtungsprozess gibt Speicherplatz aus gelöschten Zeilen wieder frei, in der Regel 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, die es Spanner ermöglicht, nicht benötigte Daten regelmäßig zu 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 GoogleSQL-Dialekt und PostgreSQL-Dialekt-Datenbanken unterschiedlich eingerichtet.

TTL mit GoogleSQL

Mit GoogleSQL definieren Sie eine Richtlinie zum Löschen von Zeilen. Dazu geben Sie einen Zeitstempel und ein Intervall an, um zu bestimmen, wann eine Zeile gelöscht werden kann, z. B. das Datum der letzten Aktualisierung plus 30 Tage.

Ein Systemprozess im Hintergrund prüft täglich auf infrage kommende 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 für mehrere Batches erfolgen jedoch in unterschiedlichen Transaktionen.

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 der 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 alt sind, sowie ältere, nicht löschbare Zeilen.

Schritt-für-Schritt-Anleitungen zum Erstellen einer GoogleSQL-Richtlinie zum Löschen von 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 zum Löschen von Zeilen für eine PostgreSQL-Tabelle muss die Tabelle eine Spalte mit dem Datentyp TIMESTAMPTZ haben. Die TTL INTERVAL-Klausel verwendet diese Spalte, um eine Intervallspezifikation dafür festzulegen, wann eine Zeile gelöscht werden kann.

Die Klausel muss eine ganze Anzahl von Tagen ergeben. Beispielsweise sind '3 DAYS' und '4 DAYS 2 MINUTES - 2 MINUTES' zulässig, '4 DAYS 3 MINUTES' aber nicht zulässig und ein Fehler wird zurückgegeben. Negative Zahlen sind nicht zulässig.

Bei der TTL-automatische Speicherbereinigung werden zulässige Zeilen kontinuierlich und im Hintergrund gelöscht. Da es sich um einen asynchronen Hintergrundprozess handelt, gibt es eine Verzögerung zwischen der Berechtigung und dem Löschen. Die Tabelle kann Zeilen enthalten, die zwar gelöscht werden können, aber die TTL noch nicht abgeschlossen 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 zwar möglicherweise innerhalb der TTL gelöscht werden, aber die TTL noch nicht abgeschlossen ist. Ebenso lesen Dataflow-Exportjobs die gesamte Tabelle mit einem festen Zeitstempel.

Audit

TTL unterstützt die Überprüfung von Löschvorgängen über Änderungsstreams. Bei Einträgen des Änderungsstreams, mit denen TTL-Änderungen für eine Datenbank erfasst werden, muss das Feld transaction_tag auf RowDeletionPolicy und das Feld is_system_transaction auf true gesetzt sein. Änderungsstreams können dann je nach Anwendungsfall alle TTL-Einträge oder alle Einträge mit Ausnahme der TTL-Einträge herausfiltern. Sehen Sie sich ein Beispiel an, wie Sie Beam zum Filtern nach Transaktions-Tags verwenden.