CREATE TABLE IF NOT EXISTS myns.mytable (
"id" text, -- unique id,
"inserted" timestamp,
"score" int, -- score
PRIMARY KEY (("id","score"), "inserted"))
WITH CLUSTERING ORDER BY (inserted asc);
您认为有更好的方法对此进行建模吗?我想查询 mytable on:
1. find by id - #use ALLOW FILTERING error
2. find by score - #use ALLOW FILTERING error
3. find by id and score - works
我只是想善于查询表格以获取id或得分范围或两者的对象。你认为我应该在得分上创建二级指数吗?
答案 0 :(得分:0)
当你在分区键中加上“id”和“得分”时,你总是需要同时提供 (id,score) 值。
在Cassandra上进行数据建模时,我们总是优先考虑我们将从该表中进行哪个查询。并根据查询建模表。在您的情况下,您需要按(id),(得分)和(ID,得分)进行查询。因此,如果您通过将 ID作为主键,得分作为群集键来更改表定义会更好。这样您就可以通过 id ,得分进行查询,并且 id-score 结合起来。
CREATE TABLE IF NOT EXISTS myns.mytable (
"id" text, -- unique id,
"inserted" timestamp,
"score" int, -- score
PRIMARY KEY ("id","score", "inserted"))
WITH CLUSTERING ORDER BY (inserted asc);
现在您可以查询以下所有内容:
- 按ID查找 - #use ALLOW FILTERING
- 按分数查找 - #use ALLOW FILTERING
- 按ID和分数查找
醇>