1

以下のように、複数の 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 を更新する必要がありますか?

4

1 に答える 1