Ich versuche, ein Design zu schaffen, in der mehr C++ Dienste Zähler in einer Datenbank, so etwas wie unten halten:Zähler Design in Cassandra
CREATE TABLE page_view_counts
(url_name varchar,
counter_value counter,
threshold_value int,
status int,
PRIMARY_KEY (url_name)
);
Ich denke Cassandra zu verwenden, aber ich bin nicht sicher, ob Cassandra kann unterstützen die folgende Operation in einer atomaren Weise Gleichzeitigkeit der mehreren Service-Instanzen zu unterstützen:
READ counter_value
IF counter_value > threshold_value
SET status = 1 (BLOCKED)
ELSE
SET counter_value++
I Cassandra Zähler gesehen haben (https://docs.datastax.com/en/cql/3.1/cql/cql_using/use_counter_t.html) aber es scheint, dass es nicht die LESE-Operation unterstützen kann - es ist nur stellt sicher, dass Sie den Zähler um einen bestimmten Wert erhöhen können (ohne den vorherigen Status zu kennen).
Gibt es einen Weg für Cassandra? Sollte ich eine andere Datenbank wählen, die das oben genannte unterstützt? Soll ich Cassandra benutzen und die Counter in einem Redis-Speicher behalten und Cassandra in einem zweiten Schritt aktualisieren?
Danke für die Antwort. Gibt es eine Problemumgehung, um den alten Wert während der Aktualisierung des Leistungsindikators zu lesen? Oder sollte ich einen zusätzlichen Mechanismus außerhalb von Cassandra verwenden (wie die gleichen Zähler in Redis zu halten)? Ihr Vorschlag, die Tabelle in zwei Teile aufzuteilen, ist gültig. – gliatsos