Datenaufbewahrung mit TTL-Indizes 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.

Übersicht über die Gültigkeitsdauer

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

Preise

Bei TTL-Löschvorgängen werden verwaltete Löscheinheiten verwendet. Preisinformationen finden Sie unter Preise für die Cloud Firestore Enterprise-Edition.

Limits und Einschränkungen

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

TTL-Löschung

Beachten Sie die folgenden wichtigen Verhaltensweisen des TTL-gesteuerten Löschens:

  • Das Löschen über TTL erfolgt nicht sofort. Abgelaufene Dokumente werden weiterhin in Abfragen und Suchanfragen angezeigt, bis sie vom TTL-Prozess tatsächlich gelöscht werden. Bei TTL wird die Aktualität des Löschens gegen die geringeren Gesamtbetriebskosten für Löschvorgänge eingetauscht. Daten werden in der Regel innerhalb von 24 Stunden nach ihrem Ablaufdatum 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 dieses Bulk-Löschen auch 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.

  • Die TTL löscht Dokumente nicht unbedingt in der Reihenfolge ihrer Ablaufzeitstempel.

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

  • Cloud Firestore berücksichtigt immer das neueste TTL-Feld, um den Ablauf 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.

  • Cloud Firestore lässt ein Dokument nur dann ablaufen, wenn das TTL-Feld entweder auf einen Date and time/BSON Date-Wert oder einen Array-Wert mit einem Date and time/BSON Date-Wert festgelegt ist. Lassen Sie das Feld leer oder legen Sie einen Wert wie null fest, um den Ablauf pro Dokument zu deaktivieren.

  • TTL soll die Auswirkungen auf andere Datenbankaktivitäten minimieren. Löschvorgänge, die durch die TTL ausgelöst werden, werden mit einer niedrigeren Priorität behandelt. Es gibt auch andere Strategien, um Traffic-Spitzen durch TTL-gesteuerte Löschvorgänge zu glätten.

Unterschiede zu TTL-Indizes

Im Gegensatz zu anderen Firestore-Indexen werden TTL-Indexe bei der Abfrageplanung nicht zur Leistungssteigerung verwendet. 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 eine hohe Anzahl von Schreib- und Löschvorgängen in einem engen Bereich von Dokumenten konzentriert ist. Dies kann sich in Zeiten mit hohem Schreibaufkommen negativ auf die Skalierungsleistung auswirken.

Berechtigungen

Das Hauptkonto, 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, die diese Berechtigungen zuweisen, finden Sie unter Cloud Firestore Identity and Access Management-Rollen.

TTL-Index erstellen

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

Bei der TTL wird ein bestimmtes Feld verwendet, um Dokumente zu identifizieren, die gelöscht werden können. Das TTL-Feld muss entweder auf einen Timestamp/BSON Date-Wert oder einen Array-Wert mit einem Timestamp/BSON Date-Wert festgelegt werden. 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 des TTL-Felds festlegen:

  • Der Wert des TTL-Felds kann eine Zeit in der Zukunft, in der Gegenwart oder in der Vergangenheit sein. Wenn der Wert ein Zeitpunkt in der Vergangenheit ist, kann das Dokument sofort gelöscht werden. Sie können beispielsweise einen TTL-Index mit dem Feld expireAt erstellen, den Sie dann vorhandenen Dokumenten hinzufügen.

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

So erstellen Sie einen TTL-Index:

MongoDB API

Fügen Sie beim Aufrufen der Methode createIndex() die Indexoption expireAfterSeconds hinzu:

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 Beschrä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 Seite Datenbanken 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 Namen für die Sammlung und einen Namen für das Zeitstempelfeld ein.

  6. Optional: Konfigurieren Sie einen Ablauf-Offset. Geben Sie einen Wert ein und wählen Sie eine Einheit aus (Tage, Stunden, Minuten oder Sekunden). Der Standardwert ist 0.

  7. Klicken Sie auf Erstellen.

In der Console wird wieder die Seite Gültigkeitsdauer angezeigt. Wenn der Vorgang erfolgreich gestartet wird, wird der Tabelle mit den TTL-Indexen ein Eintrag hinzugefügt. Bei einem Fehler wird auf der Seite eine Fehlermeldung angezeigt.

gcloud

  1. Installieren und initialisieren Sie die gcloud CLI-Befehlszeile.

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

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

    Fügen Sie das Flag --expiration-offset hinzu, um einen TTL-Index mit einem Ablauf-Offset zu aktivieren:

     gcloud firestore fields ttls update \
      ttl_field \
      --collection-group=collection_name \
      --enable-ttl \
      --expiration-offset=expiration_offset 

    Ersetzen Sie expiration_offset durch eine Dauer, z. B. 7d für 7 Tage oder 24h für 24 Stunden. Wenn Sie dieses Flag weglassen, wird der Ablauf-Offset standardmäßig auf 0 gesetzt.

Dauer der TTL-Indexerstellung

Das Erstellen 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 Methode listIndexes(), um TTL-Indexe aufzurufen. Beispiel:

db.restaurants.listIndexes()

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

Google Cloud Console

  1. Rufen Sie in der Google Cloud Console die Seite Datenbanken 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 TTL-Indexe für Ihre Datenbank und der Status der einzelnen Indexe aufgeführt.

gcloud

  1. Installieren und initialisieren Sie die gcloud CLI-Befehlszeile.

  2. Verwenden Sie den Befehl firestore fields ttls list, um einen TTL-Index zu konfigurieren. Mit dem folgenden Befehl werden alle TTL-Indizes 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 gcloud CLI können Sie weitere Details zu einem TTL-Index im Status CREATING aufrufen.

Verwenden Sie den Befehl operations list, um alle laufenden und kürzlich abgeschlossenen Vorgänge aufzurufen:

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 Methode dropIndex(), um einen TTL-Index zu löschen. Beispiel:

TTL-Index mit Indexnamen löschen

db.restaurants.dropIndex("ts_1")

TTL-Index mithilfe der Indexdefinition löschen

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

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

Google Cloud Console

  1. Rufen Sie in der Google Cloud Console die Seite Datenbanken 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 TTL-Indextabelle die Zeile für den TTL-Index. Klicken Sie in dieser Tabellenzeile auf den Button Löschen (Papierkorb).

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

In der Console wird wieder die Seite Gültigkeitsdauer angezeigt. Bei Erfolg entfernt Cloud Firestore den TTL-Index aus der Tabelle.

gcloud

  1. Installieren und initialisieren Sie die gcloud CLI-Befehlszeile.

  2. Verwenden Sie den Befehl firestore fields ttls update, um einen TTL-Index zu konfigurieren. Fügen Sie das Flag --async hinzu, um zu verhindern, dass 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 überwachen

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

Messwerttyp Messwertname Messwertbeschreibung
firestore.googleapis.com/document/ttl_deletion_count Anzahl der Löschungen nach Gültigkeitsdauer

Gesamtzahl der durch TTL-Indexe gelöschten Dokumente.

firestore.googleapis.com/document/ttl_expiration_to_deletion_delays Verzögerungen beim Löschen nach Ablauf der Gültigkeitsdauer

Die Zeit, die zwischen dem Ablauf eines Dokuments gemäß einem TTL-Index und dem tatsächlichen Löschen vergangen ist.

Informationen zum Einrichten eines Dashboards mit Cloud Firestore-Messwerten finden Sie unter Benutzerdefiniertes Dashboard verwalten und Dashboard-Widgets hinzufügen.