leveldb源码分析
2016-10-15 19:10
295 查看
我正在读leveldb的源码,欢迎一起交流。
这篇文章是读完代码之中或之后要写的,先立一个flag。
2016.10.15 at Bunny Drop
读完了如下目录:
要点:
MemTable内部结构实现 :
1. 使用Arena来进行内存管理
2. 底层的数据结构是SkipList,方便用于插入和查找
3. ref_count是引用计数
4. comparator_比较函数
SkipList结构:
1. head_
2. max_height_(12)
3. comparator_ 比较函数
4. arean管理内存
5. Node含有一个key(就是下面的arena内部结构,包含key和value)和一个12个指针的数组
Arena内部结构:
1. 一个vector放指针,每个指针就是一次分配内存的指针,默认一次的分配大小是4KB.如果要求的空间>1KB的话,会直接分配需要的大小。
2. 数据一般是一个挨一个的放置。但也可以内存地址对齐的方式放置。
在Arena存放的数据的结构:
2016.10.16 at Bunny Drop
这篇文章是读完代码之中或之后要写的,先立一个flag。
2016.10.15 at Bunny Drop
读完了如下目录:
include/leveldb/* db/skiplist.h db/memtable.(h, cc) util/arena.(h, cc)
要点:
MemTable内部结构实现 :
1. 使用Arena来进行内存管理
2. 底层的数据结构是SkipList,方便用于插入和查找
3. ref_count是引用计数
4. comparator_比较函数
SkipList结构:
1. head_
2. max_height_(12)
3. comparator_ 比较函数
4. arean管理内存
5. Node含有一个key(就是下面的arena内部结构,包含key和value)和一个12个指针的数组
Arena内部结构:
1. 一个vector放指针,每个指针就是一次分配内存的指针,默认一次的分配大小是4KB.如果要求的空间>1KB的话,会直接分配需要的大小。
2. 数据一般是一个挨一个的放置。但也可以内存地址对齐的方式放置。
在Arena存放的数据的结构:
|klength|user_key |type(tag) |vlength |value | |4 Byte |klength-8 Byte |8 Byte |4 Byte |vlenth Byte| |<---user key-->| |<------internal key------->| |<----------memtable key----------->|<-----value----------->|
2016.10.16 at Bunny Drop
相关文章推荐
- levelDB源码分析-Status
- levelDB源码分析-Skiplist
- Leveldb源码分析--13
- Leveldb源码分析--19
- Leveldb源码分析--18
- levelDB源码分析-提纲
- Leveldb源码分析--15
- [Leveldb]源码分析之二 Cache模块的实现
- Leveldb源码分析--11
- Leveldb源码分析--20
- levelDB源码分析-Memtable
- Leveldb源码分析--2
- Leveldb源码分析--5
- leveldb源码分析 之 入门使用
- Leveldb源码分析--12
- levelDB源码分析-Arena
- levelDB源码分析-SSTable:.sst文件构建与读取
- leveldb源码分析 之 入门使用
- Leveldb源码分析--17
- [Leveldb] 源码分析之一接口文件介绍