1. 程式人生 > >資料結構之B-樹

資料結構之B-樹

作為檔案系統索引的常用資料結構,B-樹的查詢涉及硬碟和記憶體兩個部分,硬碟的讀寫將影響查詢的速度。傳統關係型資料庫如Mysql採用B-樹作為索引,新型記憶體資料庫levledb通過改進資料組織方式通過記憶體訪問使得存取速度得到大幅提升,本文通過對B-樹樓據結構的特點及查詢演算法整理,後續將更新leveldb的實現和查詢方式以對比兩種資料庫的設計思想。

B-樹是一種平衡的多路查詢樹地,它在檔案系統中很有用。在此介紹這種樹的結構及其查詢演算法。

一棵m階的B-樹,或為空樹,或為滿足下列特性的m叉樹:

(1) 樹中每個結點至多有m棵子樹;

(2) 若根結點不是葉子結點,則至少有兩棵子樹;

(3) 除根之外的所有非終端結點至少有⌈m/2⌉棵子樹;

(4) 所有非終端結點中包含下列資訊資料

                                                        (n, A0 ,K1 ,A1 ,K2 ,A2 ,...,Kn ,An)

其中:Ki (i=1,...,n)為關鍵字,且Ki

<Ki+1 (i=1,...,n-1);Ai (i=0,...,n)為指向子樹根結點的指標,且指標Ai-1 所指子樹中所有結點的關鍵字均小於Ki (i=1,...,n),An 所指子樹中所有結點的關鍵字均大於Kn ,n(⌈m/2⌉-1≤n≤m-1)為關鍵字的個數(或n+1為子樹個數)。

(5) 所有的葉子結點都出現在同一層次上,並且不帶資訊(可以看作是外部結點或查詢失敗的結點,實際上這些結點不存在,指向這些結點的指標為空)。