leveldb要点
所属分类 leveldb
浏览量 1545
LSM Log Structured Merge Tree
MemTable + ImmutableMemTable + SSTables + log(WAL) + metadata-files
manifest文件
SST文件列表 及相应的key区间
当数据库被重新打开时,会创建一个新的manifest文件(文件命中包含一个新的number序号)
CURRENT文件 保存当前manifest文件名
写日志 写内存(保存最近的更新)
MemTable 达到指定容量 , 转成 只读 MemTable ,生成一个新的 MemTable
MemTable 基于 跳跃表 ,memtable 默认大小 4M , 参数 writeBufferSize
后台线程 dump 只读 MemTable 到硬盘 生成 SSTable
删除当做特殊的写入,带删除标记
SSTable 按key顺序存储 多个 SSTables 分层组织
最年轻的层 level0 , 由 只读 memtable dump 形成
Level 0 的 SSTables 包含重复的 key , 重叠 , 一个key会出现在多个 sstable 中
其他层的 SSTables 不会重叠
每层都有数量限制 或者 大小限制 , 限制按指数增长
例如,Level1中的最大数据量不超过10mb,level2不超过100mb
后台压缩 ,大小超出 限制 ,启动压缩
挑选 重叠的 SSTable 进行压缩合并
Level 0 合并 特殊处理 ,SSTables 超过4个 触发合并
压缩 删除 覆盖写的值 和 删除的值 ,保证 新鲜的数据留在 更低的level
陈旧的数据逐渐移动到更高的level。
读比写复杂
查找顺序
MemTable > Immutable MemTable > level0 > level1 ... > levelN
找到之后终止
布隆过滤器 确认不存在的key 避免 查找不存在的 key
原生leveldb 基于C++开发
iq80 实现了 JAVA 版本的 leveldb ,经过很多大型项目验证( 比如ActiveMQ )
JAVA版leveldb 性能 比 c++ 版本 慢 10%
org.iq80.leveldb
leveldb
0.7
org.iq80.leveldb
leveldb-api
0.7
上一篇
下一篇
tomcat之JMXProxyServlet
javap查看字节码
leveldb简介
一致性算法raft简介
aerospike网络及常用端口
如何做一个小公司的技术总监