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

时间:2013-12-11 07:08:25

标签: cassandra limit column-family

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

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

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

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

2 个答案:

答案 0 :(得分:59)

随着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对,只能有20亿个c和d的组合

因此,在为数据建模时,您需要确保主键不同,以便您的数据将随机分布在Cassandra中。然后使用群集键确保您的数据以您希望的方式可用。

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

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

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] ....  

因此,在此示例中,您可以拥有2亿个单元格,每个单元格包含:

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

因此,20亿限制是指(c,d,e)(c,d,f)的唯一元组的总和。

答案 1 :(得分:3)

来自: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和品种的列。


蕴涵

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

==> block_id和品种的每个组合都是 a 分区。

==>在群集中的任何给定计算机上,所有都不存在具有相同partition-key的行。