Cassandra数据建模 - 涉及两个以上实体的访问模式

时间:2015-12-29 05:12:24

标签: cassandra data-modeling datastax

这个问题可能是一个非常明显的事情或反模式,但我无法通过我的搜索找到权威信息,因此在此处发布。

考虑有三个实体

  

用户     
-id     
-name     
-email     
...   
影片     
-id     
-title     
型     
...   
演员     
-id     
-name     
...

关系和基数:

  


用户 - 1 ----米 - 画   
画 - ñ----米 - 演员

我应该如何为以下访问模式/查询建模?

  

查找由指定用户上传的视频,并以给定的演员为特色

修改: 当我通过互联网搜索时,我只获得了涉及一个或最多两个相关实体的访问模式的示例。无法确定接触两个以上实体的访问模式是无效/反模式,还是应该遵循相同的建模技术。

的问候,
Aniket

1 个答案:

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

我也对其他人可能会想到这个解决方案感兴趣。我有做作业的权利吗?