以下のように、複数の C++ サービスがデータベースにカウンターを保持する設計を作成しようとしています。
CREATE TABLE page_view_counts
(url_name varchar,
counter_value counter,
threshold_value int,
status int,
PRIMARY_KEY (url_name)
);
Cassandra を使用することを考えていますが、複数のサービス インスタンスの同時実行をサポートするために、Cassandra がアトミックな方法で次の操作をサポートできるかどうかはわかりません。
READ counter_value
IF counter_value > threshold_value
SET status = 1 (BLOCKED)
ELSE
SET counter_value++
Cassandra カウンター ( https://docs.datastax.com/en/cql/3.1/cql/cql_using/use_counter_t.html ) を見たことがありますが、READ 操作をサポートしていないようです - カウンターを増やすことができるようにするだけです。ある値によって (以前の状態を知らずに)。
カサンドラに方法はありますか?上記をサポートできる別のデータベースを選択する必要がありますか? Cassandra を使用してカウンターを Redis メモリに保持し、2 番目のステップで Cassandra を更新する必要がありますか?