我刚刚开始在 Cassandra 3.7.0 上使用 SASI 索引,遇到了一个问题,我怀疑这是一个错误。我几乎没有追踪到该错误出现的情况,以下是我发现的:
使用 SASI 索引查询时,它可能会错误地返回 0 行,改变一点条件,它又可以工作了,就像下面的CQL代码:
CREATE TABLE IF NOT EXISTS roles (
name text,
a int,
b int,
PRIMARY KEY ((name, a), b)
) WITH CLUSTERING ORDER BY (b DESC);
insert into roles (name,a,b) values ('Joe',1,1);
insert into roles (name,a,b) values ('Joe',2,2);
insert into roles (name,a,b) values ('Joe',3,3);
insert into roles (name,a,b) values ('Joe',4,4);
CREATE TABLE IF NOT EXISTS roles2 (
name text,
a int,
b int,
PRIMARY KEY ((name, a), b)
) WITH CLUSTERING ORDER BY (b ASC);
insert into roles2 (name,a,b) values ('Joe',1,1);
insert into roles2 (name,a,b) values ('Joe',2,2);
insert into roles2 (name,a,b) values ('Joe',3,3);
insert into roles2 (name,a,b) values ('Joe',4,4);
CREATE CUSTOM INDEX ON roles (b) USING 'org.apache.cassandra.index.sasi.SASIIndex'
WITH OPTIONS = { 'mode': 'SPARSE' };
CREATE CUSTOM INDEX ON roles2 (b) USING 'org.apache.cassandra.index.sasi.SASIIndex'
WITH OPTIONS = { 'mode': 'SPARSE' };
注意到我只更改表roles2从表roles's '聚类顺序 (b DESC)' into '聚类顺序 (b ASC)'.
使用语句查询时select * from roles2 where b<3;
,结果是两行:
name | a | b
------+---+---
Joe | 1 | 1
Joe | 2 | 2
(2 rows)
但是,如果查询select * from roles where b<3;
,它根本没有返回任何行:
name | a | b
------+---+---
(0 rows)
这不是出现错误的唯一情况,有一次我在“end”列上创建了一个具有特定名称(如“end_idx”)的 SASI 索引,错误出现了,当我没有指定索引名称时,它就消失了。
请帮我确认这个错误,或者告诉我是否错误地使用了 SASI 索引。