首页   快速返回

leveldb要点     所属分类 leveldb
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%



<dependency>  
    <groupId>org.iq80.leveldb</groupId>  
    <artifactId>leveldb</artifactId>  
    <version>0.7</version>  
</dependency>  
<dependency>  
    <groupId>org.iq80.leveldb</groupId>  
    <artifactId>leveldb-api</artifactId>  
    <version>0.7</version>  
</dependency>  



上一篇     下一篇
tomcat之JMXProxyServlet

javap查看字节码

leveldb简介

一致性算法raft简介

aerospike网络及常用端口

如何做一个小公司的技术总监