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 @   Z9Y1J5  阅读(72)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
历史上的今天:
2021-03-01 常见的排序算法
2020-03-01 从uboot官方开始移植
2020-03-01 uboot官方nkconfig脚本分析
点击右上角即可分享
微信分享提示