存储引擎-Buffered tree

Buffered-tree 也称为COLA,即cache-oblivious,能够不须要知道具体内存大小和一个块的大小,使用一套逻辑进行处理,所以内存大小可知,内存可能被临时占用去作其它事情。算法

Buffered-tree典型的实现是TokuDB,在里面被称为Fractal-tree性能

其算法的基本过程为:spa

  1. 假定有如上图所示的空数据集合。能够认为树的高度为logN,每行要么为空要不为满,具保持是有序的。
  2. 若是再写入一个值“3”,将会写入每一行。

  3. 若是再写入一个值“11”,由于第一行已经写满,因此将“3”取出,和“11”排序,尝试写入第二行。又由于第二行也定满了,因此将第二行取出,对“3”,“11”,“5”,“10”进行排序,写入第四行。结果以下图所示。指针

 

从上面操做过程可知,Buffered-treeLSM的思想相似,每次将数据从上一层取出,与外部数据进行归并后写入新的队列中。这对SAS磁盘很是友好,对磁盘的写入性能有很大的提高。排序

 

为了提升查询速度,在合并的时候,上层须要持有下层数据的指针。所以最后的结构以下图:队列

 

 

关于B-treeAppend-fileBuffered-tree三种读写方式的算法复杂度为:内存

 

 

举例说明损耗:io

对于100W 128字节。N = 2^30log(N) = 30class

磁盘中1MB数据块有8192个数据,B = 8192logB = 13file

 

 

结论:Buffered-treeIO的使用远远小于B树。

相关文章
相关标签/搜索