从只指定第一个集群密钥的cassandra读取数据的效率有多高



假设我有一个带有以下主键的cassandra表

((partitionKey1, partitionKey2), clusteringKey1, clusteringKey2)

如果我写一个类似的查询

SELECT * FROM my_table where clusteringKey1=clusteringKey1Value, ALLOW FILTERING

据说集群必须读取所有节点,这很好,因为我还没有指定分区键。

但数据是按聚类键排序的。所以,它不应该使用二进制搜索或其他东西来为给定的clusteringKey1Value找出正确的行吗?为什么它必须扫描所有行并执行筛选?

在没有分区键的情况下读取Cassandra中的数据是无效的。partition key对Cassandra很重要,因为它允许Cassandra识别特定集群所在的节点分区键"就像一个邮政编码,Cassandra可以很快找到节点。

假设您有一个100个节点的集群,并在三个节点上复制数据。例如,您需要的数据位于node98、node99和node100上。现在您在没有分区键的情况下进行查询,那么Cassandra不知道在哪里可以找到数据,所以它必须扫描所有节点。clustering key排序也适用于分区内的行。首先你在一个分区中读取,然后它确实应用了二进制搜索和其他优化来在分区内快速搜索,但要到达一个分区,它需要partition key

最新更新