我是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不同的错误。
考虑到上述查询,什么是正确的表模型?什么是对此类查询进行建模的正确方法。
答案 0 :(得分:0)
查询#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”