我正在尝试创建一个设计,其中多个 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 内存中并在第二步中更新 Cassandra 吗?