我很好奇cassandra如何在sstable中组织行的值.
每行都有存储列密钥吗?
例如
table
c1 int primary key,
c2 int,
c3 int,
insert into table(c1,c2,c3) values(1,2,3)
Run Code Online (Sandbox Code Playgroud)
cassandra如何储存呢?像这样:c1 - > 2,3
或者像这样:c1 - > c2:2,c3:3
它主要取决于您使用的Cassandra版本,因为Cassandra在C*2.2和C*3.0之间组织数据更改.您可以在此处阅读这些更改.在C*3.0之前,SSTables由分区键及其单元组成; 在3.0中,SSTables由分区及其行(包含单元格)组成.
了解数据组织方式的最佳方法是使用类似sstabledump(C*3.0+)的工具,或sstable2json观察执行某些更新并刷新到磁盘后数据在磁盘上的组织方式.
以下文章概述了如何使用sstabledump.
对于您提出的架构和插入,这是一个事物如何出现的示例:
[
{
"partition" : {
"key" : [ "1" ],
"position" : 0
},
"rows" : [
{
"type" : "row",
"position" : 32,
"liveness_info" : { "tstamp" : "2018-09-06T00:03:38.558182Z" },
"cells" : [
{ "name" : "c2", "value" : 2 },
{ "name" : "c3", "value" : 3 }
]
}
]
}
]
Run Code Online (Sandbox Code Playgroud)
如您所见,数据按分区组织,然后在分区内有行.在每行内是单元格,每个单元格代表一个列值.
还有其他元数据可以出现在分区,行和单元级别.C*3存储引擎还通过不在每个单元格中存储每列的名称来优化空间(C*2所做的).
| 归档时间: |
|
| 查看次数: |
57 次 |
| 最近记录: |