在Cassandra中,我可以创建一个复合分区键,与我的聚类键分开:
CREATE TABLE footable (
column1 text,
column2 text,
column3 text,
column4 text,
PRIMARY KEY ((column1, column2))
)
据我所知,通过分区键查询是一种非常有效(最有效的?)方法,用于检索数据。但是,我不知道的是,仅通过复合分区密钥的一部分进行查询是否也是有效的。
在MSSQL中,只要从第一个开始包含组件(在此示例中为column1而不是column2),这将是有效的。卡桑德拉也是如此吗?在此处仅基于column1查询行是否非常高效?
答案 0 :(得分:15)
Cassandra的情况并非如此,因为这是不可能的。这样做会产生以下错误:
必须限制分区键部分实体,因为前面的部分是
查看DataStax MVP Robbie Strickland的Cassandra 2014 SF峰会演讲题目“CQL Under the Hood”。幻灯片62-64显示完整的分区键用作rowkey。使用Cassandra中的复合分区键,您必须按所有rowkey查询或不查询。
答案 1 :(得分:9)
这在Cassandra中是不可能的,因为它需要全表扫描来解决这样的查询。分区的位置由复合键的所有成员的散列定义,这意味着只给出一半的键与不给它一样好。查找记录的唯一方法是搜索所有密钥并检查它们是否匹配。