Mit MongoDB lassen Sie Dokumente nach einer angegebenen Anzahl von Sekunden in Go ablaufen
Mithilfe von TTL-Indizes können Sie mit MongoDB Dokumente nach einer angegebenen Anzahl von Sekunden automatisch ablaufen lassen Dauer. Dieser Artikel zeigt, wie man dies in Go mit dem offiziellen Mongo-Go-Treiber erreicht.
Anhand der MongoDB-Dokumentation zeigt der Code, wie man:
Das bereitgestellte Beispiel funktioniert jedoch ordnungsgemäß und das Problem hängt nicht mit dem Code zusammen.
Grundlegendes zum TTL-Indexverhalten
Der Parameter „expireAfterSeconds“ gibt die Dauer nach dem Feld „createdAt“ an, nach der das Dokument als abgelaufen betrachtet werden soll. Die Löschung abgelaufener Dokumente erfolgt jedoch nicht sofort.
Laut MongoDB-Dokumentation:
"Der TTL-Index garantiert nicht, dass abgelaufene Daten sofort nach Ablauf gelöscht werden. Es kann zu Verzögerungen kommen zwischen dem Zeitpunkt, zu dem ein Dokument abläuft, und dem Zeitpunkt, zu dem MongoDB das Dokument aus der Datenbank entfernt.“
Hintergrundaufgabe zum Löschen
MongoDB verfügt über eine Hintergrundaufgabe, die abgelaufene Dokumente entfernt alle 60 Sekunden. Daher können Dokumente nach Ablauf bis zu 60 Sekunden in der Sammlung verbleiben. Wenn die Datenbank außerdem stark ausgelastet ist, kann es zusätzliche Zeit dauern, bis alle abgelaufenen Dokumente gelöscht sind.
Auflösung
In Ihrem Code-Snippet erwarten Sie einige Dokumente werden nach 5 Sekunden gelöscht (basierend auf der Option „expireAfterSeconds“), warten jedoch nur Sekunden nach dem Einfügen auf die Überprüfung. Um die Funktionalität korrekt zu testen, sollten Sie ausreichend Zeit (mindestens mehrere Minuten) einplanen, damit die Hintergrundaufgabe ausgeführt und die abgelaufenen Dokumente gelöscht werden kann.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3