随笔分类 - LevelDB
源码阅读笔记
摘要:是什么 skiplist特点 有几个层组成,每层是一个有序的链表 第一层包含所有元素,如果元素x出现在第i层,则所有比i小的层都包含x 头指针指向最高处的第一个元素 参考LevelDB源码剖析之基础部件-SkipList中示意图: skiplist结构 图1.1中红色部分为初始化状态,即head各个
阅读全文
摘要:是什么 用于产生随机数。 C语言中伪随机数生成算法实际上是采用了“线性同余法”,具体计算如下: seed = (seed * A + C ) % M 其中A,C,M都是常数(一般取质数),当C=0时,叫作乘同余法。 为什么要用 为什么不用系统随机数? 学到什么 可以将长的二进制整数分解为多个段来解决
阅读全文
摘要:是什么 leveldb内部实现的缓存 为什么要用 性能高于内嵌哈希表 学到什么 与(&)操作进行模运算 减少cache锁操作,可以分为多组cache 源码分析 LRUHandle 缓存中代表键值对的数据结构 // An entry is a variable length heap-allocate
阅读全文
摘要:是什么 是一种哈希函数,采用的是MurMurHash的一种变体,是一种高效低碰撞的非加密型哈希函数。 为什么要用 具有较高的平衡性与低碰撞率 学到什么 对于大块数据,可以分多个小的部分进行哈希计算 源码分析 主要就一个hash接口 uint32_t Hash(const char *data, si
阅读全文
摘要:是什么 内存分配管理器,主要为skiplist即Memtable服务而不是整个项目。申请内存时,将申请到的内存直接放入vector中,在Arena的生命周期结束后,统一释放掉所有申请的内存,内部结构如下图: 为什么要用 避免内存碎片,skiplist里面记录的都是用户传进来的key/value,这些
阅读全文
摘要:是什么 status用来判断函数返回的状态信息,封装了错误码和错误信息。 为什么要用 为了便于管理和定位错误类型,一般大型系统都自定义自己的函数返回状态信息 学到什么 void *memcpy(void *str1, const void *str2, size_t n):从存储区 str2 复制
阅读全文
摘要:是什么 slice是对字符串的封装,包括一个字符指针和一个字符串长度,相当于c++中std::string。 为什么要用 开销小,直接操作指针避免不必要的数据拷贝 学到什么 int memcmp(const void *str1, const void *str2, size_t n):比较str1
阅读全文