这个问题可能是一个非常明显的事情或反模式,但我无法通过我的搜索找到权威信息,因此在此处发布。
考虑有三个实体
用户
-id
-name
...
影片
-id
-title
型
...
演员
-id
-name
...
关系和基数:
用户 - 1 ----米 - 画
画 - ñ----米 - 演员
我应该如何为以下访问模式/查询建模?
查找由指定用户上传的视频,并以给定的演员为特色
修改: 当我通过互联网搜索时,我只获得了涉及一个或最多两个相关实体的访问模式的示例。无法确定接触两个以上实体的访问模式是无效/反模式,还是应该遵循相同的建模技术。
的问候,
Aniket
答案 0 :(得分:2)
我对Cassandra的经验不多,但我上周一直在努力工作,所以我试试看。
CREATE TABLE videos_by_user(
user_name TEXT,
user_email TEXT STATIC,
actor TEXT,
video_id INT,
video_type TEXT,
PRIMARY KEY ((user_name), actor, video_id)
);
user_name
是分区键,因此请求"查找由给定用户上传的所有视频"是微不足道的,并返回一个分区:
SELECT * FROM videos_by_user WHERE user_name = 'Joe';
actor
是一个群集密钥(一个actor
是分区中的一行),每个密钥都存储对视频的引用,因为它不会复制某些内容对于每个actor,数据video_type
都是重复的。然后,您可以执行
SELECT * FROM videos_by_user WHERE user_name = 'Joe' AND actor = 'John';
属于用户的属性声明为static
且不重复:user_email
是每个分区的单个值(即每个用户)。想象一下,你想通过电子邮件发送给某个用户的链接,因为他突然对某个演员的视频感兴趣:
SELECT user_email, video_id FROM videos_by_user WHERE user_name = 'Joe' AND actor = 'John';
我也对其他人可能会想到这个解决方案感兴趣。我有做作业的权利吗?