Datenaufbewahrung mit TTL-Indexen verwalten

Auf dieser Seite wird beschrieben, wie Sie die MongoDB API, die Google Cloud console und die Google Cloud CLI verwenden, um TTL-Indexe (Time-to-Live) zu konfigurieren.

Überblick über die Gültigkeitsdauer

Mit TTL-Indexen können Sie veraltete Daten automatisch aus Ihren Datenbanken entfernen. Ein TTL-Index legt ein bestimmtes Feld als Ablaufzeit für Dokumente in einer bestimmten Sammlung fest. Mit TTL können Sie die Speicherkosten senken, indem Sie veraltete Daten entfernen. Daten werden in der Regel innerhalb von 24 Stunden nach Ablauf der Gültigkeitsdauer gelöscht.

Preise

Für TTL-Löschvorgänge werden verwaltete Löscheinheiten verwendet. Informationen zu den Preisen finden Sie unter Firestore Enterprise Edition – Preise.

Limits und Einschränkungen

  • Sie können nur einen TTL-Index pro Sammlung erstellen.
  • Sie können maximal 500 TTL-Indexe haben.

TTL-Löschvorgänge

Beachten Sie die folgenden wichtigen Verhaltensweisen bei TTL-gesteuerten Löschvorgängen:

  • Das Löschen über TTL ist kein sofortiger Vorgang. Abgelaufene Dokumente werden weiterhin in Abfragen und Suchanfragen angezeigt, bis sie tatsächlich durch den TTL-Prozess gelöscht werden. Bei TTL wird die Aktualität des Löschvorgangs zugunsten geringerer Gesamtbetriebskosten für Löschvorgänge geopfert. Daten werden in der Regel innerhalb von 24 Stunden nach Ablauf der Gültigkeitsdauer gelöscht.

  • Wenn Sie einen TTL-Index für eine vorhandene Sammlung erstellen, werden alle abgelaufenen Daten gemäß dem neuen TTL-Index im Bulk gelöscht. Beachten Sie, dass dieser Bulk-Löschvorgang ebenfalls nicht sofort erfolgt und davon abhängt, wie viele Daten für diese Sammlung vorhanden sind.

  • Wenn ein Dokument eine Ablaufzeit in der Vergangenheit hat und Sie der Sammlung einen neuen TTL-Index hinzufügen, wird das Dokument innerhalb von 24 Stunden nach Abschluss der Einrichtung des TTL-Index und dessen Aktivierung gelöscht.

  • Mit TTL werden Dokumente nicht unbedingt in derselben Reihenfolge wie ihre Ablaufzeitstempel gelöscht.

  • Löschvorgänge werden nicht transaktional ausgeführt. Dokumente mit derselben Ablaufzeit werden nicht unbedingt gleichzeitig gelöscht. Wenn Sie dieses Verhalten benötigen, führen Sie die Löschvorgänge mit einer Clientbibliothek aus.

  • Firestore mit MongoDB-Kompatibilität verwendet immer das neueste TTL-Feld, um die Ablaufzeit zu bestimmen. Wenn beispielsweise das TTL-Feld eines abgelaufenen, aber noch nicht gelöschten Dokuments auf ein späteres Datum aktualisiert wird, läuft das Dokument nicht ab und das neue Datum wird verwendet.

  • Firestore mit MongoDB-Kompatibilität lässt ein Dokument nur ablaufen, wenn das TTL-Feld entweder auf einen Wert vom Typ Date and time/BSON Date oder auf einen Array-Wert mit einem Wert vom Typ Date and time/BSON Date festgelegt ist. Lassen Sie das Feld leer oder legen Sie einen Wert wie null fest, um die Ablaufzeiten pro Dokument zu deaktivieren.

  • TTL soll die Auswirkungen auf andere Datenbankaktivitäten minimieren. Löschvorgänge, die durch TTL ausgelöst werden, haben eine niedrigere Priorität. Es gibt auch andere Strategien, um Trafficspitzen durch TTL-gesteuerte Löschvorgänge zu vermeiden.

