【问题标题】:Fastest way to query Cassandra? Primary key or partition key?查询 Cassandra 的最快方法是什么?主键还是分区键?
【发布时间】:2020-06-23 10:34:06
【问题描述】:

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

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

任何见解都是有帮助的。

【问题讨论】:

    标签: cassandra cql


    【解决方案1】:

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

    是的,这可能就是速度慢的原因。尽管公平地说,Spark 旨在查询分布式数据存储。它的设计初衷不是为了快速。

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

    PRIMARY KEY((A,B),C)
    

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

    全部 3 人查询会更快吗?

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

    如果我只使用主键中的 1 列(假设是 A)进行查询,那也很快吧?

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

    【讨论】:

    • 至少在 C 上的查询应该比在另一列上的查询更快 - Spark 连接器会将执行下推到 Cassandra,因此过滤将在 Cassandra 端进行,而不是将所有内容读入内存并过滤Spark 方面...
    • 如果我只使用主键中的 1 列(比如说 A)进行查询,那也很快吧?我无权使用两列或三列进行查询。
    • @Faraz 编辑完成。
    • 你好 Aaron,通过聚类键查询不是最快的吗?只需 1 次,它就会返回大量记录。我喜欢。按聚类键查询不是最快的吗?
    • @Faraz 也包括前面的键。
    猜你喜欢
    • 2015-05-10
    • 1970-01-01
    • 1970-01-01
    • 2012-12-03
    • 2015-02-01
    • 1970-01-01
    • 2018-07-16
    • 2017-11-01
    相关资源
    最近更新 更多