我正在阅读关于cassandra架构的post。
作者创建了两个表:
CREATE TABLE tweets (
tweet_id uuid PRIMARY KEY,
author varchar,
body varchar
);
CREATE TABLE timeline (
user_id varchar,
tweet_id uuid,
author varchar,
body varchar,
PRIMARY KEY (user_id, tweet_id)
);
注意:就表格而言,他们并不知道这两个表格都可以是" JOINED"在tweet_id上。每个表都将tweet_id视为uuid类型的唯一列名。
如果我对帖子的理解在这里,作者说没有两个列族,也就是物理创建的表。它只是一个巨大的表,包含两个逻辑列族的信息。
但是,当我说select * from tweets where tweet_id="xxx"
时,如何进行查找
(是否有内部标记来确定列属于推文)
请查看帖子,正如作者用好的例子所说明的那样。
我的问题是表时间线中的tweet_id如何知道它应该"加入"在表格推文中使用tweet_id。
答案 0 :(得分:5)
不,它不是作为一个列族创建的。两个列族都是单独创建的,并且彼此独立地操作。作者所指的是非关系数据建模的一个方面,它涉及对数据进行非规范化并创建与您的查询模式匹配的表。
当发出“推文”时,应用程序必须设计为将有关推文的数据存储到两个不同的列系列中。它会在tweets
列系列中存储一次,然后为每个关注者在timeline
列系列中输入一个条目。从本质上讲,有关特定推文的数据在tweets
列系列中会被复制一次,而对于作者所拥有的每个关注者都会重复一次。
表格时间线中的tweet_id如何知道它应该“加入” 表格推文中的tweet_id。
简单,它不知道。 Cassandra不允许加入,由Cassandra支持的设计合理的应用程序也不会使用客户端连接。同样,每个列系列都是为了预测可能运行的每个查询而设计的。有时,应用程序可能希望按tweet_id
查询特定的推文,并且会使用tweets
列系列。另一方面,该帖子提到该应用程序有一个用例来查询来自特定用户的20条最新推文,“在这种情况下,timeline
列系列旨在处理该问题。
要点: