【发布时间】:2015-04-27 18:29:36
【问题描述】:
我需要数据建模帮助,因为我还没有找到解决相同问题的资源。
用户案例类似于电子邮件系统。我想存储用户收到的所有电子邮件的时间线,然后用三种不同的方式取回它们:
- 曾经收到的所有电子邮件
- 用户已阅读的邮件
- 用户仍未阅读的邮件
我目前的模型如下:
CREATE TABLE TIMELINE (
userID varchar,
emailID varchar,
timestamp bigint,
read boolean,
PRIMARY KEY (userID, timestamp)
) WITH CLUSTERING ORDER BY (timestamp desc);
CREATE INDEX ON TIMELINE (userID, read);
我需要支持的查询是:
SELECT * FROM TIMELINE where userID = 12;
SELECT * FROM TIMELINE where userID = 12 order by timestamp asc;
SELECT * FROM TIMELINE where userID = 12 and read = true;
SELECT * FROM TIMELINE where userID = 12 and read = false;
SELECT * FROM TIMELINE where userID = 12 and read = true order by timestamp asc;
SELECT * FROM TIMELINE where userID = 12 and read = false order by timestamp asc;
我的查询是:
我是否应该继续阅读作为我的二级索引,因为它会经常更新并且可以创建墓碑 - 每个 http://docs.datastax.com/en/cql/3.1/cql/ddl/ddl_when_use_index_c.html 这是一个问题。
我们可以对二级索引进行不等式检查吗,因为我发现二级索引上应该存在至少一个相等条件
如果这不是正确的建模方式,请就如何支持上述查询提出建议。维护三个不同的表格让我担心插入的数量(对于已读/未读),因为用户数量 * 每天查看的电子邮件将是巨大的。
【问题讨论】:
标签: cassandra data-modeling cassandra-2.0