带有排序查询建模的Cassandra过滤器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带有排序查询建模的Cassandra过滤器相关的知识,希望对你有一定的参考价值。

我是Cassandra的新手,我正在尝试在卡桑德拉建模。我的查询如下所示

Query #1: select * from TableA where Id = "123"
Query #2: select * from TableA where name="test" orderby startTime DESC
Query #3: select * from TableA where state="running" orderby startTime DESC

我已经能够构建查询#1的表,看起来像

    val tableAStatement = SchemaBuilder.createTable("tableA").ifNotExists.
    addPartitionKey(Id, DataType.uuid).
    addColumn(Name, DataType.text).
    addColumn(StartTime, DataType.timestamp).
    addColumn(EndTime, DataType.timestamp).
    addColumn(State, DataType.text)

    session.execute(tableAStatement)

但是对于查询#2和3,我尝试了很多不同的东西,但都失败了。每次,我都会遇到与cassandra不同的错误。

考虑到上述查询,什么是正确的表模型?建模此类查询的正确方法是什么。

答案

查询#2:从TableB中选择*,其中name =“test”

CREATE TABLE TableB (
    name text,
    start_time timestamp,
    PRIMARY KEY (text, start_time)
) WITH CLUSTERING ORDER BY (start_time DESC)

查询#3:从TableC中选择*其中state =“running”

CREATE TABLE TableC (
    state text,
    start_time timestamp,
    PRIMARY KEY (state, start_time)
) WITH CLUSTERING ORDER BY (start_time DESC)

在cassandra中,您可以围绕查询对表进行建模。需要数据非规范化和复制。注意聚类顺序 - 这样您可以在查询中省略“ordered by”

以上是关于带有排序查询建模的Cassandra过滤器的主要内容,如果未能解决你的问题,请参考以下文章

cassandra 中的数据建模和查询

有没有办法在 cassandra 中过滤计数器列?

Cassandra 中的数据建模冲突

CPNtools协议建模安全分析---实例变迁标记

Cassandra 按计数排序结果

使用键和索引进行 Cassandra 建模