随笔分类 - 学习记录-LevelDB
摘要:1. 背景 什么是跳表?跳表是SortedMap的一种具体实现,是一种概率性的数据结构。跳表拥有SortedMap的所有功能,定位和红黑树类似,其和红黑树的区别在于 优点: 跳表的实现更加简单 跳表在范围查询的时候效率是要高于红黑树 红黑树的插入和删除可能引发子树的调整,逻辑比较复杂,跳表只要维护相
阅读全文
摘要:1. 背景 编码指的是内存里的整数和字符串放到磁盘上的方式,其主要目的有两个 对不定长整数以及字符串能够在读取的时候感知到已经读取完了整个值 最大程度的节省在磁盘上占用的空间 2. 设计 2.1 整数 整数的种类上分为定长整数和不定长整数,而定长整数又分为32位整数和64位整数。 整数在存储方式上可
阅读全文
摘要:1. 背景 对于数据库来说,内存的分配非常重要,当我们使用C++默认的内存分配方式 malloc/free或者new/delete的时候,如果遇到很小的键值对时,每次调用的平均开销就会比较大,同时会产生很多内存碎片。 由于在MemTable中经常会遇到需要为较小键值对分配内存的原因,LevelDB在
阅读全文
摘要:1. 介绍 1.1 描述 LSM Tree(Log Structured merge Tree) 意思是日志结构合并树。目前广泛应用于一些流行的KV存储引擎中(LevelDBl、HBase、Bigtable等) LSM树并不是像红黑树,B树那样树严格的树状结构,而是一种存储结构 其中日志结构指的是用
阅读全文
摘要:1. 介绍 1.1 描述 SSTable(Sorted String Table)是一个通常放在磁盘上的,排序的字符串表, 用来高效存储大量的键值对数据, 同时搭配上优化实现IO操作的高吞吐量. 1.2 背景 当我们要运行一系列的Map-Reduce任务时,因为输入的数据量很大,所以消耗在IO的时间
阅读全文