Gültigkeitsdauer (TTL) – Übersicht

Mit der Gültigkeitsdauer (Time-to-Live, 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. Für jeden Löschvorgang ist eine Replikation des Primärschlüssels über die Replikate der Datenbank hinweg erforderlich, was zu Replikationskosten führt. Weitere Informationen finden Sie unter Preise für die Datenreplikation. Durch eine TTL werden Daten nicht sofort entwertet oder für Abfragen ausgeblendet, wenn sie gelöscht werden können. TTL prüft Daten auch nicht beim Einfügen. Sie können also eine Zeile mit einem abgelaufenen Zeitstempel einfügen.

TTL soll die Auswirkungen auf andere Datenbankarbeitslasten minimieren. Der TTL-Sweeper-Prozess wird im Hintergrund mit niedriger Systempriorität ausgeführt. Es verteilt die Arbeit über die Zeit und die verfügbaren Instanzressourcen effizienter als Endnutzerabfragen und enthält eine Wiederholungslogik, um eine End-to-End-Bereinigung mit minimalem Verarbeitungsaufwand 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 eine TTL für Spanner-Tabellen festlegen, indem Sie eine Richtlinie zum Löschen von Zeilen im Datenbankschema definieren. Mit dieser Richtlinie kann Spanner unnötige Daten regelmäßig löschen. TTL-Richtlinien haben die folgenden Eigenschaften:

  • 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 Datenbanken mit PostgreSQL-Dialekt unterschiedlich eingerichtet.
  • Mit der TTL-Richtlinie werden keine Zeilen gelöscht, deren Zeitstempel auf NULL gesetzt ist.
  • Daten, die mit abgelaufenen Zeitstempeln eingefügt wurden, werden bereinigt, wenn sie im nächsten TTL-Löschzyklus erkannt werden.

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 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

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.

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 diese Spalte verwendet, um eine Intervallspezifikation dafür festzulegen, wann eine Zeile für das Löschen infrage kommt.

Die Klausel muss als ganze Zahl von Tagen ausgewertet werden. Beispiel: '3 DAYS' ist zulässig, ebenso '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.

Durch die TTL-automatische Speicherbereinigung werden zulässige 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 möglicherweise zum Löschen von TTL berechtigt sind, aber für die TTL noch nicht abgeschlossen wurde. 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, aber für die TTL noch nicht abgeschlossen wurde. Ebenso lesen Dataflow-Exportjobs die gesamte Tabelle zu einem festen Zeitstempel.

Audit

TTL unterstützt die Prüfung von Löschvorgängen über Änderungsstreams. Bei Change Streams-Datensätzen, in denen TTL-Änderungen an einer Datenbank erfasst werden, ist das Feld transaction_tag auf RowDeletionPolicy und das Feld is_system_transaction auf true festgelegt. Change Streams-Leser können dann je nach Anwendungsfall alle TTL-Datensätze oder alle Datensätze mit Ausnahme der TTL-Datensätze herausfiltern. Beispiel für die Verwendung von Beam zum Filtern nach Transaktions-Tags

Nächste Schritte