cassandra如何在sstable中组织价值

fly*_*101 2 cassandra

我很好奇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

And*_*ert 5

它主要取决于您使用的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所做的).