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