我想創建一個設計,其中多個C++服務將保持計數器在數據庫中,類似如下:計數器設計卡桑德拉
CREATE TABLE page_view_counts
(url_name varchar,
counter_value counter,
threshold_value int,
status int,
PRIMARY_KEY (url_name)
);
我想使用Cassandra的,但我不知道,如果卡桑德拉能支持以下操作以原子的方式支持多個服務實例的併發:
READ counter_value
IF counter_value > threshold_value
SET status = 1 (BLOCKED)
ELSE
SET counter_value++
我見過卡桑德拉計數器(https://docs.datastax.com/en/cql/3.1/cql/cql_using/use_counter_t.html) ,但它似乎不能支持讀操作 - 它只是確保您可以增加計數器的某個值(不知道以前的狀態)。
卡桑德拉有什麼辦法嗎?我應該去選擇一個可以支持上述的數據庫嗎?我應該使用Cassandra並將計數器保存在Redis內存中,並在第二步中更新Cassandra?
感謝您的回覆。更新計數器時是否有任何解決方法來讀取舊值?還是應該在Cassandra之外使用一些額外的機制(如在Redis中保留相同的計數器)?你將表分成兩份的建議是有效的。 – gliatsos