Leveldb源码解析之Bloom Filter】的更多相关文章

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/249894 LevelDB: https://github.com/google/leveldb C 语言中伪随机数生成算法实际上是采用了"线性同余法": \(seed = (seed * A + C ) \% M\) 其中 \(A,C,M\) 都是常数(一般会取质数).当…
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/253047 LevelDB: https://github.com/google/leveldb Varint 编码 LevelDB 内部采用变长编码,对数据进行压缩,减少存储空间,再采用 CRC 校验数据. 整型数据是以 32(64) 位来表示的,以 32 位为例,存储需要 4 个字…
上篇博客我们对Signal的基本实现以及Signal的面向协议扩展进行了介绍, 详细内容请移步于<Signal中的静态属性静态方法以及面向协议扩展>.并且聊了Signal的所有的g功能扩展都是放在Signal所实现的SignalProtocol协议的扩展中的.本篇博客就沿袭上篇博客的内容,我们来聊一下SignalProtocol的部分扩展.本篇博客我们主要来聊一下对Signal添加Observer的observe()方法扩展的具体实现,并且聊一下Signal的Map和Filter相关的功能扩展…
上篇博客我们对Signal的基本实现以及Signal的面向协议扩展进行了介绍, 详细内容请移步于<Signal中的静态属性静态方法以及面向协议扩展>.并且聊了Signal的所有的g功能扩展都是放在Signal所实现的SignalProtocol协议的扩展中的.本篇博客就沿袭上篇博客的内容,我们来聊一下SignalProtocol的部分扩展.本篇博客我们主要来聊一下对Signal添加Observer的observe()方法扩展的具体实现,并且聊一下Signal的Map和Filter相关的功能扩展…
上一篇文章讲述了SSTable的格式以后,本文结合源码解析SSTable是如何生成的. void TableBuilder::Add(const Slice& key, const Slice& value) { //如果已经插入过数据,那么要保证当前插入的key > 之前最后一次插入的key, // SSTable必须是有序的插入数据 ) { assert(r->options.comparator->Compare(key, Slice(r->last_key)…
上一章聊到 TsFile 的文件组成,以及数据块的详细介绍.详情请见: 时序数据库 Apache-IoTDB 源码解析之文件数据块(四) 打一波广告,欢迎大家访问IoTDB 仓库,求一波 Star. 这一章主要想聊聊: TsFile索引块的组成 索引块的查询过程 索引块目前在做的改进项 索引块 索引块由两大部分组成,其写入的方式是从左到右写入,也就是从文件头向文件尾写入.但读出的方式是先读出TsFileMetaData 再读出 TsDeviceMetaDataList 中的具体一部分.我们按照读…
date: 2020-07-20 16:15:00 updated: 2020-07-27 13:40:00 Parquet 源码解析 Parquet文件是以二进制方式存储的,所以是不可以直接读取的,文件中包括该文件的数据和元数据,因此Parquet格式文件是自解析的.在HDFS文件系统和Parquet文件中存在如下几个概念. HDFS块(Block):它是HDFS上的最小的副本单位,HDFS会把一个Block存储在本地的一个文件并且维护分散在不同的机器上的多个副本,通常情况下一个Block的大…
上一章聊到 TsFile 索引块的详细介绍,以及一个查询所经过的步骤.详情请见: 时序数据库 Apache-IoTDB 源码解析之文件索引块(五) 打一波广告,欢迎大家访问 IoTDB 仓库,求一波 Star .欢迎关注头条号:列炮缓开局,欢迎关注OSCHINA博客 阿里云.东方国信等各家公司正在招聘IoTDB数据库开发工程师,欢迎加我微信内推:liutaohua001 这一章主要想聊聊: 原有索引中的不足 新版本中索引的设计 原有索引中的不足 现在来张图回顾一下原有的数据存储方式,在文件尾部使…