【leveldb】SSTable(十一):存储结构说明

针对SSTable的结构说明,这篇博客已有介绍,可点此链接查看,leveldb整体架构
本篇是针对SStable结构的进一步扩展介绍说明。系列文章的分析都是基于leveldb 1.22版本分析的。

SSTable文件结构

落地的SSTable文件结构如下图1
在这里插入图片描述

图1

其中Data blockMeta blockMetablock indexindex block都属于Block,
Footer是单独的数据格式。

1.Block结构

在这里插入图片描述

图2
2.Footer结构

Footer结构共占用48Byte,组成如下:
在这里插入图片描述

图3

字段含义如下:

  • magic默认占用8Byte。
  • metaindex_block_handle指出metaindex Block中SSTable中的偏移位和大小。
    由offset+size组成,二者都是Varint64编码,每个Varint64最多占用10个字节,
    亦即mataindex_block_handle最多占用20Byte。
  • index_block_handle同理metaindex_block_handle,它是指出Index Block在
    SSTable中的偏移位和大小,同样由offset+size组成。
  • padding_byte就是在metaindex_block_handle和
    index_block_handle不够40Byte进行的填充。
Data Block结构

Data Block由三部分组成:

  • 每个KV对,即Entry块。
  • 重启点restart[]。
  • 重启点的个数。

具体参考结构如下:
在这里插入图片描述

图4

每个Entry的KV是来自于Memtable,对Memtable不熟悉的可点此链接:Memtable解析

这里的Key是指Memtable的InternalKey,Value就是Value。Memtable中的InternalKey结构如下:
在这里插入图片描述

图5

对于Data Block中各个字段的含义可点击博文开头部分链接查看,更详细的解释留到代码分析部分去说明。

Index Block

每写完一个Data block(4KByte大小,刷新到磁盘),就会往Index Block中写入此Data block的一条记录。接下来看下Index Block的逻辑结构:
在这里插入图片描述

图6

Index Block与Data Block的关系,如下图:
在这里插入图片描述

图7

对于Index字段的解析如下:

  • Key: 记录大于等于数据块i中最大的 key 值的那个 key。在索引里保存的这个
    key 值未必一定是某条记录的 key,以上的例子来说,假设数据块i的最小key=“samecity”,
    最大key=“the best”;数据块i+1的最小key=“the fox”,最大key=“zoo”,那么对于数据块i的
    索引 index i 来说,其第一个字段记载大于等于数据块i的最大Key(“the best”) 同时要小于数
    据块i+1的最小Key(“the fox”),所以例子中 index i 的第一个字段是 “the c”,这个是满足要求
    的;而 index i+1 的第一个字段则是 “zoo”,即数据块i+1的最大 key。
  • Offset: 指出数据块 i 在 .sst 文件中的起始位置。
  • Size: 指出 Data Block i 的大小(有时候是有数据压缩的)。
Meta Block

当前版本leveldb用到的Meta Block只有 Filter Block。每个SSTable中只有一个Filter Block,
其结构如下:
在这里插入图片描述

图8

字段说明如下:

  • 每个Filter大小是2KBte。
  • Filter_N Offset存的是对应的Filter在Filter Block中的偏移位。
  • Filter Offset Offset指向Filter_N Offset在Filter Block中的起始偏移位。
  • Base Lg是个结束标志,为11,亦表示一个Filter的大小。
Metablock Index

Metablock Index的结构比较简单,就三个字段:Key、Offset、Size。
Metablock Index与Meta Block(Filter Block)的关系,如下图:
在这里插入图片描述

图9

对于Metablock Index字段解析如下:

  • Key:一般就是filter.“过滤策略名称”。
  • Offset:指出Filter Block在SSTable中的偏移位。
  • Size:指出这个Filter Block的大小。
总结

本篇主要是对SSTable中涉及到的存储结构做个说明,对各个存储结构模块的代码解析后续文章会一一道来。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值