SStable文件格式
物理结构
为了提高整体的读写效率,一个sstable文件按照固定大小进行块划分,默认每个块的大小为4KiB。每个Block中,除了存储数据以外,还会存储两个额外的辅助字段:
- 压缩类型
- CRC校验码压缩类型说明了Block中存储的数据是否进行了数据压缩,若是,采用了哪种算法进行压缩。leveldb中默认采用Snappy算法进行压缩。
CRC校验码是循环冗余校验校验码,校验范围包括数据以及压缩类型。
逻辑结构
在逻辑上,根据功能不同,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的索引信息;
注意,1-4类型的区块,其物理结构都是如1.1节所示,每个区块都会有自己的压缩信息以及CRC校验码信息。
当前内容版权归 rjl493456442 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 rjl493456442 .