Leveldb源码分析--11

本文详细分析了LevelDB的TableCache,包括其作为LRUCache缓存Table对象的实现,Get接口的使用,如何遍历Table以及FindTable函数的查找逻辑。TableCache在找不到缓存时会尝试打开并读取SSTable文件,然后将其插入到缓存中。
摘要由CSDN通过智能技术生成

7 TableCache

这章的内容比较简单,篇幅也不长。

7.1 TableCache简介

TableCache缓存的是Table对象,每个DB一个,它内部使用一个LRUCache缓存所有的table对象,实际上其内容是文件编号{file number, TableAndFile*}。TableAndFile是一个拥有2个变量的结构体:RandomAccessFile*和Table*;

TableCache类的主要成员变量有:

  Env* const env_; // 用来操作文件
  const std::string dbname_; // db名
  Cache* cache_;  // LRUCache

三个函数接口,其中的参数@file_number是文件编号,@file_size是文件大小:

  void Evict(uint64_tfile_number);
  // 该函数用以清除指定文件所有cache的entry,函数实现很简单,就是根据file number清除cache对象。
  EncodeFixed64(buf,file_number); cache_->Erase(Slice(buf, sizeof(buf)));
  Iterator* NewIterator(constReadOptions& options, uint64_t file_number,
                        uint64_t file_size, Table**tableptr = NULL);
  //该函数为指定的file返回一个iterator(对应的文件长度必须是"fi
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值