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:我读过的文档说不再使用紧凑型存储.但是如果不需要添加非主键列呢...那么不使用它的原因是什么?
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
) 是象征性的。实际存储使用元数据的前缀字节,后跟数据。
我读到的文档说不应再使用紧凑存储。但是如果不需要添加非主键列怎么办...那么不使用它的原因是什么?
非常小的存储效率不值得您的架构中没有可演化性的缺点。