Cassandra 查询卡桑德拉的最快方法?主键还是分区键?

Cassandra 查询卡桑德拉的最快方法?主键还是分区键?,cassandra,cql,Cassandra,Cql,问卡桑德拉最快的方法是什么? 我有一个主键由3列组成的表。我通过其中一列进行查询,速度非常慢(我通过Spark进行查询)。3个人的查询速度会更快吗 我还有一个由两列组成的分区键。不幸的是,我用来获取记录的列不是分区键中的列之一。会不会因此而变慢 任何见解都是有益的 不幸的是,我用来获取记录的列不是分区键中的列之一。会不会因此而变慢 是的,这很可能就是事情进展缓慢的原因。虽然公平地说,Spark是为查询分布式数据存储而设计的。它不是设计来快速的 所以我假设您的主键定义如下所示: PRIMARY

问卡桑德拉最快的方法是什么? 我有一个主键由3列组成的表。我通过其中一列进行查询,速度非常慢(我通过Spark进行查询)。3个人的查询速度会更快吗

我还有一个由两列组成的分区键。不幸的是,我用来获取记录的列不是分区键中的列之一。会不会因此而变慢

任何见解都是有益的

不幸的是,我用来获取记录的列不是分区键中的列之一。会不会因此而变慢

是的,这很可能就是事情进展缓慢的原因。虽然公平地说,Spark是为查询分布式数据存储而设计的。它不是设计来快速的

所以我假设您的主键定义如下所示:

PRIMARY KEY((A,B),C)
通过
C
进行查询速度慢的原因是因为Cassandra(Spark)无法确定集群中哪个节点负责基于
C
的数据。因此,每个节点都需要检查满足查询的
C

3个人的查询速度会更快吗

是的,三者的查询速度可能更快。这是因为分区键由
A
B
组成。对于基于分区键的查询,在这种情况下,
a
B
的键值被散列在一起。该散列与每个节点负责的令牌范围相匹配。这样,可以容易地确定包含所需数据的目标节点,并且不需要检查每个节点的匹配值


如果我只使用主键中的一列(比如A)进行查询,那也会很快,对吗


不,不会的。给定
(A,B)
的分区键定义,包含数据的节点不能仅由
A
确定。事实上,由于结果集可能会更大,通过
A
查询可能会比通过
C

查询慢,至少在
C
上的查询应该比在另一列上的查询快-Spark连接器会将执行向下推到Cassandra,因此过滤将发生在Cassandra端,不像将所有内容都读入内存和Spark端的过滤器…如果我只使用主键中的一列(比如A)进行查询,那么也会很快,对吗?我没有自由使用两列或三列进行查询。@Faraz编辑已完成。你好,Aaron,按群集键进行查询不是最快的吗?它只需一次就可以返回成吨的记录。我喜欢这样。通过集群键进行查询不是最快的吗?@Faraz也包括前面的键。