在Cassandra Wiki中,据说每个分区有2 billion cells (rows x columns)
的限制。但我不清楚什么是分区?
每个列系列的每个节点是否有一个分区,这意味着群集系列的最大大小为2 billion cells * number of nodes
。
或者,Cassandra会根据需要创建尽可能多的分区来存储列族的所有数据吗?
我正在开始一个新项目,所以我将使用Cassandra 2.0。
答案 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亿个单元格,每个单元格包含:
因此,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的行。