Eines der häufigsten Szenarien bei der Arbeit mit einer Datenbank ist die automatische Bereinigung einiger Tabellen basierend auf der Zeit. Beispielsweise haben Sie möglicherweise eine Jobtabelle, um Hintergrundjobs in Ihrem Produkt zu verfolgen, und möchten nur Jobs für die letzte Stunde behalten. Typischerweise wird es so implementiert, dass Sie am Ende einen Daemon-Prozess schreiben, der regelmäßig ausgeführt wird und Ihre Tabellen bereinigt. Da dies ein so häufiger Prozess ist, haben die Leute bei MongoDB diese Funktionalität in die Datenbank eingebaut, die in Ihren MongoDB-Bereitstellungen genutzt werden kann! Es heißt „TTL-Indizes“. So können Sie TTL-Indizes in zwei einfachen Schritten verwenden:
-
Schritt 1:Datumsfeld hinzufügen
Fügen Sie Ihrem Dokument ein Datumsfeld hinzu, um das Alter des Dokuments anzugeben. MongoDB verwendet dieses Feld, um festzustellen, ob Ihr Dokument abgelaufen ist und entfernt werden muss. Wenn Sie das Dokument länger aufbewahren möchten, aktualisieren Sie dieses Dokument einfach mit einem aktualisierten Datum. Im folgenden Beispiel habe ich meiner Jobsammlung ein Feld „creationTime“ hinzugefügt:
db.jobs.insert( { "name" : testjob "creationTime": new Date('Oct 30, 2013: 11:00:00'), "type": 2, } )
-
Schritt 2:Fügen Sie einen TTL-Index hinzu
Fügen Sie Ihrer Sammlung in diesem Feld einen TTL-Index hinzu. In diesem Beispiel unten verwenden wir einen expireAfterSeconds-Wert von 3600. Dadurch laufen Jobs nach jeder Stunde ab:
db.jobs.ensureIndex( { "creationTime": 1 }, { expireAfterSeconds: 3600 } )
Der TTL-Daemon wird alle 60 Sekunden ausgeführt, sodass Ihr Dokument innerhalb von etwa 60 Sekunden nach Ablauf gelöscht wird. Ein weiterer Vorteil von TTL-Indizes besteht darin, dass sie sich auch wie normale Indizes verhalten – Sie können also das Datumsfeld abfragen und der Abfrageplan verwendet den Index. Weitere Einzelheiten finden Sie in der MongoDB-Dokumentation zu TTL-Indizes.