Java實現的插入法建立B+樹
阿新 • • 發佈:2018-12-25
我所實現的B+樹是有關於《資料庫系統實現》上的B+書演算法的實現。利用插入法,我構建出了一個以long型資料作為鍵值,以Object型資料為指標的B+索引樹。
有關我的程式的說明:
(1)元組數量的取值範圍的含義是:本程式中我要生成“要建立元組數”那麼多個元組(這裡我用Student類代替)並寫入檔案。每個元組的鍵值是一個隨機長整數(不重複),數量的取值範圍其實是指“隨機生成的鍵值的最大值”
(2)要建立的元組數顧名思義,也指代B+樹的葉節點的數量(因為每個葉都存放一個指向元組的檔案指標)[說明:因為我用RandomAccessFile來儲存元組,所以元組的檔案指標實際上是一個Long型的數字]
(3)每個節點能容納的鍵數量--不懂得看看B+樹的定義
(4)桶的數量:引入桶的目的是因為可能要生成很多個不重複的鍵值,要解決不重複的問題,傳統的比較方法時間消耗非常大(O(N)的),引入適量的桶可以加快查詢比較的時間。我使用HashSet作為桶,以實現快速建立多個不重複的鍵值。(當然,要是生成鍵值少的話就不需要很多桶了--關於桶的概念請查閱向關資料)
(5)文字框中的值是我測試使用的初始值,當你點“復位”的時候,將顯示我們老師要求的數值
(6)“要查詢的鍵值”指,你輸入一個鍵值,程式將在書中尋找,並在文字框中給出查詢路徑(打印出所經過的節點的內容),最後給出你所輸入的鍵值在不在者棵樹中。
(7)程式在使用時一定要使用我給的bat檔案開啟,因為這樣可以開啟控制檯(命令列),因為生成後的樹中的鍵值資訊和樹的層次資訊將在命令列顯示。
有關的B+樹插入知識:
插入原則上是第歸的:(1)設法在適當的葉節點中為新建找到空閒空間,如果有的話,就把鍵值放在哪裡,(2)如果在適當的葉節點中沒有空間,就把該葉節點分裂成兩個,並且把其中的鍵分到這兩個新節點中,使每個新節點有一半或剛好超過一半的鍵。(3)某一層的節點分裂在其上一層看來相當於是要在這一較高的層次上插入一個新的鍵-指標對。因此,我們可以在這一較高層次上第歸測試用這個插入策略:如果有空間,就插入;反之則分裂這個入節點且繼續相熟的高層推進。(4)例外的情況是,如果試圖插入鍵到跟節點中並且跟節點沒有空間,就分裂跟節點成兩個節點,在更上一層建立一個新的跟節點。這個新的跟節點有兩個剛分裂成的節點作為他的子節點。
友情提示:我的所有程式碼由JB9生成,壓縮包中將附工程檔案。由於最近在看《重構》,所以程式碼中有些風格是從裡面學的,但是目前還學藝不精,有點不倫不類,請見諒。我的全部程式碼放在我的郵箱,要用的到那裡去下載,各位抱歉,不會上傳圖片,大家下載到程式之後就可以看到了:〉
[email protected] 密碼是012401030
如果程式有BUG,或者看官有什麼好的建議,歡迎回復,或發郵件到我的郵箱,我會很樂意與你討論的。
有關我的程式的說明:
(1)元組數量的取值範圍的含義是:本程式中我要生成“要建立元組數”那麼多個元組(這裡我用Student類代替)並寫入檔案。每個元組的鍵值是一個隨機長整數(不重複),數量的取值範圍其實是指“隨機生成的鍵值的最大值”
(2)要建立的元組數顧名思義,也指代B+樹的葉節點的數量(因為每個葉都存放一個指向元組的檔案指標)[說明:因為我用RandomAccessFile來儲存元組,所以元組的檔案指標實際上是一個Long型的數字]
(3)每個節點能容納的鍵數量--不懂得看看B+樹的定義
(4)桶的數量:引入桶的目的是因為可能要生成很多個不重複的鍵值,要解決不重複的問題,傳統的比較方法時間消耗非常大(O(N)的),引入適量的桶可以加快查詢比較的時間。我使用HashSet作為桶,以實現快速建立多個不重複的鍵值。(當然,要是生成鍵值少的話就不需要很多桶了--關於桶的概念請查閱向關資料)
(5)文字框中的值是我測試使用的初始值,當你點“復位”的時候,將顯示我們老師要求的數值
(6)“要查詢的鍵值”指,你輸入一個鍵值,程式將在書中尋找,並在文字框中給出查詢路徑(打印出所經過的節點的內容),最後給出你所輸入的鍵值在不在者棵樹中。
(7)程式在使用時一定要使用我給的bat檔案開啟,因為這樣可以開啟控制檯(命令列),因為生成後的樹中的鍵值資訊和樹的層次資訊將在命令列顯示。
有關的B+樹插入知識:
插入原則上是第歸的:(1)設法在適當的葉節點中為新建找到空閒空間,如果有的話,就把鍵值放在哪裡,(2)如果在適當的葉節點中沒有空間,就把該葉節點分裂成兩個,並且把其中的鍵分到這兩個新節點中,使每個新節點有一半或剛好超過一半的鍵。(3)某一層的節點分裂在其上一層看來相當於是要在這一較高的層次上插入一個新的鍵-指標對。因此,我們可以在這一較高層次上第歸測試用這個插入策略:如果有空間,就插入;反之則分裂這個入節點且繼續相熟的高層推進。(4)例外的情況是,如果試圖插入鍵到跟節點中並且跟節點沒有空間,就分裂跟節點成兩個節點,在更上一層建立一個新的跟節點。這個新的跟節點有兩個剛分裂成的節點作為他的子節點。
友情提示:我的所有程式碼由JB9生成,壓縮包中將附工程檔案。由於最近在看《重構》,所以程式碼中有些風格是從裡面學的,但是目前還學藝不精,有點不倫不類,請見諒。我的全部程式碼放在我的郵箱,要用的到那裡去下載,各位抱歉,不會上傳圖片,大家下載到程式之後就可以看到了:〉
如果程式有BUG,或者看官有什麼好的建議,歡迎回復,或發郵件到我的郵箱,我會很樂意與你討論的。