leveldb概括

一、概括

基本组件:接口方法、参数、数据存储、迭代器(遍历表)、string(自定义的,因为c++自带的拷贝花销大)、锁、状态信息(返回值)

leveldb使用的是小端模式

功能:对外提供四个接口:put\delete\write\get

解决了什么问题:内容持久化、顺序读写

leveldb写流程:

  先写log文件---->再把数据更新到内存Memtable中---->当Memtable超过一定大小时变成Imutable---->存放到磁盘中sstable

leveldb读流程:

  先去Memtable中查找键值---->(没找到)去imutable中找---->去磁盘中找(leve0/leve1.......)

Manifest:所有涉及sstable的文件的操作都会在这里做相应的记录

Current:记载当前manifest的文件名

log文件:

  普通的log文件

  WAL log:用来支持事务的完整性

版本概念:

  1. 旧的文件有一个version1
  2. 合并完新的版本为version2
  3. 当v1---->v2的时候,如果有很多请求,v1来服务,当v2生成时会把v1删除,v2来服务

version的数据结构:

  • version:常量类型,一个版本中包含有多少文件
  • versionEdit:delta类型
  • +由versionSet::Builder表示
  • =由versionSet::Builder::SaveTo表示
  • versionSet:同时保留{A---->B}两个版本

 LSM树:

  • 非就地更新(lsm):写密集型场景,支持随机写高效(和顺序写一样),把随机写入(日志紧追加方式)--->顺序写,从尾部读
  • 日志紧追加的缺点:浪费空间(通过引入GC垃圾回收机制改进),读取延迟高(优化读取效率,引入跳表,达到一定size就sump磁盘,更进一步引入活跃跳跃表/一般跳表来解决不能及时dump的情况)
  • 第一层归并后的文件一定没有重复的key
  • 为了持久化操作引入wal log,为保证wal log太大引入快照,记录哪些value写入磁盘
posted @ 2022-03-01 08:45  Z9Y1J5  阅读(61)  评论(0编辑  收藏  举报