首页
移动开发
物联网
服务端
编程语言
企业开发
数据库
业界资讯
其他
搜索
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饼状图初始化
今日推荐
《美国对全球网络空间安全与发展的威胁和破坏》报告发布
火速冲上 GitHub 热榜 —— 开源编程语言、框架哪有这么可爱?
北京人形机器人创新中心发布全球首个纯电驱拟人奔跑的全尺寸人形机器人“天工”
LFOSSA 源来如此公开课 | 掌握云原生未来:CNCF 认证全面攻略与备考秘籍
周排行
让自己的头脑极度开放
CentOS 6.5(x64) 和Redhat6.5操作系误删libc
高可用注册中心
【日记】12.28/【题解】AtCoder AGC041
XML(5)_XML 约束_DTD
Java集合Map(四)
树梅派安装桌面环境教程
pipenv 的 使用和安装
小程序白屏问题和内存研究
C语言简单选择排序
每日归档
更多
2024-05-02(0)
2024-05-01(4)
2024-04-30(1)
2024-04-29(40)
2024-04-28(0)
2024-04-27(56)
2024-04-26(39)
2024-04-25(22)
2024-04-24(36)
2024-04-23(26)