我正在阅读关于cassandra架构的这篇文章.
作者创建了两个表:
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)
);
Run Code Online (Sandbox Code Playgroud)
注意:至于表格,他们不知道两个表都可以在tweet_id上"加入".每个表都将tweet_id视为uuid类型的唯一列名.
如果我对帖子的理解在这里,作者说没有两个列族,也就是物理创建的表.它只是一个巨大的表,包含两个逻辑列系列的信息.
但是当我说select * from tweets where tweet_id="xxx"
(有一个内部标记来确定列属于推文时)是如何进行查找的
请查看帖子,正如作者用好的例子所说明的那样.
我的问题是表格时间线中的tweet_id如何知道它应该与表格推文中的tweet_id"加入".
不,它不是作为一个列族创建的.两个列族都是单独创建的,并且彼此独立地操作.作者所指的是非关系数据建模的一个方面,涉及对数据进行非规范化并创建与您的查询模式匹配的表.
当发出"推文"时,应用程序必须设计为将关于推文的数据存储到两个不同的列族中.它在tweets列族中存储一次,然后timeline为每个跟随者创建一个列系列.从本质上讲,有关特定推文的数据正在为tweets列族重复一次,对于作者所拥有的每个追随者都会重复一次.
表格时间线中的tweet_id如何知道它应该与表格推文中的tweet_id"加入".
很简单,它不知道.Cassandra不允许加入,由Cassandra支持的设计合理的应用程序也不会使用客户端连接.同样,每个列系列都是为了预测可能运行的每个查询而设计的.有时,应用程序可能希望查询特定的推文tweet_id,并且它将使用tweets列系列.另一方面,该帖子提到该应用程序有一个用例来查询来自特定用户的20条最新推文,"在这种情况下,timeline列系列旨在处理该问题.
摘要:
| 归档时间: |
|
| 查看次数: |
546 次 |
| 最近记录: |