代码之家  ›  专栏  ›  技术社区  ›  Faraz

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

  •  0
  • Faraz  · 技术社区  · 5 年前

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

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

    任何见解都是有帮助的。

    0 回复  |  直到 5 年前
        1
  •  2
  •   Aaron    5 年前

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

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

    我假设你的主键定义如下:

    PRIMARY KEY((A,B),C)
    

    原因是 C 这是因为Cassandra(Spark)无法确定集群中哪个节点负责基于 C .因此,每个节点都需要检查 C

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

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

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

    不,不会的。给定 (A,B) ,无法通过确定包含数据的节点 A. 单独地事实上,由于结果集可能会更大 A. 可能会比通过 C .