什麼是B+樹?

B+樹特性

B+樹是爲磁盤或其他直接存取輔助設備而設計的一種M叉平衡查詢樹,其特性如下:

  1. 每個節點M個關鍵字和M棵子樹,每個關鍵字對應一個子樹。
  2. 除根節點外,其餘所有節點的關鍵字數在M/2(小數位進1)和M之間;根節點的關鍵字數在[1,M]之間。
  3. 所有的數據項,都是按照大小順序存放在同一層的葉子節點中,各葉子節點間用指針連接
  4. 所有非葉子節點,起到索引作用,可以看成是索引。非葉子節點中的每個索引項只含有對應子樹的最大關鍵字和指向子樹的指針,不含有該關鍵字對應記錄的存儲地址。

以3叉B+樹爲例,如圖:

  1. root節點[3,5,8],包含了3個關鍵字和3個子樹,每個關鍵字對應一個子樹。
  2. 見圖即可知root[3,5,8]節點個數爲3,葉子節點[1,2,3],[4,5],[6,7,8]關鍵字個數分別爲3,2,3。
  3. 葉子節點中,三個節點[1,2,3],[4,5],[6,7,8]有指針關聯,數據按照從小到大的順序排列,1,2,3,4,5,6,7,8。
  4. 如果該節點存儲是以數字id標識的用戶對象,在root節點中[3,5,8]數據存儲的是id關鍵字。在葉子節點,存儲的是包含數字id的用戶對象。

B+樹最大的好處在於,如下:

  • 隨機查找關鍵字

從root根節點開始查詢,在非葉子節點找到對應的關鍵字時,因爲非葉子節點起到索引作用,沒有該關鍵字對應記錄的存儲地址,還需要到達該關鍵字的葉子節點才能獲取對應的全部數據。

  • 從小到大遍歷數據

如果需要從最小關鍵進行從小到大的順序查詢,可以直接從最左側的葉子節點開始,不經過根節點和其他非葉子節點,而沿着下一個葉子節點指針可便利所有的數據。

B+樹節點分裂和節點領養

在執行添加或者刪除操作時,有可能會破環B+樹特性。通常,通過節點分裂和節點領養兩種方式可以繼續保證B+樹特性。節點分裂會擴展節點的空間,一個飽滿的節點分裂爲兩個節點;節點領養會節省節點空間,使被領養的節點更加飽滿。具體操作可以參考b樹節點分裂和節點領養

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章