Auf dieser Seite wird beschrieben, wie Sie mit der MongoDB API, der Google Cloud Console und dem Befehlszeilentool Google Cloud CLI TTL-Indizes (Time-to-Live) konfigurieren.
Gültigkeitsdauer – Übersicht
Mit TTL-Indexen werden veraltete Daten automatisch aus Ihren Datenbanken entfernt. Mit einem TTL-Index wird ein bestimmtes Feld als Ablaufzeit für Dokumente in einer bestimmten Sammlung festgelegt. Mit 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
TTL-Löschvorgänge werden auf Ihre Kosten für das Löschen von Dokumenten angerechnet. Informationen zu den Preisen für Löschvorgänge finden Sie unter Cloud Firestore Enterprise-Version – Preise.
Limits und Einschränkungen
- Sie können nur einen TTL-Index pro Sammlung erstellen.
- Sie können maximal 500 TTL-Indizes haben.
TTL-Löschvorgang
Beachten Sie die folgenden wichtigen Verhaltensweisen beim TTL-basierten Löschen:
Das Löschen über TTL erfolgt nicht sofort. Abgelaufene Dokumente werden weiterhin in Abfragen und Suchanfragen angezeigt, bis sie durch den TTL-Prozess tatsächlich gelöscht werden. Bei TTL wird die Aktualität des Löschens gegen geringere 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 in einem Bulk-Vorgang gelöscht. Hinweis: Das Löschen von Daten in großen Mengen erfolgt nicht sofort, sondern hängt davon ab, wie viele Daten für die jeweilige Sammlung vorhanden sind.
Wenn ein Dokument ein Ablaufdatum 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 und Aktivierung des TTL-Index gelöscht.
Dokumente werden durch TTL nicht unbedingt in der Reihenfolge ihrer 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.
Cloud Firestore berücksichtigt immer das neueste TTL-Feld, um das Ablaufdatum 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äuft nur dann ab, wenn das TTL-Feld auf einen
Date and time-/BSON Date-Wert oder einenArray-Wert mit einemDate and time-/BSON Date-Wert festgelegt ist. Lassen Sie das Feld weg oder legen Sie einen Wert wienullfest, um das Ablaufen von Dokumenten auf Dokumentbasis zu deaktivieren.TTL soll die Auswirkungen auf andere Datenbankaktivitäten minimieren. Löschungen, die durch die TTL ausgelöst werden, haben eine niedrigere Priorität. Es gibt auch andere Strategien, um Trafficspitzen durch TTL-bedingte Löschungen abzufedern.
TTL-Felder und Nicht-TTL-Indizes
Ein TTL-Feld kann indexiert oder nicht indexiert sein. Da ein TTL-Feld jedoch ein Zeitstempel ist, kann sich die Einbeziehung des Felds in einen Nicht-TTL-Index bei höheren Traffic-Raten auf die Leistung auswirken. Wenn Sie ein Zeitstempelfeld in einen Index ohne TTL einfügen, können Hotspots entstehen, was gegen die Best Practices verstößt. Hotspots sind hohe Lese-, Schreib- und Löschraten für einen kleinen Dokumentbereich.
Berechtigungen
Das Hauptkonto, das einen TTL-Index erstellt oder löscht, benötigt die folgende Berechtigung im Projekt:
- Zum Aufrufen von TTL-Indizes sind die Berechtigungen
datastore.indexes.listunddatastore.indexes.geterforderlich. - Zum Erstellen oder Löschen von TTL-Indizes ist die Berechtigung
datastore.indexes.updateerforderlich. - Zum Prüfen des Status von TTL-Vorgängen sind
datastore.operations.listunddatastore.operations.geterforderlich.
Informationen zu Rollen, mit denen diese Berechtigungen zugewiesen werden, finden Sie unter Cloud Firestore Rollen von Identity and Access Management.
Hinweis
Bevor Sie gcloud CLI zum Verwalten von TTL-Indizes verwenden, aktualisieren Sie die Komponenten mit dem Befehl gcloud components update auf die neueste verfügbare Version:
gcloud components update
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 angegebenes Feld, um Dokumente zu identifizieren, die gelöscht werden können.
Das TTL-Feld muss entweder auf einen Timestamp-/BSON Date-Wert oder auf einen Array-Wert mit einem Timestamp-/BSON Date-Wert gesetzt werden. Sie können ein vorhandenes Feld auswählen oder ein Feld angeben, 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, die aktuelle Zeit oder eine Zeit 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
expireAterstellen, den Sie dann vorhandenen Dokumenten hinzufügen.Wenn Sie einen anderen Datentyp verwenden oder den TTL-Feldwert 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 beim Aufrufen der Methode createIndex() ein:
db.COLLECTION_NAME.createIndex({"TTL_FIELD": 1, "expireAfterSeconds": EXPIRATION_OFFSET_SECONDS})
Beispiel:
db.restaurants.createIndex({"ts": 1, "expireAfterSeconds": 3600})
expireAfterSeconds gibt die TTL als TTL-Index an 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 können nicht in Abfragen verwendet werden.
- Sie können nur einen TTL-Index pro Sammlung erstellen.
- Audit-Logs für die Erstellung von TTL-Indizes mit der MongoDB API verwenden den Methodennamen
google.firestore.admin.v1.FirestoreAdmin.UpdateField.
Google Cloud Console
Rufen Sie in der Google Cloud Console die Seite Datenbanken auf.
Wählen Sie die benötigte Datenbank aus der Liste der Datenbanken aus.
Klicken Sie im Navigationsmenü auf Time-to-Live.
Klicken Sie auf Richtlinie erstellen.
Geben Sie einen Namen für die Sammlung und einen Namen für das Zeitstempelfeld ein.
Klicken Sie auf Erstellen.
Die Console kehrt zur Seite Time-to-live zurück. Wenn der Vorgang erfolgreich gestartet wird, fügt die Seite der Tabelle „TTL-Indizes“ einen Eintrag hinzu. Bei einem Fehler wird auf der Seite eine Fehlermeldung angezeigt.
gcloud
Installieren und initialisieren Sie die gcloud CLI-Befehlszeile.
Verwenden Sie den Befehl
firestore fields ttls update, um einen TTL-Index zu konfigurieren. Fügen Sie das Flag--asynchinzu, 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
Dauer der TTL-Indexierung
Selbst bei einer leeren Datenbank kann es zehn Minuten oder länger dauern, einen TTL-Index zu erstellen. Wenn Sie einen Vorgang gestartet haben, wird er durch Schließen des Terminals nicht abgebrochen.
TTL-Indexe ansehen
So rufen Sie TTL-Indizes auf:
MongoDB API
Verwenden Sie die Methode listIndexes(), um TTL-Indizes aufzurufen. Beispiel:
db.restaurants.listIndexes()
Die Ausgabe enthält sowohl TTL- als auch Nicht-TTL-Indizes. TTL-Indizes enthalten die Option expireAfterSeconds.
Google Cloud Console
Rufen Sie in der Google Cloud Console die Seite Datenbanken auf.
Wählen Sie die benötigte Datenbank aus der Liste der Datenbanken aus.
Klicken Sie im Navigationsmenü auf Time-to-Live.
In der Konsole werden TTL-Indizes für Ihre Datenbank aufgeführt, einschließlich des Status jedes Index.
gcloud
Installieren und initialisieren Sie die gcloud CLI-Befehlszeile.
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
Verwenden Sie Folgendes, um TTL-Indizes unter einer bestimmten Sammlung aufzulisten:
gcloud firestore fields ttls list --collection-group=collection_name
Betriebsdetails anzeigen
Mit dem Befehl 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 anzeigen zu lassen:
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 anhand des Indexnamens löschen
db.restaurants.dropIndex("ts_1")
TTL-Index mit Indexdefinition löschen
db.restaurants.dropIndex({"ts": 1})
Audit-Logs zum Löschen eines TTL-Index mit der MongoDB API verwenden den Methodennamen google.firestore.admin.v1.FirestoreAdmin.UpdateField.
Google Cloud Console
Rufen Sie in der Google Cloud Console die Seite Datenbanken auf.
Wählen Sie die benötigte Datenbank aus der Liste der Datenbanken aus.
Klicken Sie im Navigationsmenü auf Time-to-Live.
Suchen Sie in der TTL-Indextabelle nach der Zeile für den TTL-Index. Klicken Sie in dieser Tabellenzeile auf die Schaltfläche Löschen (Papierkorb).
Klicken Sie zur Bestätigung auf Löschen.
Die Console kehrt zur Seite Time-to-live zurück. Bei Erfolg entfernt Cloud Firestore den TTL-Index aus der Tabelle.
gcloud
Installieren und initialisieren Sie die gcloud CLI-Befehlszeile.
Verwenden Sie den Befehl
firestore fields ttls update, um einen TTL-Index zu konfigurieren. Fügen Sie das Flag--asynchinzu, 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öschvorgänge für die Gültigkeitsdauer |
Gesamtzahl der von TTL-Indizes 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 in einem TTL-Index und dem tatsächlichen Löschen vergangen ist. |
Informationen zum Einrichten eines Dashboards mit Cloud Firestore-Messwerten finden Sie unter Benutzerdefinierte Dashboards verwalten und Dashboard-Widgets hinzufügen.