LevelDB源码分析1-基础
2016-11-16 15:52
225 查看
1、一些约定
1.1 字节序Leveldb对于数字的存储是little-endian,把int32或者int64转换为char*的函数中,是按照先低位,后高位的顺序存放,也就是litte-endian。
1.2 VarInt
把一个int32或者int64格式化到字符串中,除了上面说的little-endian字节序外,大部分还是变长存储的,也就是VarInt。对于VarInt,每byte的有效存储是7bit的,用最高的8bit位来表示是否结束,如果是1就表示后面还有一个byte的数字,否则表示结束。
1.3 字符比较
是基于unsigned char的,而非char。
2、基本数据结构
2.1 SliceLeveldb中的基本数据结构,它包括length和一个指向外部字节数组的指针。和string一样,允许字符串中包含’\0’。
提供一些基本接口,可以把const char*和string转换为Slice;把Slice转换为string,取得数据指针const char*。
2.2 Status
Leveldb 中的返回状态,将错误号和错误信息封装成Status类,统一进行处理。并定义了几种具体的返回状态,如成功或者文件不存在等。
为了节省空间Status并没有用std::string来存储错误信息,而是将返回码(code), 错误信息message及长度打包存储于一个字符串数组中。
成功状态OK 是NULL state_,否则state_ 是一个包含如下信息的数组:
state_[0..3] == 消息message长度
state_[4] == 消息code
state_[5..] ==消息message
2.3 Arena
Arena为leveldb的内存管理单元,避免频繁的new/delete,减少内存申请和释放带来的开销。
2.4 SkipList
leveldb在内存中的数据为memtable(也有immuable memtable,只读),在底层用skiplist来实现。skiplist平均查找时间为O(logN),最坏为O(N),实现简单,常数项小。lerveldb采用内存屏障来实现同步,支持多线程操作。
相关文章推荐
- dm9000a驱动源码分析(网络基础部分)
- OpenStack Nova源码分析之-基础环境配置
- leveldb源码分析 之 入门使用
- Leveldb源码分析--1
- java源码分析之TreeMap基础篇
- C#分析数据库结构,使用XSL模板自动生成代码 - 清清月儿 .NET万花筒 Asp.net技术 Asp.net教程 Asp.net源码 Asp.net基础 Asp.net控件 Asp.net入门 - CSDNBlog
- Leveldb源码分析--6
- 基于mjpg-streamer-r63的源码分析之:基础知识详细解释[一]
- 基于mjpg-streamer-r63的源码分析之:基础知识详细解释[二]
- Leveldb源码分析--4
- jQuery1.6.2源码分析(二)JQ基础变量定义
- levelDB源码分析-Skiplist
- levelDB源码分析-Arena
- 基于mjpg-streamer-r63的源码分析之:基础知识详细解释[二]
- levelDB源码分析-SSTable:.sst文件构建与读取
- leveldb源代码分析2 理论基础
- levelDB源码分析-Status
- levelDB源码分析-SSTable
- Jquery源码 基础分析
- Leveldb源码分析--5