我一直在阅读有关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)有类似的东西吗?
答案 0 :(得分:2)
Cassandra提供跟踪功能,这有助于跟踪Cassandra中查询的读写进度。
要查看跟踪,请在您的一个Cassandra节点上打开-> cqlsh并运行以下命令:
cqlsh> tracing on;
Now tracing requests.
cqlsh> use [KEYSPACE];
我希望这有助于检查查询的性能。