具有3个字段的CQL3复合索引如何在thrift列族世界中映射?

时间:2013-03-29 10:04:42

标签: cassandra

planetcassandra阅读此博客后,我想知道带有3个字段的CQL3复合索引如何映射到thrift列系列字中,例如:

CREATE TABLE comments (
        article_id uuid,
        posted_at timestamp,       
        author text,
        karma int,
        content text,
        PRIMARY KEY (article_id, posted_at)
    )

此处,article_id列将映射到内部行键,并且published_at将映射到单元名称的(第一部分)。

如果表格设计

怎么办?
CREATE TABLE comments (
        author_id varchar,
        posted_at timestamp,
        article_id uuid,       
        author text,
        karma int,
        content text,
        PRIMARY KEY (author_id, posted_at, article_id)
    )
  1. 并且内部行键是否映射到复合索引的前2个字段,其中article_id映射到单元名称,实质上是为多达20亿条目的文章切片,对author_id和posting_at组合的任何查询都是磁盘上的一个查找?
  2. 复合键中任意数量的字段的行为是否相同?
  3. 非常感谢您的回答。

2 个答案:

答案 0 :(得分:2)

上述观察结果不正确,正确的观察结果为here

我亲自验证过:

In the first case:
article_id = partition key, posted_at = cluster key

In the second case:
author_id  = partition key, posted_at:article_id = cluster key
  1. 复合键的第一部分(author_id)称为“分区键”, rest(posted_at,art​​icle_id)是剩余的密钥。
  2. 使用复合键时,Cassandra会以不同方式存储列。分区键 变成行键。剩余的键与每列连接在一起 name(“:”作为分隔符)以形成列名。列值保持不变 不变。
  3. 订购了剩余的密钥(分区密钥除外), 并且不允许在任何随机列上搜索 从第一个开始,然后你可以移动到第二个和 等等。从“错误请求”错误中可以看出这一点。

答案 1 :(得分:1)

Aaron Morton @他的网站thelastpickle有一个很好的解释。

In the first case:
article_id = partition key, posted_at = cluster key

In the second case:
author_id + posted_at = partition key, article_id = cluster key

因此,请注意磁盘搜索,因为您使用第二种方法并且看到该行不会变得太宽并且与第一种情况相比给出了真正的好处。 如果你没有超过20亿并且在极限范围内,那么采用第二种方法不要过度,因为记录的分散发生在组合键上。