Cassandra 1.1存储引擎如何存储复合材料?

Iam*_*mIC 6 indexing storage composite-key cassandra database-indexes

我想要了解Cassandra的复合色谱柱存储引擎.不幸的是,到目前为止我读过的文档包含错误,让我有点空白.

首先,术语.

复合列通过使用复合主键包含完全非规范化的宽行.

这似乎具有误导性,因为AFAIK复合列可以用于复合键,也可以简单地用作除键之外的复合列.

1:如何实现复合键和列名?我能找到的每个CQL示例只显示复合键作为列,而不是普通复合列.

假设我们将列'a','b','c','d'作为主要复合键+列'e','f'.我知道'a'将是行和分区键.

我们假设以下数据:

a    b    c    d    e    f
1a   1b   1c   1d   e1   f1
1a   1b   1c   2d   e1   f2
1a   1b   1c   2d   e2   f3
2a   2b   2c   2d   e2   f4
Run Code Online (Sandbox Code Playgroud)

2:这是如何存放在引擎盖下的?我想这里真正的问题是'b','c','d'如何映射出来,因为列根据定义不是分层的.

3:我读过的文档说不再使用紧凑型存储.但是如果不需要添加非主键列呢...那么不使用它的原因是什么?

baj*_*aja 2

1:复合键和列名是如何实现的?

大多是用问题来回答的2。顺便说一句,在 Cassandra 1.2 中,非复合键也将在底层实现为复合键。此外,复合列的名称本身在存储中不会重复。内存中的表示将名称实习到内存效率的阈值。

2:它是如何存储在引擎盖下的?

第一个关键组件(a在您的示例中)成为物理行键。其余列形成非复合列的前缀,并在行中预排序(聚集)存储。因此,您的示例的物理表示将如下所示:

    1b.1c.1d, e   1b.1c.1d, f
1a      e1            f1
------------------------------
    2b.2c.2d, e   2b.2c.2d, f
2a      e2            f4
Run Code Online (Sandbox Code Playgroud)

请注意,示例中的第二行和第三行无效。列名称在物理行中必须是唯一的。

我使用的点符号 ( 1b.1c.1d) 是象征性的。实际存储使用元数据的前缀字节,后跟数据。

我读到的文档说不应再使用紧凑存储。但是如果不需要添加非主键列怎么办...那么不使用它的原因是什么?

非常小的存储效率不值得您的架构中没有可演化性的缺点。