gpt4 book ai didi

concurrency - Cassandra 中的柜台设计

转载 作者:可可西里 更新时间:2023-11-01 10:57:33 24 4
gpt4 key购买 nike

我正在尝试创建一个设计,其中多个 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有什么办法吗?我应该选择可以支持上述内容的不同数据库选择吗?我应该使用 Cassandra 并将计数器保存在 Redis 内存中并在第二步更新 Cassandra 吗?

最佳答案

可以读取计数器。您不能做的是在更新计数器时检索旧值。

你不能做的另一件事是在同一个表中放入计数器列和非计数器列(如果它不是主键的一部分)。

All non-counter columns in the table must be defined as part of the primary key

在您的示例中,counter_valuethreshold_valuestatus 不能在同一个表中。您必须将它们分派(dispatch)到两个表中:一个具有 counter_value 另一个具有 threshold_valuestatus 并且两个表具有相同的主键:url_name.

关于concurrency - Cassandra 中的柜台设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39225893/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com