首页
移动开发
物联网
服务端
编程语言
企业开发
数据库
业界资讯
其他
搜索
LevelDB 初始化的 UML图(未完结, 里面有点小复杂)
其他
2018-11-18 12:29:26
阅读次数: 0
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Petershusheng/article/details/83959223
LSM数据结构及UML图
LevelDB 初始化的 UML图
levelDB 的 put 方法:
makeRoomForWrite()检查并确保内存充足(涉及到核心的内存和文件压缩逻辑)
LevelDB 初始化的 UML图
Iq80DBFactory
DbImpl
MemTable
DbLock
Logs
静态检查cpu是否64位(因为32位容易用完虚拟地址空间)
open()初始化数据库配置
设置key的比较器internalKeyComparator
初始化内存表(跳跃表实现)
定义并创建压缩的线程池
设置表缓存tableCache
锁定数据库的目录
化并回复当前版本号
读取db文件来, 设置内存的最新版本编号
创建日志对象
清理无用文件
向压缩的线程池提交压缩任务
Iq80DBFactory
DbImpl
MemTable
DbLock
Logs
levelDB 的 put 方法:
DB
DbImpl
log
MemTable
put()数据
检查后台线程是否有异常(后台压缩线程)
创建重入锁
检查内存以确保有足够的内存空间(makeRoomForWrite()复杂)
设置本次的开始序列号sequenceBegin和最大序列号sequenceEnd
将数据写入日志文件
更新内存表(把put()的key和value更新到memTable)
DB
DbImpl
log
MemTable
makeRoomForWrite()检查并确保内存充足(涉及到核心的内存和文件压缩逻辑)
Created with Raphaël 2.2.0
makeRoomForWrite()
检查是否持有当前线程的重入锁?
允许延迟并且当前版本的 level0的文件数超过了文件数的软限制?
释放重入锁并睡眠1ms以让出cpu给压缩线程
非强制并且内存表的内存使用< 写缓存的大小?
结束
不可变内存仍未释放
线程等待唤醒
当前版本的 level0的文件数大于最大限制数12
关闭当前日志对象并新起一个log
固化当前内存为不可变内存, 并重新分配可变内存
取消强制压缩的限制(force=false)
提交压缩任务到压缩的线程池
yes
no
yes
no
yes
no
yes
no
yes
no
上面提交压缩任务的执行的方法是:maybeScheduleCompaction(), 实现如下:
Created with Raphaël 2.2.0
猜你喜欢
转载自
blog.csdn.net/Petershusheng/article/details/83959223
LevelDB 初始化的 UML图(未完结, 里面有点小复杂)
LevelDB 完全解析(7):初始化
初始leveldb
c语言的基础知识点(思维导图)(未完结)
复杂map初始化
快读(快速读入)有多快(未完结)
leveldb
Dubbo:服务消费初始化UML时序图。
Echarts中实现一个初始化有默认选中的内容的饼图
Spring 初始化XmlBeanFactory时序图
小程序项目初始化
初始化微信小程序
PyTorch模型结构可视化方法总结(未完结)
Codeforces Global Round 1 (CF1110) (未完结,只有 A-F)
【C++ -> 容器初始化】结构体嵌套复杂结构初始化
C++初始化问题fill()、memset()函数和图初始化
基于可靠姿态图初始化和历史重加权的鲁棒多视图点云配准
java学习路程之篇十、知识点、数组介绍、二维数组介绍、静态初始化、访问元素、遍历元素、动态初始化、内存图、数组常见问题
基于 Annotation 的 IOC 初始化(未完善)
基于 xml 的 IOC 容器的初始化(未完善)
vc里面字符串变量的初始化
Broadcast 的 onReceive 里面初始化 handler 的问题
c语言里面变量初始化问题与Java区别
结构体里面的函数指针怎么初始化
c++里面 vector的初始化方法
vue刷新初始化组建里面的data
C++列表初始化是初始化本类自身含有的成员变量,不能直接初始化继承过来的成员变量
Vue源码思维导图-------------Vue 初始化
echarts pie饼图初始化的时候没数据
echarts.js饼状图初始化
今日推荐
周排行
AIZU 2224 Save your cats(并查集)
HTTP响应头状态码详解
Python socket编程(2)
MaxCompute Studio使用心得系列7—作业对比
Supervisor安装使用
LeetCode 164. Maximum Gap
mysql面试题: 一张表里面有ID自增主键,当insert了17条记录之后,删除了第15,16,17条记录,再把mysql重启,再insert一条记录,这条记录的ID是18还是15
nutch1.2 DeleteDuplicates IndexMerger 详解
OC - @property与setter,getter方法
SpringBoot @Transactional的rollbackFor属性
每日归档
更多
2024-09-19(0)
2024-09-18(0)
2024-09-17(0)
2024-09-16(0)
2024-09-15(0)
2024-09-14(0)
2024-09-13(0)
2024-09-12(0)
2024-09-11(0)
2024-09-10(0)