Cassandra Optimistic Locking

Ich habe eine Kassandra table1:

CREATE TABLE Policy.table1 (
name VARCHAR ,
date TIMESTAMP ,
version_num INT,
PRIMARY KEY   (
         name
         )) WITH caching = 'all'
     --   and memtable_flush_period_in_ms = 7200 ;
     ;

Ich muss optimistische Sperren für diese Tabelle implementieren. Wenn wir eine Zeile aus table1 lesen, erinnern wir uns an deren version_num. Und wenn wir diese Zeile aktualisieren möchten, vergleichen wir den aktuellen Wert für version_num und den Wert, an den wir uns erinnert haben. Außerdem müssen wir version_num bei jedem Update erhöhen.

Probleme:

Wir können version_num nicht in die where-Klausel einfügen, dies erzeugt einen Fehler: Bad Request: Non PRIMARY KEY version_num gefunden in where-Klausel:

 update table where name = 'abc' and version = 3

Wir können version_num nicht als Teil des Primärschlüssels festlegen, da wir dessen Wert aktualisieren müssen

Wenn wir version_num indizieren, hilft dies nicht für Aktualisierungsanweisungen. Dieselbe Ausnahme wird ausgelöstDie einzige Möglichkeit, die ich sehe, besteht darin, den aktuellen version_num-Wert von Java abzurufen. Wenn der erwartete und der tatsächliche version_num-Wert identisch sind, führen Sie das Update aus. Das Problem ist, dass wir in diesem Fall keine atomare Operation haben, um den Wert version_num zu überprüfen und die Zeile zu aktualisieren.

Sehen Sie eine Lösung für dieses Problem?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage