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

时间:2014-07-24 23:30:48

标签: cassandra cql

我正在阅读关于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。

1 个答案:

答案 0 :(得分:5)

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

当发出“推文”时,应用程序必须设计为将有关推文的数据存储到两个不同的列系列中。它会在tweets列系列中存储一次,然后为每个关注者在timeline列系列中输入一个条目。从本质上讲,有关特定推文的数据在tweets列系列中会被复制一次,而对于作者所拥有的每个关注者都会重复一次。

  

表格时间线中的tweet_id如何知道它应该“加入”   表格推文中的tweet_id。

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

要点:

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