sst文件结构/table_builder.h分析

一、SST文件结构分析

其中data block/filter block/meta_index block称之为 x block

 index block:每个key_value表示一个index entry,指向一个data block,key为data block中最大的key,value为8字节,存储了data block的在SST文件中的offset/size

meta_index  block:整个block只有一个key_value(key为filter block的name,value为filter block的offset和size)

二、table_builder.h分析

memtable写满后由SST文件存储,这个过程由table_builder完成

变量:rep_,所有的数据、状态都存放在rep中

函数功能:

  • TableBuilder():初始化rep,构造filter block
  • WriteRawBlock():把一段数据(raw block)写入文件中,并返回block在文件中的offset和size,block handle类型
    • 功能:block的数据和trailer被写入文件
  • WriteBlock():对block做处理再写入文件(压缩、不压缩)
    • data block:是key_value数据的block(包含很多的key_value),对应一个filter block
    • index_entry:每个block对应一个index_entry
  • Add():1、增加的key必须大于last_key,key必须是升序的;2、把key加入到filter block中,将offset和size作为value加入index_block,更新last_key,把本次的key_value加入data block中,然后data block会把数据序列化后放入自己的buffer中;3、data block中size达到阈值会flush到文件中
  • flush():把data block和blockhandle中的offset和size写入文件,调用writablefile内部的buffer写入磁盘,创建filter block
  • Finish():完成SST文件的全部构建
  1. 调用flash(),设置标志位,写入最后一块data block
  2. 完成Filter block的构建,并写入文件
  3. 创建meta_index_block(key是filter$name,value是filter block的offset  size编码的结果)
  4. 如果有pending_index_entry就加入index block
  5. 生成footer,并写入文件,更新rep_

最终 TableBuilder产生的SST文件由5个区块组成

 

posted @ 2022-03-01 11:43  Z9Y1J5  阅读(142)  评论(0编辑  收藏  举报