指定分区键时的Cassandra查询集合

时间:2018-12-18 03:22:22

标签: cassandra

我一直在阅读有关Cassandra中的索引的信息,但是在集合,列表或映射之类的集合上创建索引时,我有些困惑。

比方说,我对以下用户具有下表和索引

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)有类似的东西吗?

1 个答案:

答案 0 :(得分:2)

Cassandra提供跟踪功能,这有助于跟踪Cassandra中查询的读写进度。

要查看跟踪,请在您的一个Cassandra节点上打开-> cqlsh并运行以下命令:

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

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