本篇主要讲解下leveldb内部所使用的Cache整体结构及初始化好流程。Cache主要分TableCache和BlockCache。
Cache结构
1.TableCache
图1
TableCache:
Key: 落地存储文件名称,例如000021.ldb文件,file_number就是000021。Value: 包括两部分,一是ldb文件句柄,二是ldb文件的table信息,详细的内容已在图1中介绍。
注: 当前版本是1.22版本,落地的文件好像不是sst格式,而是ldb格式。
2.BlockCache
图2
BlockCache:
key: 当前table对应的缓存id + BlockData在ldb文件中的偏移位。Value: 就是真实的BlockData数据。
注: 因为打开的ldb(就是sst)文件中的BlockData都是存放于全局一份的BlockCache中的, 而不同的ldb文件其BlockData的offset可能相同,为了区分不同ldb文件中的BlockData的 offset,所以要给每个ldb文件分配一个唯一的 cache_id,这样key = cache_id + block_offset的组合就是唯一的了。
Cache创建流程
图3
Cache中Key查询流程
图4
Cache类关系图
图5
总结:
本篇主要是对leveldb中的Cache结构、流程、类关系图进行的整体的说明,接下来的文章会进行源码的走读注解。