通过部分分区键查询Cassandra

Mar*_*ark 9 cql cassandra cassandra-2.0

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

CREATE TABLE footable (
    column1 text,
    column2 text,
    column3 text,
    column4 text,
    PRIMARY KEY ((column1, column2))
)
Run Code Online (Sandbox Code Playgroud)

据我了解,通过分区键查询是一种非常有效(最有效的?)方法,用于检索数据.然而,我不知道的是,仅通过复合分区键的一部分进行查询也是有效的.

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

Aar*_*ron 15

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

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

查看DataStax MVP Robbie Strickland的Cassandra 2014 SF峰会演讲题为" 引擎盖下的CQL".幻灯片62-64显示完整的分区键用作rowkey.使用Cassandra中的复合分区键,您必须按所有rowkey查询或不查询.

您可以在此处观看完整的演示视频.


Rus*_*ssS 9

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

  • "只给出一半的钥匙就像没有给它一样好" - 很好地放! (6认同)