LevelDB 源码解析之 Arena】的更多相关文章

GitHub: https://github.com/storagezhang Emai: debugzhang@163.com 华为云社区: https://bbs.huaweicloud.com/blogs/250328 内存池 内存池的存在主要就是减少调用 malloc 或者 new 的次数,减少内存分配所带来的系统开销,提升性能. LevelDB 中的内存池是由类 Arena 实现的.Arena 先向系统申请一块大的内存,当其他组件需要申请内存时,Arena 先将已有的内存块分配给组件,…
GitHub: https://github.com/storagezhang Emai: debugzhang@163.com 华为云社区: https://bbs.huaweicloud.com/blogs/249894 LevelDB: https://github.com/google/leveldb C 语言中伪随机数生成算法实际上是采用了"线性同余法": \(seed = (seed * A + C ) \% M\) 其中 \(A,C,M\) 都是常数(一般会取质数).当…
Bloom Filter,即布隆过滤器,是一种空间效率很高的随机数据结构. 原理:开辟m个bit位数组的空间,并全部置零,使用k个哈希函数将元素映射到数组中,相应位置1.如下图,元素K通过哈希函数h1,h2,h3在数组上置1. LevelDB中加入bloom filter的支持.目前针对一次查询,LevelDB可能需要在每个level上进行一次磁盘随机访问.通过使用bloom filter可以大大减少所需要的磁盘I/O操作.比如,假设调用者正在查找一个值为"Foo"的key,Level…
GitHub: https://github.com/storagezhang Emai: debugzhang@163.com 华为云社区: https://bbs.huaweicloud.com/blogs/253047 LevelDB: https://github.com/google/leveldb Varint 编码 LevelDB 内部采用变长编码,对数据进行压缩,减少存储空间,再采用 CRC 校验数据. 整型数据是以 32(64) 位来表示的,以 32 位为例,存储需要 4 个字…
LevelDB的公共部件并不复杂,但为了更好的理解其各个核心模块的实现,此处挑几个关键的部件先行备忘. Arena(内存领地) Arena类用于内存管理,其存在的价值在于: 提高程序性能,减少Heap调用次数,由Arena统一分配后返回到应用层. 分配后无需执行dealloc,当Arena对象释放时,统一释放由其创建的所有内存. 便于内存统计,如Arena分配的整体内存大小等信息. class Arena { public: Arena(); ~Arena(); // Return a poin…
上一篇文章讲述了SSTable的格式以后,本文结合源码解析SSTable是如何生成的. void TableBuilder::Add(const Slice& key, const Slice& value) { //如果已经插入过数据,那么要保证当前插入的key > 之前最后一次插入的key, // SSTable必须是有序的插入数据 ) { assert(r->options.comparator->Compare(key, Slice(r->last_key)…
简介 Exchanger,并发工具类,用于线程间的数据交换. 使用 两个线程,两个缓冲区,一个线程往一个缓冲区里面填数据,另一个线程从另一个缓冲区里面取数据.当填数据的线程将缓冲区填满时,或者取数据的线程将缓冲区里的数据取空时,就主动向对方发起交换缓冲区的动作,而交换的时机是,一个缓冲区满,另一个缓冲区空.代码如下,很简单,没有加注释. public class FillAndEmpty { Exchanger<DataBuffer> exchanger = new Exchanger<…
coming from http://blog.csdn.net/sparkliang/article/details/8567602 [前言:看了一点oceanbase,没有意志力继续坚持下去了,暂时就此中断,基本上算把master看完了,比较重要的update server和merge server代码却没有细看.中间又陆续研究了hadoop的源码,主要是name node和写入pipeline.主要的目的是想看看name node对namespace的管理,以及hadoop在写入操作时,c…
写在前面 上一篇文章对Caffe2中的core模块进行了简单拆解Caffe2源码解析之core,本篇给出其它模块的拆解,目的是大致了解每个模块的内容和目标,进一步理解Caffe2的整体框架.内容不多,略做整理如下. 目录 core proto caffe2.proto hsm.proto metanet.proto cuda_rtc db distributed ideep image mkl mobile mpi observers onnx operators opt perfkernels…
本系列将从以下三个方面对Tinker进行源码解析: Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Android热更新开源项目Tinker源码解析系列之二:资源文件热更新 Android热更新开源项目Tinker源码解析系类之三:so文件热更新 转载请标明本文来源:http://www.cnblogs.com/yyangblog/p/6252855.html更多内容欢迎star作者的github:https://github.com/LaurenceYang/artic…