我是Cassandra的新手并尝试为邮件系统构建数据模型。我找到了一些解决方案,但没有一个完全符合我的要求。 有两个主要要求:
我想到了这样的事情,
CREATE TABLE chat (
to_user text,
from_user_text,
time text,
msg text,
PRIMARY KEY((to_user,from_user),time)
) WITH CLUSTERING ORDER BY (time DESC);
但是这个设计几乎没有问题,比如我不能满足第一个要求,因为这个设计也需要传递from_user。而且,当(to_user,from_user)对的数量增加时,这将是低效的。
答案 0 :(得分:1)
你是对的。那一个表不会满足两个查询,因此您需要两个表。每个查询一个。这是Cassandra数据建模的核心概念。查询驱动设计。
所以查询向用户查找消息:
CREATE TABLE chat (
to_user text,
from_user_text,
time text,
msg text,
PRIMARY KEY((to_user),from_user,time)
) WITH CLUSTERING ORDER BY (time DESC);
来自用户的消息给另一个用户。
re
与您的不同之处:from_user是一个群集列,而不是分区键的一部分。这样可以最大限度地减少应用程序代码中所需的选择查询量。
可以使用第二个表来满足两个查询,但是您必须提供'from_user'以按时使用范围查询。