Ich habe eine Kassandra Frage. Wissen Sie, wie Cassandra Aktualisierungen/Inkremente von Zählern durchführt?Wie schnell Zähler in Cassandra w/o Staleness zu erhöhen
Ich möchte eine Sturmschraube (CassandraCounterBatchingBolt von Storm-Contrib Repo auf Github) verwenden, die in Cassandra schreibt. Aber ich bin nicht sicher, wie ein Teil der Umsetzung des incrementCounterColumn() Methode funktioniert .. und es gibt auch die Grenzen mit cassandra Zähler (aus: http://wiki.apache.org/cassandra/Counters), die sie nutzlos für meine Szenario IMHO macht:
Wenn ein Schreibvorgang unerwartet fehlschlägt (Timeout oder Verbindungsverlust zum Koordinatorknoten), weiß der Client nicht, ob der Vorgang ausgeführt wurde. Ein erneuter Versuch kann zu einer Überzählung von CASSANDRA-2495 führen.
Zählerentfernung ist an sich begrenzt. Zum Beispiel, wenn Sie sehr schnell die Sequenz ausgeben „Schritt, zu entfernen, erhöhen“ es möglich ist, die Entfernung
Wie dem auch sei verloren, hier ist mein Szenario:
aktualisiere ich die gleichen Zähler schneller als die Aktualisierungen werden an andere Cassandra-Knoten weitergegeben.
Beispiel:
Say I 3 cassandra Knoten haben. Die Zähler auf jedem dieser Knoten sind 0.
Node1: 0, Knoten2: 0, node3: 0Ein Zuwachs kommt: 5 -> Knoten 1: 0, Knoten2: 0, node3: 0
Increment am Knotenpunkt beginnt, 2 - noch
node1 zu node1 und node3 fortzupflanzen benötigt: 0, node2: 5, node3: 0In der Zwischenzeit kommt ein weiteres Inkrement, bevor vorheriges Inkrement
ausbreitet: 3 -> Knoten 1: 0, Knoten2: 5, Knoten3: 0Unter der Annahme, 3 beginnt an einem anderen Knoten als die 5 haben uns begonnen haben:
Node1: 3, Knoten2: 5, node3: 0
Wenn nun 3 zu dem anderen Knoten als eine Erhöhung propagiert wird und nicht als neuer Wert (und das gleiche für 5) dann würden schließlich die Knoten alle gleich 8 und das ist was ich will.
Wenn 3 überschreibt 5 (weil es einen späteren Zeitstempel hat) ist das problematisch - nicht was ich will.
Wissen Sie, wie diese Aktualisierungen/Inkremente von Cassandra gehandhabt werden?
Hinweis, dass ein Lese vor einem Schreib ist immer noch anfällig für das gleiche Problem in Abhängigkeit von der Replika-Knoten der Lese ausführt (Quorum kann immer noch fehlschlagen, wenn die Ausbreitung entlang ist nicht weit)
ich auch denke, dass vielleicht, indem ich einen Cache s/w setze, könnte mein Sturmbolzen und Cassandra dieses Problem lösen, aber das ist eine Geschichte für ein anderes Mal.
Danke für die sehr gründliche Erklärung. Ausgezeichneter Link und Post! Ja, der Grund, warum die letzten Zeitstempel gewinnen, ist, warum ich diese Frage gestellt habe. Jetzt verstehe ich, dass es eine Inkrementierungsanweisung für Zähler gibt (anstatt ein Lesen + Schreiben). "Ist das wahr?" Wenn ich in die Cloud ziehe, werden die Verzögerungen zunehmen und um die falsche Zahl zu lesen, muss ich nach dem Schreiben erhöhen, wie lange ich aggregiere, bevor ich in db speichere. Ich hoffe, dass ein Zählerinkrementbefehl existiert. – Adrian
Es gibt eine Inkrement-Anweisung, und Sie müssen nicht lesen, bevor Sie ein Inkrement durchführen. Wenn Sie mit dem Konsistenzlevel QUORUM inkrementieren und mit dem Konsistenzlevel QUORUM lesen, sollten Sie nie Inkonsistenzen in den Zählungen sehen. – Theo
Ich sollte hinzufügen, dass es natürlich die Möglichkeit gibt, in Ausnahmefällen wie Partitionen und Abstürzen zu viel oder zu wenig zu zählen. – Theo