查询 Cassandra 的最快方法?主键还是分区键?

Fastest way to query Cassandra? Primary key or partition key?

查询Cassandra最快的方法是什么? 我有一个 table,其中主键由 3 列组成。我通过这些列之一进行查询,速度非常慢(我通过 Spark 进行查询)。全部 3 个查询会更快吗?

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

任何见解都是有帮助的。

Unfortunately, the column I am using to fetch records for is not one of those in partition key. Could it be slow due to that?

是的,这可能就是运行缓慢的原因。尽管公平地说,Spark 旨在查询分布式数据存储。它的设计目的不是要快。

所以我假设您的 PRIMARY KEY 定义如下所示:

PRIMARY KEY((A,B),C)

C查询慢的原因,是因为Cassandra(Spark)无法根据C判断集群中哪个节点负责数据。因此,需要检查每个节点的 C 值是否满足您的查询。

Would querying by all 3 be faster?

是的,三个都查询可能会更快。 这是因为分区键由 AB 组成。对于基于分区键的查询,在这种情况下,AB 的键值被散列在一起。该散列与每个节点负责的令牌范围相匹配。这样就可以很容易地确定一个包含所需数据的目标节点,而无需检查每个节点是否匹配值。

If I were to query by using just 1 column from primary key (Let's say A), that would also be fast right?

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

查询慢