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:用来支持事务的完整性
版本概念:
- 旧的文件有一个version1
- 合并完新的版本为version2
- 当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写入磁盘
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
2021-03-01 常见的排序算法
2020-03-01 从uboot官方开始移植
2020-03-01 uboot官方nkconfig脚本分析