我正在创建一个需要如下cassandra表结构的调度器服务。
CREATE TABLE IF NOT EXISTS spc_cmd_scheduler (
id timeuuid,
router_id text,
account_id text,
mode text,
triggered_by text,
retry_count smallint,
PRIMARY KEY ((triggered_by,retry_count),id)
)WITH CLUSTERING ORDER BY (id ASC);
当我用pk进行查询时,我得到了下面的错误。我可以知道原因吗?
select count(*) from spc_cmd_scheduler where triggered_by = 'ROUTER_ONBOARD' and retry_count < 3;
InvalidRequest: Error from server: code=2200 [Invalid query] message="Cannot execute this query as it might involve data filtering and thus may have unpredictable performance. If you want to execute this query despite the performance unpredictability, use ALLOW FILTERING"
我知道“允许过滤”可以解决我的问题,但是我想知道表结构有什么问题。设计这张table的最佳方法是什么。
为了说明我的需求背景,我需要运行一个调度程序来扫描这个表并发出一个命令,一旦成功就删除这个条目。如果命令失败,我需要重试3次。所以这个表需要select、update和delete操作。
1条答案
按热度按时间f87krz0w1#
对你来说,问题是
retry_count
列是分区键的一部分,我们只能使用相等运算符(=
或者IN
)对于分区键列。不等式运算(<
,>
等),并且需要指定所有前面的群集列。