我正在读leveldb的源码,欢迎一起交流。
这篇文章是读完代码之中或之后要写的,先立一个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