0

我在http://www.datastax.com/documentation/cassandra/1.2/cassandra/cql_reference/create_table_r.html阅读 Datastax 网站上的文档 ,我看到:“当您使用复合分区键时,Cassandra 会处理列在嵌套括号中作为分区键并将一行的列存储在多个节点上。"

给出的例子是: CREATE TABLE Cats ( block_id uuid,breed text, color text, short_hair boolean, PRIMARY KEY ((block_id,breed), color, short_hair) );

我了解集群列(在本例中为 color 和 short_hair)如何作为给定行的连续“列”实际存储在磁盘上。我不明白的是“......在多个节点上存储一行的列”这一行。这是正确的吗?

对于给定的block_id和breed,这个复合键不只是创建一个类似于“block_id+breed”的分区键,在这种情况下,列/簇将在同一行中,其物理位置由分区键确定( block_id + 品种)?

还是因为主键基于两个字段而在这一行中进行了某种拆分?

编辑:我认为理查德在下面的回答可能是正确的,但我也在 1.2 的 Datastax 文档中遇到了这个问题,它强制执行我发布的第一个报价:

“复合分区键 - 使用在表的 PRIMARY KEY 定义的嵌套括号中声明的分区键将一行的列存储在多个节点上。”

为什么会说使用复数分区键* s *...组成复合键的字段构成唯一的行键,据我所知,它们都用于制作键。

然后他们说,一行的可以拆分,这对我来说意味着单行(具有给定的分区键)可以将其列拆分到不同的节点上,这意味着复合键的字段正在单独处理.

仍然对 Datastax 文档以及它是否正确感到有些困惑。

4

1 回答 1

1

我认为这意味着具有相同 block_id 的行存储在不同的节点上。正如您所说,分区键就像“block_id +品种”,因此具有相同block_id但不同品种的列通常会存储在不同的节点上。但是具有相同block_id 和breed 的列将存储在同一个节点上。

基本上,存储分区的节点只能通过分区键的函数找到。不管它是否是复合的,没有其他东西可以连接在一起或拆分行。

于 2013-07-15T09:04:01.963 回答