Unterschiede zu TTL-Indexen

Im Gegensatz zu anderen Firestore-Indexen werden TTL-Indexe bei der Abfrageplanung nicht verwendet, um die Leistung zu verbessern. Wenn Sie die Abfrageleistung für ein Feld verbessern möchten, das mit TTL verwendet wird, müssen Sie es einem separaten Nicht-TTL-Index hinzufügen.

Da TTL-Felder Zeitstempel verwenden, kann das Hinzufügen zu einem Nicht-TTL-Index zu Hotspots führen. Hotspots treten auf, wenn hohe Schreib- und Löschraten auf einen kleinen Dokumentbereich konzentriert sind. Dies kann sich in Zeiten mit hohem Schreibtraffic negativ auf die Skalierungsleistung auswirken.

Berechtigungen

Das Prinzipal, das einen TTL-Index erstellt oder löscht, benötigt die folgende Berechtigung im Projekt:

  • Zum Aufrufen von TTL-Indexen sind die Berechtigungen datastore.indexes.list und datastore.indexes.get erforderlich.
  • Zum Erstellen oder Löschen von TTL-Indexen ist die Berechtigung datastore.indexes.update erforderlich.
  • Zum Prüfen des Status von TTL-Vorgängen sind datastore.operations.list und datastore.operations.get erforderlich.

Informationen zu Rollen, mit denen diese Berechtigungen zugewiesen werden, finden Sie unter Firestore-Rollen für Identity and Access Management.

TTL-Index erstellen

Wenn Sie einen TTL-Index erstellen, legen Sie ein Dokumentfeld als Ablaufzeit für Dokumente in einer Sammlung fest.

TTL verwendet ein bestimmtes Feld, um Dokumente zu identifizieren, die für das Löschen infrage kommen. Das TTL-Feld muss entweder auf einen Wert vom Typ Timestamp/BSON Date oder auf einen Array-Wert mit einem Wert vom Typ Timestamp/BSON Date festgelegt sein. Sie können ein bereits vorhandenes Feld auswählen oder ein Feld festlegen, das Sie später hinzufügen möchten.

Beachten Sie Folgendes, bevor Sie den Wert für das TTL-Feld festlegen:

  • Der Wert für das TTL-Feld kann ein Zeitpunkt in der Zukunft, in der Gegenwart oder in der Vergangenheit sein. Wenn der Wert ein Zeitpunkt in der Vergangenheit ist, kommt das Dokument sofort für das Löschen infrage. Sie können beispielsweise einen TTL-Index mit dem Feld expireAt erstellen, das Sie dann vorhandenen Dokumenten hinzufügen.

  • Wenn Sie einen anderen Datentyp verwenden oder den Wert für das TTL-Feld nicht festlegen, wird die TTL für das einzelne Dokument deaktiviert.

So erstellen Sie einen TTL-Index:

MongoDB API

Fügen Sie die Indexoption expireAfterSeconds hinzu, wenn Sie die Methode createIndex() aufrufen:

db.COLLECTION_NAME.createIndex({"TTL_FIELD": 1, "expireAfterSeconds": EXPIRATION_OFFSET_SECONDS})

Beispiel:

db.restaurants.createIndex({"ts": 1, "expireAfterSeconds": 3600})

expireAfterSeconds identifiziert die TTL als TTL-Index und ist der Offset zwischen dem Zeitstempelwert aus dem TTL-Feld und der Ablaufzeit. Wenn expireAfterSeconds auf 0 gesetzt ist, wird die Ablaufzeit direkt durch den Zeitstempelwert aus dem TTL-Feld angegeben.

