Cassandra数据建模建议

时间:2018-04-03 22:24:29

标签: cassandra cassandra-3.0

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或得分范围或两者的对象。你认为我应该在得分上创建二级指数吗?

1 个答案:

答案 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); 

现在您可以查询以下所有内容:

  
      
  1. 按ID查找 - #use ALLOW FILTERING
  2.   
  3. 按分数查找 - #use ALLOW FILTERING
  4.   
  5. 按ID和分数查找
  6.