2016-06-27 6 views
1

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

1

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

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? –

+1

In 3.x wird das der einfachste/empfohlene Ansatz sein. –

+1

Danke @mgroves! –

Verwandte Themen