![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
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 · 173 阅读 · 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 · 182 阅读 · 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 · 307 阅读 · 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 · 293 阅读 · 1 评论 -
leveldb学习之初识
基本概念leveldb是一个写性能十分优秀的存储引擎,是典型的LSM树(Log Structured-Merge Tree)实现。LSM树的核心思想就是放弃部分读的性能,换取最大的写入能力。LSM树写性能极高的原理,简单地来说就是尽量减少随机写的次数。对于每次写入操作,并不是直接将最新的数据驻留在磁盘中,而是将其拆分成(1)一次日志文件的顺序写(2)一次内存中的数据插入。leveldb正是实践了这种思想,将数据首先更新在内存中,当内存中的数据达到一定的阈值,将这部分数据真正刷新到磁盘文件中,因而获得了极原创 2020-06-18 11:06:52 · 235 阅读 · 1 评论