葉子結點和分支節點 理論分析B 樹最優結點大小

2021-10-14 12:16:36 字數 2845 閱讀 3385

本文使用 zhihu on vscode 創作並發布

b+-樹是有序的,平衡的多叉樹型結構,是資料庫系統中最為通用的索引資料結構。在傳統的關係型磁碟資料庫中,索引結構儲存在磁碟上,磁碟按頁(page)訪問,且隨機訪問時有較高的尋道延時(disk seek latency)。b+樹的結點塊結構適應了磁碟按塊i/o的模式,從而能減少每次資料訪問的i/o代價;針對純記憶體資料庫,b+樹的結點塊結構同樣能適應記憶體和cpu快取記憶體按cacheline互動的模式,從而能相比二叉樹等結構更能充分利用記憶體頻寬,減少cache缺失數量,易於維護。綜合而言,b+樹的多叉結點結構能夠充分適應上世紀磁碟特性,也能一定程度適應現代硬體結構。

那麼,最優的b+樹結點大小,在磁碟上就是乙個磁碟頁嗎,在記憶體中就是乙個cacheline嗎?本文將從針對磁碟,記憶體中的b+樹結構,分析兩種場景下的結點最優大小。

分析採用了以下假設

分析使用到的符號

分析過程

(1)如果每個結點大小為b個頁,那麼每個結點會有

(2)當在n個待索引資料資料上建立索引時,b+樹樹高為

由(1),(2)可得從b+樹根節點搜尋到葉子結點,如果不考慮緩衝區命中,每次結點路徑遍歷的耗時為:

從函式關係可知

先減少後增大,對

進行求導,得到:

令上述導數為0,得到當

取 的唯一解時,b+樹的效能最優。由於

又和頁大小以及鍵值大小有關,

所以最優的磁碟b+樹結點大小和磁碟旋轉延時、傳輸速率

(傳輸頻寬)、頁大小和鍵值大小有關

。在不同的磁碟硬體下,儲存不同大小的鍵時,最優的結點大小均不同。

實際場景中,假設頁大小為4096b,單個鍵值大小為16b,一般b+樹滿載程度為0.69,參考[4],此時

約為176,因此粗略估算出

, 即. 如果磁碟旋轉延時為4ms,且傳輸頻寬為500mb/s,則可計算

,這表示結點大小取50個頁大小將使得效能較優。

記憶體中雖然也可將cacheline對等到磁碟頁,但是相比磁碟有以下兩點不同之處:

分析用到以下符號

由於記憶體b+樹存在兩種結點掃瞄策略:二分查詢和線性查詢策略。前人工作表明,使用小結點時 (結點大小 < 256b ),線性查詢策略能達到更高的效能[5]。但是出於完備性,此處我們都進行分析。

採用二分查詢策略:

(1)二分查詢單個結點時,二分搜尋共需要訪問

個cacheline才能將二分搜尋範圍縮小到單個cacheline,故乙個結點搜尋的時間代價約為

.(2)同樣,當再n個資料上建立b+樹索引時,樹高為

綜合(1),(2)可以得出單次操作的結點遍歷代價:

一般而言,

,故可知

單調遞增,

後遞增幅度較小,所以b取1時效能稍優。

但是從函式關係可以看出,當b較大之時,查詢效能減幅較慢,逼近二分搜尋

採用線性查詢策略:

線性搜尋乙個結點時,搜尋平均需要訪問

個cacheline。因此單次操作的結點遍歷代價為:

經過函式單調性分析,同樣發現該函式在[1,

)為遞增函式,且遞增幅度較慢。故同樣可以得出當每個結點採用乙個cacheline大小時最優。

綜合以上兩者,可以得出如下結論:如果忽略cpu代價,記憶體b+樹採用單個cacheline大小能夠達到最優的時間效能,但是記憶體b+樹的時間代價受結點大小影響較小

在實際場景中,我們發現大部分記憶體b+樹均採用256b (b取4) 或者512b (b取8) 作為常用結點大小,我認為主要有以下三點原因:

(1)每個結點需要額外的空間維護代價以及訪問時的固定cpu代價。

(2)現代處理器存在一定cache預取機制,它能夠隱藏訪問臨近cacheline的時間代價。

(3)單cacheline結點儘管訪問代價稍低,但是在插入負載容易頻繁觸發鍵值移動,結點**,容易造成額外代價。

歡迎交流指正,謝謝!

[1]. r. bayer and e. m. mccreight, 「organization and maintenance of large ordered indexes,」 sigfidet workshop, pp. 107–141, 1970.

[2]. j. gray and g. graefe, 「the five-minute rule ten years later, and other computer storage rules of thumb,」 special interest group on management of data record, vol. 26, no. 4, pp. 63–68, 1997.

[3]. latency numbers every programmer should know,

[4]. y. theodoridis, e. stefanakis, t. sellis, efficient cost models for spatial queries using r-trees. ieee tkde, 12(1), pp. 19-32, 2000

[5]. stx b+ tree revisiting binary search - panthema.net,

葉子結點和分支節點 樹的度和結點數的關係

一 概念 與圖論中的 度 不同,樹的度是如下定義的 有根樹t中,結點x的子女數目稱為x的度。也就是 在樹中,結點有幾個分叉,度就是幾。乙個有用的小公式 樹中結點數 總分叉數 1。這裡的分叉數就是所有結點的度之和 二 度的計算 1.設樹t的度為4,其中度為1,2,3,4的節點個數分別為4,2,1,1,...

葉子結點和分支節點 整數規劃 分支定界法

整數規劃的模型與線性規劃基本相同,只是額外的新增了部分變數為整數的約束。2.求解步驟 整數規劃求解的基本框架是分支定界法 branch and bound,bnb 首先去除整數約束得到 鬆弛模型 使用線性規劃的方法求解。若有某個變數不是整數,在鬆弛模型上分別新增約束 x floor a 和 x ce...

樹的度,度中結點的個數 葉子節點的個數關係

每條邊對應乙個節點,只有根節點沒有相應的邊。所以 節點個數 m 邊數 n 1 乙個度為4的節點對應有4條出邊,乙個度為3的節點對應有3條出邊,乙個度為2的節點對應有2條出邊,乙個度為1的節點對應有條出邊,葉子節點沒有出邊。所以 邊數 n 1 4 2 2 3 1 4 1 所有節點的度之和 15 根據 ...