Ich habe eine Couchbase Eimer, die eine Reihe von Dokumenten hat. Im Laufe der Zeit sehe ich, dass diese Dokumente schnell viel Speicherplatz belegen. Ich arbeite jetzt daran, TTL für alle neuen Dokumente festzulegen, die gespeichert werden. Gibt es eine Möglichkeit, TTL für alle vorhandenen Dokumente festzulegen oder die vorhandenen Dokumente basierend auf der Ablaufzeit zu löschen? Unterschiedliche Dokumente haben eine unterschiedliche Ablaufzeit basierend auf dem Dokumenttyp (von 15 Minuten bis 1 Monat). Können Sie mir einen Ansatz vorschlagen, den ich verwenden kann?Couchbase - Löschen von alten Dokumenten basierend auf TTL
Antwort
Sie können das Verfallsdatum für ein Dokument festlegen und dieses Dokument dann aktualisieren. Natürlich müsstest du alle Dokumente durchgehen und das Ablaufdatum für jeden festlegen.
Ich weiß nicht, wie dies in Java zu tun, aber es ist wahrscheinlich ähnlich wie .NET:
// get the document into a variable named 'doc', then
doc.Expiry = 123;
_bucket.Update(doc);
Wenn Sie nur ein paar bekannten Dokumente haben, dann ist dies einfach sein sollte.
Sie können auch eine N1QL-Abfrage verwenden, um Dokumente anhand der Ablaufzeit abzurufen. See this blog post for more information, aber das Wesentliche ist eine Abfrage wie folgt:
SELECT META(default).id, *
FROM default
WHERE DATE_DIFF_STR(STR_TO_UTC(exp_datetime),MILLIS_TO_UTC(DATE_ADD_MILLIS(NOW_MILLIS(),30,"second")),"second") < 30
AND STR_TO_UTC(exp_datetime) IS NOT MISSING;
Welche Dokumente würden auswählen, die in weniger als 30 Sekunden abläuft. Sie könnten also eine N1QL DELETE
Abfrage schreiben, die eine WHERE
Klausel verwendet.
UPDATE: Ein Mitarbeiter von Couchbase wies mich auf issue MB-16242. Sie können den Ablauf nicht mit einem N1QL UPDATE noch festlegen. Aber wie oben erwähnt, können Sie Dokumente basierend auf dem Ablauf auswählen/löschen.
- 1. TTL für Couchbase Eimer
- 2. Atomare Aktualisierung von 2 Couchbase-Dokumenten
- 3. Couchbase - was passiert mit alten Dokumenten auf einem Knoten, wenn er wieder online ist?
- 4. Sortieren von Dokumenten basierend auf Array-Feldgröße
- 5. Wie ein Feld in rethinkdb Dokumenten zu aktualisieren, basierend auf seinem alten Wert
- 6. Löschen von Dokumenten in PyMongo von ID
- 7. Löschen von Dokumenten von Solr mit UI?
- 8. Löschen von Solr-Dokumenten aus Solr Admin
- 9. Löschen alten Arbeitsbereich von TFS VS2010
- 10. Löschen XElement basierend auf Attribut
- 11. Groovy Couchbase Hilfe benötigt
- 12. automatische Löschung von Dokumenten in mongodb
- 13. MongoDB: Get Anzahl der gemeinsamen Dokumenten basierend auf dem Feldwert
- 14. Anzeige der alten Eingabe basierend auf der Bedingung
- 15. Batch-Zipper - muss die alten Dateien löschen
- 16. Return Couchbase Dokumente von Schlüsseln
- 17. Programmatisch Drucken von Dokumenten
- 18. Löschen Spalte basierend auf Typ in KDB +
- 19. Bash: Löschen basierend auf Datei Datumsstempel
- 20. löschen Vektoreinträge basierend auf einem anderen Vektor
- 21. Richtige Methode zum Migrieren von Dokumenten in couchbase (API 1.4.x -> 2.0.x)
- 22. MGO TTL indiziert Erstellung, um selektiv Dokumente zu löschen
- 23. neuen Inhalt schreiben alten Inhalt löschen
- 24. Löschen und Aktualisieren von Dokumenten im Lucene-Index
- 25. Lucene 6.0.0 Löschen von Dokumenten aus dem Index
- 26. Couchbase 2.0 vs Couchbase 1.8?
- 27. Löschen auf mehrere Zeilen basierend wählen
- 28. Löschen bestimmter Spalten basierend auf den Bedingungen
- 29. Zeilen löschen in Datenrahmen basierend auf Spaltenwerte
- 30. Wie kann ich die alten Daten von Logcat löschen?
Thnaks @mgroves. Ich nehme an, wenn ich TTL für alle diese Dokumente einstellen muss, muss ich Ansichten erstellen, um die Dokumente zu holen und die TTL für alle Dokumente festzulegen. Ich verwende 3.X, es unterstützt keine N1QL-Abfragen. Gibt es einen einfacheren Ansatz? –
In 3.x wird das der einfachste/empfohlene Ansatz sein. –
Danke @mgroves! –