SStable文件格式

物理结构

为了提高整体的读写效率,一个sstable文件按照固定大小进行块划分,默认每个块的大小为4KiB。每个Block中,除了存储数据以外,还会存储两个额外的辅助字段:

  • 压缩类型
  • CRC校验码压缩类型说明了Block中存储的数据是否进行了数据压缩,若是,采用了哪种算法进行压缩。leveldb中默认采用Snappy算法进行压缩。

CRC校验码是循环冗余校验校验码,校验范围包括数据以及压缩类型。

SStable文件格式 - 图1

逻辑结构

在逻辑上,根据功能不同,leveldb在逻辑上又将sstable分为:

  • data block: 用来存储key value数据对;
  • filter block:用来存储一些过滤器相关的数据(布隆过滤器),但是若用户不指定leveldb使用过滤器,leveldb在该block中不会存储任何内容;
  • meta Index block: 用来存储filterblock的索引信息(索引信息指在该sstable文件中的偏移量以及数据长度);
  • index block:index block中用来存储每个data block的索引信息;
  • footer: 用来存储meta index block及index block的索引信息;SStable文件格式 - 图2

注意,1-4类型的区块,其物理结构都是如1.1节所示,每个区块都会有自己的压缩信息以及CRC校验码信息。