存儲引擎-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樹。

相關文章
相關標籤/搜索