带有排序查询建模的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过滤器的主要内容,如果未能解决你的问题,请参考以下文章