【发布时间】:2015-11-09 07:45:12
【问题描述】:
我的表格架构是:
A)
CREATE TABLE friend_list (
userId uuid,
friendId uuid,
accepted boolean,
ts_accepted timestamp,
PRIMARY KEY ((userId ,accepted), ts_accepted)
) with clustering order by (ts_accepted desc);
在这里我可以执行如下查询:
1. SELECT * FROM friend_list WHERE userId="---" AND accepted=true;
2. SELECT * FROM friend_list WHERE userId="---" AND accepted=false;
3. SELECT * FROM friend_list WHERE userId="---" AND accepted IN (true,false);
但第三个查询涉及更多读取,所以我尝试像这样更改架构:
B)
CREATE TABLE friend_list (
userId uuid,
friendId uuid,
accepted boolean,
ts_accepted timestamp,
PRIMARY KEY (userId , ts_accepted)
) with clustering order by (ts_accepted desc);
CREATE INDEX ON friend_list (accepted);
使用这种 B 型模式,第一个和第二个查询可以工作,但我可以将第三个查询简化为:
3. SELECT * FROM friend_list WHERE userId="---";
我相信第二个模式为第三个查询提供了更好的性能,因为它不会对每一行进行条件检查。
Cassandra 专家...请建议我实现 this.A 或 B 的最佳架构。
【问题讨论】:
标签: sql cassandra query-performance database nosql