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

  • 相关阅读:
    POJ 2018 二分
    873. Length of Longest Fibonacci Subsequence
    847. Shortest Path Visiting All Nodes
    838. Push Dominoes
    813. Largest Sum of Averages
    801. Minimum Swaps To Make Sequences Increasing
    790. Domino and Tromino Tiling
    764. Largest Plus Sign
    Weekly Contest 128
    746. Min Cost Climbing Stairs
  • 原文地址:https://www.cnblogs.com/zyj23/p/15949459.html
Copyright © 2020-2023  润新知