Cassandra ttl auf eine Zeile
Ich weiß, dass es TTLs auf Spalten in Kassandra. Aber ist es auch möglich, eine TTL, die auf einer Zeile? Die Einrichtung eines TTL-in jeder Spalte nicht mein problem lösen, wie kann man in der folgenden Anwendungsfall:
Irgendwann einen Prozess löschen will eine komplette Zeile mit einem TTL - (sagen wir Zeile "A" mit TTL 1 Woche). Es könnte dies durch den Austausch aller vorhandenen Spalten mit dem gleichen Inhalt aber mit einer TTL von 1 Woche.
Aber es kann ein anderer Prozess gleichzeitig auf die Zeile "A", die fügt neue Spalten, oder ersetzt bestehende ohne TTL-weil dieser Prozess kann nicht wissen, dass die Zeile gelöscht werden (es läuft parallel!). So nach 1 Woche alle Spalten der Zeile "A" wird gestrichen, weil der TTL-außer für diese neu eingefügten lieben. Und ich auch wollen, dass Sie gelöscht werden.
So ist es oder wird es Cassandra Unterstützung für diesen Anwendungsfall, oder muss ich etwas umsetzen?
Freundlichen GRÜßEN
Stefan
InformationsquelleAutor snd | 2013-05-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es keine Möglichkeit der Einstellung der TTL auf eine Zeile in Cassandra derzeit. TTLs sind konzipiert für das löschen einzelner Spalten, wenn Ihre Lebensdauer ist bekannt, wenn Sie geschrieben werden.
Könnten Sie erreichen, was Sie wollen durch die Verzögerung Ihres Prozesses - will, statt einfügen einer TTL von 1 Woche, führen Sie eine Woche später, und löschen Sie die Zeile. Zeile gelöscht haben die folgende Semantik: jede Spalte eingefügt, kurz bevor gelöscht aber Spalten eingefügt, nur nach nicht.
Wenn Spalten eingefügt werden, die in Zukunft noch gelöscht werden müssen, könnten Sie eine Zeile einfügen löschen mit einem Zeitstempel in der Zukunft zu gewährleisten, dies aber sehr vorsichtig sein: wenn Sie später einlegen wollte, die in dieser Reihe konnte man Sie nicht, Spalten würde nur verschwinden, wenn geschrieben, die Zeilen (bis auf die veraltete garbage Collection).
Sie brauchen nicht zu wissen, die Namen der Spalten, wenn mit Zeile löscht.
Aaah, ok 🙂 ich habe gerade überprüft es. Ich wusste das nicht funktionieren würde. Ich denke, wir werden es auf diese Weise benutzen: löschen Wir die Zeile mit einem Zeitstempel in der Zukunft (1 Woche) und legen Sie eine GELÖSCHT-Marker mit dem gleichen timestamp und eine TTL, die erlischt bald darauf. Also das löschen in der Zukunft löscht auch die updates von Auger-Prozessen und den GELÖSCHT-Marker verhindert, dass andere Benutzer beim einfügen in eine gelöschte Zeile. Und nachdem der GELÖSCHT-Markierung abgelaufen ist, wird die Zeile wieder eingesetzt werden kann. Schön. Danke für den Hinweis.
Löschen einer Zeile mit Zeitstempel t bedeutet löschen Sie alle Spalten mit timestamp <= t. Also, wenn Sie eine Zeile löschen mit timestamp-jetzt+1 Woche, es wird alles gelöscht jetzt und in Zukunft Einsätze für 1 Woche. Es wird nicht wie ein TTL und halten Sie die Spalten für eine Woche. Sie müssen löschen Sie 1 Woche später.
Ja, aber es erfüllt auch unsere Anwendungsfall. Wir müssen nur einige Daten mit TTL (also die GELÖSCHT-Markierung). Die anderen Daten können dort bleiben, mit einer TTL oder gelöscht werden können sofort. Das Ziel ist, dass nach einer Woche es gibt keine DATEN, die Links von der gleichzeitigen und nicht-gleichzeitigen Schriftstellern.
InformationsquelleAutor Richard
Können Sie einstellen, ttl) für eine Zeile in Cassandra 3 mit
InformationsquelleAutor Mahesh Reddy
Obwohl ich nicht empfehlen, es ist ein Cassandra Weg um das problem zu beheben:
Holen Sie sich die aktuellen TTL-ein Wert, dann nutzen Sie das Ergebnis zur Einstellung der TTL in einer INSERT-oder UPDATE:
Also... ich denke, dass die
SELECT TTL()
langsam ist (aus der Erfahrung mit TTL - () und die WRITETIME() in CQL-Befehle). Nicht nur, dass die TTL ist korrekt zum Zeitpunkt der select-Ergebnisse erzeugt werden, auf die Cassandra-Knoten, sondern durch die Zeit, die das einfügen geschieht, wird es aus sein. Cassandra sollte angeboten haben Zeit zu löschen eher als eine time to live...Also wie erwähnt von Richard, Ihrem eigenen Prozess zum löschen von Daten nach 1 Woche ist wohl sicherer. Sie sollten eine Spalte zu speichern, das Datum der Erstellung oder das Datum, Wann die Daten veraltet. Dann ein Prozess im hintergrund Lesen kann, dass Datum und wenn die Daten gelten als veraltet, löschen Sie die gesamte Zeile.
Andere Prozesse können auch das Datum zu wissen, ob diese Zeile als gültig angesehen wird oder nicht! (also selbst wenn es noch nicht gelöscht, können Sie trotzdem die Zeile als ungültig, wenn das Datum überschritten ist.)
InformationsquelleAutor Alexis Wilke