Beachten Sie die folgenden Einschränkungen:

  • TTL-Indexe müssen genau ein Feld enthalten.
  • TTL-Indexe werden nicht bei der Abfrageplanung verwendet und verbessern die Leistung von Abfragen nicht.
  • Sie können nur einen TTL-Index pro Sammlung erstellen.
  • Audit-Logs für die Erstellung von TTL-Indexen mit der MongoDB API verwenden den Methodennamen google.firestore.admin.v1.FirestoreAdmin.UpdateField.

Google Cloud Console

  1. Rufen Sie in der Google Cloud console die Datenbanken Seite auf.

    Zur Seite „Datenbanken“

  2. Wählen Sie die benötigte Datenbank aus der Liste der Datenbanken aus.

  3. Klicken Sie im Navigationsmenü auf Gültigkeitsdauer.

  4. Klicken Sie auf Richtlinie erstellen.

  5. Geben Sie einen Sammlungsnamen und einen Namen für das Zeitstempelfeld ein.

  6. Klicken Sie auf Erstellen.

Die Console kehrt zur Seite Gültigkeitsdauer zurück. Wenn der Vorgang erfolgreich gestartet wird, fügt die Seite der Tabelle „TTL-Indexe“ einen Eintrag hinzu. Bei einem Fehler wird eine Fehlermeldung angezeigt.

gcloud

  1. Aktivieren Sie Cloud Shell in der Google Cloud console.

    Cloud Shell aktivieren

    Unten in der Google Cloud console wird eine Cloud Shell Sitzung gestartet und eine Eingabeaufforderung angezeigt. Cloud Shell ist eine Shell-Umgebung in der das Google Cloud CLI bereits installiert ist und Werte für Ihr aktuelles Projekt bereits festgelegt sind. Das Initialisieren der Sitzung kann einige Sekunden dauern.

  2. Verwenden Sie den firestore fields ttls update Befehl, um einen TTL-Index zu konfigurieren. Fügen Sie das Flag --async hinzu, um zu verhindern, dass die gcloud CLI auf den Abschluss des Vorgangs wartet.

     gcloud firestore fields ttls update
    ttl_field --collection-group=collection_name
    --enable-ttl 

Dauer der TTL-Indexerstellung

Die Erstellung eines TTL-Index kann mindestens zehn Minuten dauern. Wenn Sie einen Vorgang starten, wird er durch Schließen des Terminals nicht abgebrochen.

TTL-Indexe ansehen

So rufen Sie TTL-Indexe auf:

MongoDB API

Verwenden Sie die listIndexes() Methode, um TTL-Indexe aufzurufen. Beispiel:

db.restaurants.listIndexes()

Die Ausgabe enthält sowohl TTL-Indexe als auch Nicht-TTL-Indexe. TTL-Indexe enthalten die Option expireAfterSeconds.

Google Cloud Console

  1. Rufen Sie in der Google Cloud console die Datenbanken Seite auf.

    Zur Seite „Datenbanken“

  2. Wählen Sie die benötigte Datenbank aus der Liste der Datenbanken aus.

  3. Klicken Sie im Navigationsmenü auf Gültigkeitsdauer.

In der Console werden die TTL-Indexe für Ihre Datenbank mit dem Status der einzelnen Indexe aufgeführt.

gcloud

  1. Aktivieren Sie Cloud Shell in der Google Cloud console.

    Cloud Shell aktivieren

    Unten in der Google Cloud console wird eine Cloud Shell Sitzung gestartet und eine Eingabeaufforderung angezeigt. Cloud Shell ist eine Shell-Umgebung in der das Google Cloud CLI bereits installiert ist und Werte für Ihr aktuelles Projekt bereits festgelegt sind. Das Initialisieren der Sitzung kann einige Sekunden dauern.

  2. Verwenden Sie den firestore fields ttls list Befehl, um einen TTL-Index zu konfigurieren. Mit dem folgenden Befehl werden alle TTL-Indexe aufgelistet.

    gcloud firestore fields ttls list
    

    So listen Sie TTL-Indexe unter einer bestimmten Sammlung auf:

    gcloud firestore fields ttls list  --collection-group=collection_name
    

