通过部分分区键查询Cassandra

时间:2014-12-03 16:41:15

标签: cassandra cql cassandra-2.0

在Cassandra中,我可以创建一个复合分区键,与我的聚类键分开:

CREATE TABLE footable (
    column1 text,
    column2 text,
    column3 text,
    column4 text,
    PRIMARY KEY ((column1, column2))
)

据我所知,通过分区键查询是一种非常有效(最有效的?)方法,用于检索数据。但是,我不知道的是,仅通过复合分区密钥的一部分进行查询是否也是有效的。

在MSSQL中,只要从第一个开始包含组件(在此示例中为column1而不是column2),这将是有效的。卡桑德拉也是如此吗?在此处仅基于column1查询行是否非常高效?

2 个答案:

答案 0 :(得分:15)

Cassandra的情况并非如此,因为这是不可能的。这样做会产生以下错误:

  

必须限制分区键部分实体,因为前面的部分是

查看DataStax MVP Robbie Strickland的Cassandra 2014 SF峰会演讲题目“CQL Under the Hood”。幻灯片62-64显示完整的分区键用作rowkey。使用Cassandra中的复合分区键,您必须按所有rowkey查询或不查询。

您可以观看complete presentation video here

答案 1 :(得分:9)

这在Cassandra中是不可能的,因为它需要全表扫描来解决这样的查询。分区的位置由复合键的所有成员的散列定义,这意味着只给出一半的键与不给它一样好。查找记录的唯一方法是搜索所有密钥并检查它们是否匹配。