cassandra如何在sstable中组织价值

时间:2018-09-05 23:39:48

标签: cassandra

我很想知道cassandra如何在sstable中组织行的值。
是否存储每一行​​的列键?

例如

table  
c1 int primary key,  
c2 int,  
c3 int,  

insert into table(c1,c2,c3) values(1,2,3)

cassandra如何存储它? 像这样: c1-> 2,3

或类似这样: c1-> c2:2,c3:3

1 个答案:

答案 0 :(得分:5)

这很大程度上取决于您使用的Cassandra版本,因为Cassandra组织C * 2.2和C * 3.0之间的数据更改的方式。您可以了解有关这些更改here。在C * 3.0之前,SSTable由分区键及其单元组成。在3.0中,SSTable由分区及其行(包含单元格)组成。

找出数据组织方式的最佳方法是使用sstabledump(C * 3.0+)或sstable2json之类的工具来观察执行更新和刷新后磁盘上数据的组织方式到磁盘。

The following article概述了如何使用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 }
        ]
      }
    ]
  }
]

如您所见,数据是按分区组织的,然后在分区内有行。每行中都有一个单元格,每个单元格代表一个列值。

在分区,行和单元格级别还可以存在其他元数据。 C * 3存储引擎还通过不将每个列的名称存储在每个单元格中(C * 2这样做的地方)来优化空间。