Betriebsdetails anzeigen

Mit der gcloud CLI können Sie weitere Details zu einem TTL-Index im Status CREATING aufrufen.

Mit dem operations list Befehl können Sie alle laufenden und kürzlich abgeschlossenen Vorgänge aufrufen:

gcloud firestore operations list

Die Antwort enthält eine Schätzung des Fortschritts des Vorgangs.

TTL-Index löschen

So löschen Sie einen TTL-Index:

MongoDB API

Verwenden Sie die dropIndex() Methode, um einen TTL-Index zu löschen. Beispiel:

TTL-Index anhand des Indexnamens löschen

db.restaurants.dropIndex("ts_1")

TTL-Index anhand der Indexdefinition löschen

db.restaurants.dropIndex({"ts": 1})

In Audit-Logs für das Löschen eines TTL-Index mit der MongoDB API wird der Methodenname google.firestore.admin.v1.FirestoreAdmin.UpdateField verwendet.

Google Cloud Console

  1. Rufen Sie in der Google Cloud console die Datenbanken Seite auf.

    Zur Seite „Datenbanken“

  2. Wählen Sie die benötigte Datenbank aus der Liste der Datenbanken aus.

  3. Klicken Sie im Navigationsmenü auf Gültigkeitsdauer.

  4. Suchen Sie in der Tabelle „TTL-Index“ die Zeile für den TTL-Index. Klicken Sie in dieser Tabellenzeile auf die Schaltfläche Löschen (Papierkorb).

  5. Klicken Sie zur Bestätigung auf Löschen.

Die Console kehrt zur Seite Gültigkeitsdauer zurück. Wenn der Vorgang erfolgreich ist, entfernt Firestore mit MongoDB-Kompatibilität den TTL-Index aus der Tabelle.

gcloud

  1. Aktivieren Sie Cloud Shell in der Google Cloud console.

    Cloud Shell aktivieren

    Unten in der Google Cloud console wird eine Cloud Shell Sitzung gestartet und eine Eingabeaufforderung angezeigt. Cloud Shell ist eine Shell-Umgebung in der das Google Cloud CLI bereits installiert ist und Werte für Ihr aktuelles Projekt bereits festgelegt sind. Das Initialisieren der Sitzung kann einige Sekunden dauern.

  2. Verwenden Sie den firestore fields ttls update Befehl, um einen TTL-Index zu konfigurieren. Fügen Sie das Flag --async hinzu, um zu verhindern, dass die gcloud CLI auf den Abschluss des Vorgangs wartet.

    gcloud firestore fields ttls update ttl_field --collection-group=collection_name --disable-ttl
    

TTL-Löschvorgänge beobachten

Mit Cloud Monitoring können Sie Messwerte zu TTL-gesteuerten Löschvorgängen aufrufen. Firestore mit MongoDB-Kompatibilität bietet die folgenden Messwerte für TTL:

Messwerttyp Messwertname Messwertbeschreibung
firestore.googleapis.com/document/ttl_deletion_count Anzahl der Löschvorgänge aufgrund der Gültigkeitsdauer

Gesamtzahl der Dokumente, die von TTL-Indexen gelöscht wurden.

firestore.googleapis.com/document/ttl_expiration_to_deletion_delays Verzögerungen zwischen Ablauf der Gültigkeitsdauer und Löschvorgang

Zeit, die zwischen dem Ablauf eines Dokuments unter einem TTL Index und dem tatsächlichen Löschvorgang vergangen ist.

Informationen zum Einrichten eines Dashboards mit Messwerten für Firestore mit MongoDB-Kompatibilität finden Sie unter Benutzerdefiniertes Dashboard verwalten und Dashboard-Widgets hinzufügen.