在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的每个组合都是分区。
===>在集群中的任何给定机器上,所有或都不存在具有相同分区键的行。