在此示例中,在cassandra中创建了多少个表/列族

eag*_*arn 2 cql cassandra

我正在阅读关于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"加入".

Aar*_*ron 5

不,它不是作为一个列族创建的.两个列族都是单独创建的,并且彼此独立地操作.作者所指的是非关系数据建模的一个方面,涉及对数据进行非规范化并创建与您的查询模式匹配的表.

当发出"推文"时,应用程序必须设计为将关于推文的数据存储到两个不同的列族中.它在tweets列族中存储一次,然后timeline为每个跟随者创建一个列系列.从本质上讲,有关特定推文的数据正在为tweets列族重复一次,对于作者所拥有的每个追随者都会重复一次.

表格时间线中的tweet_id如何知道它应该与表格推文中的tweet_id"加入".

很简单,它不知道.Cassandra不允许加入,由Cassandra支持的设计合理的应用程序也不会使用客户端连接.同样,每个列系列都是为了预测可能运行的每个查询而设计的.有时,应用程序可能希望查询特定的推文tweet_id,并且它将使用tweets列系列.另一方面,该帖子提到该应用程序有一个用例来查询来自特定用户的20条最新推文,"在这种情况下,timeline列系列旨在处理该问题.

摘要:

  • 有两个列系列被定义.
  • 每个列族都旨在处理特定查询.
  • 没有连接; 数据库或客户端.数据被非规范化(重复),以便应用程序可以按照需要的方式快速查询数据.