• 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个区块组成

  • 相关阅读:
    ajax请求跨域和表单重复提交解决方案
    HTTP请求(HttpClient和PostMan)
    HTTP协议
    Oracle学习整理(二)
    oracle学习整理(一)
    MySQL的慢查询日志
    mysql索引优化
    Explain
    打好太极拳科学压腿的方法
    太极拳的压腿基本功
  • 原文地址:https://www.cnblogs.com/zyj23/p/15949459.html
Copyright © 2020-2023  润新知