【问题标题】:Cassandra has a limit of 2 billion cells per partition, but what's a partition?Cassandra 每个分区有 20 亿个单元的限制,但什么是分区?
【发布时间】:2013-12-29 01:07:09
【问题描述】:

在 Cassandra Wiki 中,据说每个分区有 2 billion cells (rows x columns) 的限制。但我不清楚什么是分区?

每个列族的每个节点是否有一个分区,这意味着列族的最大大小将是集群中的2 billion cells * number of nodes

或者 Cassandra 是否会根据需要创建尽可能多的分区来存储列族的所有数据?

我正在开始一个新项目,所以我将使用 Cassandra 2.0。

【问题讨论】:

    标签: cassandra limit column-family


    【解决方案1】:

    随着 CQL3 的出现,术语与旧的节俭术语略有不同。

    基本上

    Create Table foo (a int , b int, c int, d int, PRIMARY KEY ((a,b),c))
    

    将制作一个 CQL3 表。 a 和 b 中的信息用于制作分区键,这描述了信息将驻留在哪个节点上。这就是 20 亿单元限制中所说的“分区”。

    在该分区内,信息将由 c 组织,称为集群键。 a、b 和 c 一起定义了 d 的唯一值。在这种情况下,分区中的单元数将为 c * d。所以在这个例子中,对于任何给定的 a 和 b 对,c 和 d 的组合只能有 20 亿个

    因此,当您对数据进行建模时,您希望确保主键会发生变化,以便您的数据将随机分布在 Cassandra 中。然后使用集群键确保您的数据以您想要的方式可用。

    观看此视频,了解有关 cassandra 中的数据建模的更多信息 The Datamodel is Dead, Long live the datamodel

    编辑:来自 cmets 的另一个示例

    Create Table foo (a int , b int, c int, d int, e int, f int, PRIMARY KEY ((a,b),c,d))
    

    分区将由 a 和 b 的组合唯一标识。

    在分区内 c 和 d 将用于对分区内的单元格进行排序,因此布局将 有点像:

    (a1,b1) --> [c1,d1 : e1], [c1,d1  :f1], [c1,d2 : e2] ....  
    

    所以在这个例子中你可以有 20 亿个单元格,每个单元格包含:

    • c 的值
    • d 的值
    • e 或 f 的值

    所以 20 亿的限制是指 (c,d,e)(c,d,f) 的唯一元组之和。

    【讨论】:

    • 这正是我想要的。很好的解释!
    • 但是对于每一对 (a,b),c 将定义 d,所以在您的等式 c* d, d=1 中,对吗?那么每对 a 和 b 有 20 亿个 C?
    • 正是@user1944408,我想我应该让我的例子更复杂一点。
    • @BenoitThiery 20 亿 Cs 还是 10 亿 Cs?根据您的回答,c * d 必须是 20 亿。因此,对于 10 亿个 Cs,将相当于 10 亿个 Ds。我的理解是否正确? Create Table foo (a int , b int, c int, d int, e int, f int, PRIMARY KEY ((a,b),c,d)) 能否请您对上述架构进行相同的解释,以便我可以清楚地看到图片
    • @MSD 那是两个不同的 CQL 列 相当于行 (a,b,c,d,e,f) -> (1,1,1,1,1,1)
    【解决方案2】:

    发件人:http://www.datastax.com/documentation/cql/3.0/cql/cql_reference/create_table_r.html


    使用复合分区键¶

    复合分区键是由多个列组成的分区键。您使用一组额外的括号将组成复合分区键的列括起来。主键定义内但嵌套括号外的列是聚簇列。这些列在分区内形成逻辑集以方便检索。

    CREATE TABLE Cats (
      block_id uuid,
      breed text,
      color text,
      short_hair boolean,
      PRIMARY KEY ((block_id, breed), color, short_hair)
    );
    

    例如,复合分区键由block_id和breed组成。聚类列 color 和 short_hair 确定数据的聚类顺序。一般来说,Cassandra会将block_id相同但品种不同的列存储在不同的节点上,block_id和品种相同的列存储在同一个节点上。


    含义

    ==> 分区是最小的复制单元(它本身就让 sh** 没有意义。:))

    ==> block_id 和breed 的每个组合都是一个 分区。

    ==> 在集群中的任何给定机器上,所有都不存在具有相同分区键的行。

    【讨论】:

      猜你喜欢
      • 2015-08-01
      • 1970-01-01
      • 2017-06-12
      • 2019-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-28
      相关资源
      最近更新 更多