指定分区键时cassandra查询集合

mcvgt66p  于 2021-06-14  发布在  Cassandra
关注(0)|答案(1)|浏览(530)

我一直在读cassandra中的索引,但当涉及到在集合(如集合、列表或Map)上创建索引时,我有点困惑。
假设我有下表和索引

CREATE TABLE chatter.channels (
    id text PRIMARY KEY,
    users set<text>
); 

CREATE INDEX channels_users_idx ON chatter.channels (values(users));

INSERT INTO chatter.channels (id, users) VALUE ('ch1', {'jeff', 'jenny'});

在文档中,至少我到目前为止发现的是,这可能会对性能造成巨大影响,因为索引是在节点上本地创建的。下面给出的所有示例都查询如下表

SELECT * FROM chatter.channels WHERE users CONTAINS 'jeff';

据我所知,这会影响性能,因为没有指定分区键,必须查询所有节点。但是,如果我要发出如下查询

SELECT * FROM chatter.channels WHERE id = 'ch1' AND users CONTAINS 'jeff';

(给出分区键)那么我的性能还会受到影响吗?
我怎么能亲自检查?在sql中,我可以运行explain并获得一些有用的信息。Cassandra也有类似的地方吗?

rqcrx0a6

rqcrx0a61#

cassandra提供了跟踪功能,这有助于跟踪cassandra中查询的读写过程。
要查看跟踪,请在其中一个cassandra节点上打开->cqlsh并运行以下命令:

cqlsh> tracing on;
Now tracing requests.
cqlsh> use [KEYSPACE];

我希望这有助于检查查询的性能。

相关问题