假设我们有可以评论视频的用户,并且我们希望显示带有用户名的视频的所有评论。用户也可以转到他的个人资料页面并更改他的名字。
基于此答案 Cassandra非规范化数据模型中介绍的 Cassandra 数据建模实践,我创建了这样的表:
CREATE TABLE users (
user_id UUID,
first_name TEXT,
last_name TEXT,
PRIMARY KEY ((user_id))
);
CREATE TABLE comments_by_video (
video_id UUID,
added_at TIMESTAMP,
user_id UUID,
comment TEXT,
first_name TEXT,
last_name TEXT,
PRIMARY KEY ((video_id), added_at, user_id)
);
Run Code Online (Sandbox Code Playgroud)
看起来棒极了,我们只需一个查询就可以获得视频评论所需的数据。
现在,让我们考虑这样的用例。
用户创建了大量评论(例如 10 000 条),然后决定更改他的名字。我们应该更新所有评论以更改他的名字吗?有没有办法让它变得高效?
我对Cassandra一无所知.说,我有类似Facebook的网站,人们可以分享,评论,上传图片等.
现在,让我们说,我想得到我朋友所做的所有事情:
等等.
因此经过大量阅读后,我想我需要做的是为每一件事创建新的列族,例如:user_likes user_comments, user_shares. 基本上,你可以想到的任何事情,甚至在我这样做之后,我仍然需要为大多数列创建二级索引,以便我可以搜索数据?即便如此,我怎么知道哪些用户是我的朋友?我是否需要首先获取所有朋友ID,然后搜索所有这些列系列中的每个用户ID?
编辑 好了所以我做了一些更多的阅读,现在我理解了一些更好的东西,但我仍然无法弄清楚如何构建我的表,所以我将设置一个赏金,我想得到一个明确的例子我的如何如果我想以这种顺序存储和检索数据,那么表应该是这样的:
所以,假设我想要检索所有朋友或我关注的人的最后上传的十个文件,这就是它的样子:
John uploaded song AC/DC - Back in Black 10 mins ago
评论和分享等所有内容都与此类似......
现在可能最大的挑战是将所有类别的10个最后的东西一起检索,所以列表将是所有事物的混合......
现在,我不需要完全的明细表格的答案,我只是需要的如何将我构建了一些非常明显的例子和检索数据就像我会做的mysql与joins