当指定了分区键时,在cassandra中对二级索引的查询中使用cql

lh80um4z  于 2021-06-09  发布在  Cassandra
关注(0)|答案(0)|浏览(220)

我正在使用一个系统,它在cassandra中使用了一个二级索引和一个复合主键,例如。

CREATE TABLE table (
  a bigint,
  b bigint,
  c bigint,
  PRIMARY KEY (a, b, c)
) WITH CLUSTERING ORDER BY (b ASC, c ASC)
CREATE INDEX secondary_index ON table (c);

使用该表的应用程序中的操作之一是获取指定分区键和辅助索引键的许多行(通常是十行)。目前,它并行地对每个(分区密钥、次密钥)对执行一个查询,工作正常,例如:

select * from table where a = ? and c = ?;

但是,我注意到系统的工作负载是这样的:大多数情况下,请求行中的分区键有明显的重叠,有时超过一半的行具有相同的分区键。因此,我认为对每个分区键执行一个查询可能更有效,在次键上使用in子句,在大多数情况下,将总查询数减少到个位数,并减少集群上的读取查询开销。
但是,至少从cqlsh执行,这似乎是不允许的:

select * from table where a = ? and c in (...);
InvalidRequest: Error from server: code=2200 [Invalid query] message="PRIMARY KEY column "c" cannot be restricted as preceding column "b" is not restricted"

这是不允许的,我还得继续单独询问吗?是不是有什么原因不能提高效率?或者这只是cql的一个限制,在查询中不能使用辅助索引?可能有一个问题,因为二级索引键也在主键中,而cassandra试图使用它来代替二级索引?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题