leveldb
leveldb的介绍
小瓶盖的猪猪侠
这个作者很懒,什么都没留下…
展开
-
leveldb源码分析之log 读文件代码
首先是读程序的数据结构 SequentialFile* const file_; //文件操作类 Reporter* const reporter_; //错误报告 bool const checksum_; //是否检查校验值 char* const backing_store_;//临时存储从log文件中读取的内容 Slice buffer_; //用于存储读取内容 bool eof_; //是否为文件的结尾 // Offset of the last record re原创 2020-07-29 10:59:18 · 168 阅读 · 1 评论 -
leveldb源码分析之log 写文件代码
首先分析分析的是RecordType,用于记录log文件的结构 enum RecordType { // Zero is reserved for preallocated files kZeroType = 0, kFullType = 1, // For fragments kFirstType = 2, kMiddleType = 3, kLastType = 4 }; static const int kMaxRecordType = kLastType; stat原创 2020-07-27 10:48:29 · 177 阅读 · 1 评论 -
leveldb源码分析之log文件结构理论基础
log文件在LevelDb中的主要作用是系统故障恢复时,能够保证不会丢失数据。因为在将记录写入内存的Memtable之前,会先写入Log文件,这样即使系统发生故障,Memtable中的数据没有来得及Dump到磁盘的SSTable文件,LevelDB也可以根据log文件恢复内存的Memtable数据结构内容,不会造成系统丢失数据. LevelDb对于一个log文件,会把它切割成以32K为单位的物理Block,每次读取的单位以一个Block作为基本读取单位,下图展示的log文件由3个Block构成,所以从物理原创 2020-07-26 19:53:49 · 303 阅读 · 1 评论 -
leveldb源码分析之Slice
leveldb和redis这样的优秀开源框架都没有使用C++自带的字符串string,redis自己写了个sds,leveldb写了slice,本质上这三个实现原理都是一样的(当然sds是用C实现的),都有成员属性指向字符串的指针和这个字符串的长度。方法无非就是取字符串取字符串长度,字符串拼接等等。 我把slice作为leveldb源码部分的第一个讲解,主要是slice是这个源码最基础的部分,都是别人使用它,它不使用别人。而且相对简单。 class Slice { public: // Create原创 2020-07-17 10:57:00 · 290 阅读 · 1 评论 -
leveldb源码分析之Arena
Arena 是 leveldb 项目里面使用的轻量级的内存池对象,leveldb 用这个对象来管理内存的分配,简化了 new 和 delete 的调用,我们也可以从这个轻量级的内存池对象学习 google 大神工程师是如何管理内存的。 Arena 内存管理模型 Arena 使用下面几个成员变量来描述上面的模型图 // 当前内存块未分配内存的起始地址 char* alloc_ptr_; // 当前内存块剩余的内存 size_t alloc_bytes_remaining_; // Arena 使用 ve原创 2020-07-16 22:35:09 · 243 阅读 · 1 评论