對B樹/B+樹的理解

1. B樹/B+樹的應用場景

對於大規模數據,受計算機主存限制,通常無法一次性將全部數據加載進主存當中,只能分批加載. 目前,輔存(外部存儲)通常有兩種設備,固態硬盤與機械硬盤.其中固態硬盤與主存類似,可以實現數據的隨機存取,而機械硬盤無法實現數據的隨機存取,爲了獲取特定位置的數據,機械磁盤的磁頭需要先移動到起始位置,然後纔開始讀取數據.爲了提高機械硬盤讀取數據的效率,通常每一次讀取一個分頁大小的數據,來均攤掉磁頭移動所需時間.目前,大數據存儲中,機械硬盤仍是主要的存儲設施,因此需要設計合適的數據結構,能夠很好地應用於數據存儲在機械硬盤當中,且無法一次性全部加載進主存的場景.

由於機械硬盤的存儲速度相較於CPU處理速度而言,非常之慢,因此在大數據處理中,合理的數據結構應當能夠儘可能地減少磁盤IO次數.使得目標數據能夠已儘可能少的次數被讀進主存當中.而B樹/B+樹正是爲此而設計.

1.2 B樹結構

在這裏插入圖片描述

上圖爲一棵B樹的結構示意圖, B樹可以看作是二叉搜索樹的擴展,但其可以在每一個節點上擁有多個鍵值.一個包含M-1個鍵值的節點擁有M個指向子節點的鏈接,其中M個鏈接分別指向當前節點所屬區間的M個子區間. 通常使用階代表一棵B樹中節點最多包含的鏈接樹.上圖爲一棵3階B樹,每一個節點最多包含2個鍵值,3個鏈接.因此二叉搜索樹屬於2階B樹.

由於在機械硬盤的讀取中,每次讀取通常讀取一個分頁大小的數據,因此B樹的節點大小通常等於一個分頁大小.由此節點最多包含的子節點個數與分頁大小和鍵值長度相關. 通過在每一個節點處保存大量鍵值, B樹能夠以非常小的樹高保存大量節點. 對於1000階的B樹, 保存10億個節點時,其樹高僅爲2. 通常樹的根節點保存在主存中, 因此對於包含10億個鍵的大數據, 其每次最多進行兩次磁盤IO操作便能夠檢索到目標數據.

1.3 B+樹結構

在這裏插入圖片描述

對比B樹, 注意到在B+樹中有如下三個不同點:

  1. 每一個子節點都同時保存了其父節點的鍵.因此最底層的葉節點包含了所有的鍵. 因此M階B+樹中,每一節點最多包含M個鍵.
  2. 在非葉節點中, 不保存鍵所對應的值的引用.僅在葉節點中, 每一個鍵有其對應的值的引用.
  3. 葉節點使用指針依次相連, 構成一個有序鏈表. 這一構造主要是便於區間檢索.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章