概述
前面分析了leveldb中cache机制的实现,下面来分析下leveldb基于cache机制实现的两个不同功能的cache,分别是table cache和block cache。table cache缓存的是sstable的索引数据,类似于文件系统中对inode的缓存;block cache是缓存的block数据,block是sstable文件内组织数据的单位,也是从持久化存储中读取和写入的单位,类似于文件系统中文件块的缓存;
Cache* NewLRUCache(size_t capacity) {
return new ShardedLRUCache(capacity);
}
virtual Handle* Insert(const Slice& key, void* value, size_t charge,
void (*deleter)(const Slice& key, void* value)) {
上面是创建cache的接口,创建TableCache和block cache都是调用的该接口,只不过他们capacity的含义不同。
以及插入一个cache元素的接口,TableCache和block cache插入元素都是调用该接口,key代表插入元素的key值是多少,用于hash快速查找,value就是cache真正缓存的数据,charge表示该元素占cache容量的权重是多少。
capacity的含义是和charge相对应的。
TableCache
TableCache中的capacity代表的含义是最多能够缓存多少个sstable文件的索引信息,
tablecache默认容量是1000,意味这最多能缓存1000个sstable文件的索引信息。table cache的大小由options.max_open_files确定,其最小值为20-10,最大值为50000-10。
DBImpl::DBImpl(const Options& raw_options, const std::string& dbname)
{
...
const