RocksDB模块功能说明

RocksDB模块结构图

在这里插入图片描述

模块功能说明

Log文件

Log文件位于磁盘上,如果配置了写Log会在写Memtable之前将KV值通过写WAL的方式写到Log文件中,用于写Mentable中出现故障时恢复数据。

Log是一个通用的日志流文件,提供一个只能追加写的方式,文件内部分解成很多个Block,每个Blocksize为32kb,每个Block由多条record组成,当一个Block剩余空间不足以放下一个新的record时,剩下的空间会用\0填充,即下图中的P空间。

Log文件结构图
Log文件结构图

Memtable

Memtable位于内存中,内部结构为SkipList,分为Active MemTable和Immutable MemTable。

当Active MemTable达到设置阈值(write_buffer_size)后会转换成Immutable MemTable(只读的)。

当累积4个Immutable MemTable,每个256M,4个即1G后,会强制flush刷到磁盘上,其内部结构为跳表,设计出发点为当前链表已经是有序的,但是不能使用二分法查找。
在这里插入图片描述

BlockCache

RocksDB默认使用8MB容量的基于LRU算法的BlockCache.

BlockCache存储的是非压缩的数据块,用户可以选择性的设置第二个BlockCache用来存储压缩的数据块。

读数据过程当读到BlockCache时,首先从非压缩的BlockCache中读取数据,然后是压缩BlockCache。

SST

SST文件位于磁盘上,存放着Key-Value的持久文件。

这些文件中的Key一般都是按照排列好的顺序组织以便通过二分查找法识别。当文件较大时,还可以为其建一个Key-Value位置的索引,指明每个Key在SST File中的偏移距离,这样可以加速在SST File中的查询。

当Immutable Memtable达到设置阈值后会由后台线程Flush到磁盘上即形成SST文件,目前设置阈值为4*256M=1G,后续的Compaction操作也是在SST文件中进行。

RocksDB将SST文件切割成一个一个块,每个块都是由数据+类型+CRC码(循环冗余校验码)SST文件打开格式都是如下图所示:
在这里插入图片描述
RocksDB根据用途将这些Block又分为数据块Data Block,元数据块Meta Block,元数据索引块Meta Block Index,数据索引块Index Block和文件尾Footer。
1、数据块主要就是存储数据的地方,Immutable Memtable中的键值对就是存储在数据块;
2、元数据块主要就是用于过滤,加快检索速度。
3、元数据索引块,RocksDB默认一个过滤器,所以元数据块索引块就一条记录;
4、数据索引块,存储每一个数据块的偏移和大小,用于定位数据块。
5、文件尾,存储了数据索引块和元数据索引块,用于读取这两个块;整个模型图如下:
在这里插入图片描述
在读取SST文件的Data Block时,一般先读取出Footer,然后根据Footer读取出Index Block,由于Index Block中存储各个数据块的偏移和大小,就可以读取出对应的Data Block。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值