Cassandra 每个分区限制为 20 亿个单元,但什么是分区?



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

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

或者Cassandra会创建尽可能多的分区来存储列族的所有数据吗?

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

随着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 Datmodeling的信息数据模型死了,数据模型万岁

编辑:评论中的另一个例子

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)的唯一元组的和。

来源:http://www.datastax.com/documentation/cql/3.0/cql/cql_reference/create_table_r.html


使用复合分区键¶

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

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

例如,复合分区键由block_id和bread组成。聚类列color和short_hair决定了数据的聚类顺序。通常,Cassandra将在不同节点上存储具有相同block_id但不同品种的列,以及在同一节点上存储相同block_id和品种的列。


含义

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

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

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

相关内容

  • 没有找到相关文章

最新更新