您的位置:首页 > 其它

leveldb源码分析

2016-10-15 19:10 295 查看
我正在读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(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