亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

數(shù)據(jù)庫索引的方法

文檔序號:6459369閱讀:236來源:國知局
專利名稱:數(shù)據(jù)庫索引的方法
技術(shù)領(lǐng)域
本發(fā)明數(shù)據(jù)庫索引技術(shù)領(lǐng)域,涉及一種數(shù)據(jù)庫索引方法,尤其涉及一種利用B+樹的數(shù)據(jù) 庫索引方法。
背景技術(shù)
B樹由R. Bayer和E. McCreight在1972年提出,可以看作是"二叉搜索樹"在外存中 多路擴展的一般形式,它被設(shè)計用來管理和維護大規(guī)模數(shù)據(jù)的索引,具有隨機查詢效率高、 更新開銷小和自平衡等特點。B+樹在B樹的基礎(chǔ)上,進一步規(guī)定所有的"鍵值"只能出現(xiàn)在 葉子節(jié)點中,并用鏈表的方式把所有葉子節(jié)點串連在一起,提高了順序查詢的效率。
研究B+樹的算法時,為了簡化一般都假設(shè)不存在鍵值重復(fù)的情況。現(xiàn)有處理處理重復(fù)鍵 值的方法主要是采用"溢出頁",即當某個鍵值對應(yīng)的記錄數(shù)大于1時,分配一個"溢出頁" 用來存放所有的重復(fù)鍵值和其對應(yīng)記錄的偏移量。
這個方法盡管簡單,但不可避免的浪費了溢出頁中空閑的空間,尤其是當鍵值所占空間 相對于溢出頁容量較小時,空間浪費的程度加劇,整個索引文件對磁盤的需求量隨之明顯增 加。

發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題是提供一種利用B+樹的數(shù)據(jù)庫索引方法。 為解決上述技術(shù)問題,本發(fā)明采用如下技術(shù)方案 一種數(shù)據(jù)庫索引的方法,其特征在于,該方法包括如下步驟 步驟A、根據(jù)索引數(shù)據(jù)庫建立一B+樹;
步驟B、定義步驟A中的B+樹的數(shù)據(jù)結(jié)構(gòu),將重復(fù)的鍵值存儲于B+樹的葉節(jié)點中; .步驟C、執(zhí)行索引操作,包括査詢操作、插入操作、刪除操作。 作為本發(fā)明的一種優(yōu)選方案,所述步驟B包括 步驟B1、重新定義B+樹非葉節(jié)點的索引鍵值;
步驟B2、在每個非葉節(jié)點中新增一個索引鍵值。
作為本發(fā)明的一種優(yōu)選方案,所述步驟B1中,將B+樹非葉節(jié)點中的第i個索引鍵值定義 為以該非葉節(jié)點的第i+l個子節(jié)點為根的子樹中,第一次出現(xiàn)的新鍵值;若新鍵值不存在,即該子樹中包含的所有鍵值均相同,且已經(jīng)出現(xiàn)在之前的子樹中,則將該索引鍵值定義為 "空"。
作為本發(fā)明的一種優(yōu)選方案,所述步驟B2中,該新增的索引鍵值表示以某個非葉節(jié)點第 0個子節(jié)點為根的子樹中,第一次出現(xiàn)的新鍵值。
作為本發(fā)明的一種優(yōu)選方案,所述査詢操作中,在非葉節(jié)點中,確定下一步應(yīng)該遍歷的 個子節(jié)點時,增加了對可能出現(xiàn)的"空"索引鍵值的處理。
作為本發(fā)明的一種優(yōu)選方案,所述插入操作中,每次將新鍵值插入到相應(yīng)的葉節(jié)點后,
從該葉節(jié)點向上遞歸更新父節(jié)點的的索引鍵值,直至根節(jié)點。
作為本發(fā)明的一種優(yōu)選方案,所述插入操作包括分裂過程,將一個節(jié)點分裂成兩個節(jié)點 后,在父節(jié)點中更新本節(jié)點索引鍵值并且增加對應(yīng)新節(jié)點的索引鍵值,并可能需要遞歸向上 更新,直至根節(jié)點。
作為本發(fā)明的一種優(yōu)選方案,所述刪除操作中,每次在某個葉節(jié)點中刪除一個鍵值后, 從該葉節(jié)點向上遞歸更新父節(jié)點的的索引鍵值,直至根節(jié)點。作為本發(fā)明的一種優(yōu)選方案,所述刪除操作包括合并過程,合并兩個節(jié)點后,需要在父
節(jié)點中更新本節(jié)點索引鍵值并且刪除被合并節(jié)點的索引鍵值,并可能需要遞歸向上更新,直 至根節(jié)點。
本發(fā)明的有益效果在于本發(fā)明的利用B+樹的數(shù)據(jù)庫索引方法,由于將重復(fù)出現(xiàn)的鍵值 直接存儲在B+樹的葉節(jié)點中,避免了使用溢出節(jié)點,所以當溢出節(jié)點相對于鍵值較大時,而 數(shù)據(jù)表中又存在一定量的重復(fù)鍵值的情況下,本發(fā)明能夠有效地避免空間的浪費,從而減少 索引文件的大小,同時也拓寬了B+樹的適用范圍。由此優(yōu)化了數(shù)據(jù)庫索引方案。


圖1為本發(fā)明數(shù)據(jù)庫索引方法的流程圖。 圖2為本發(fā)明定義的B+樹結(jié)構(gòu)圖。
圖3-1、圖3-2分別為實施例中B+樹分裂過程前后的結(jié)構(gòu)示意圖。 圖4為實施例中B+樹刪除操作的結(jié)構(gòu)示意圖。
具體實施方式
下面結(jié)合附圖詳細說明本發(fā)明的優(yōu)選實施例。
請參閱圖l,本發(fā)明揭示了一種數(shù)據(jù)庫索引的方法,其特征在于,該方法包括如下步驟-步驟A、根據(jù)索引數(shù)據(jù)庫建立一B+樹;
步驟B、定義步驟A中的B+樹的數(shù)據(jù)結(jié)構(gòu),將重復(fù)的鍵值存儲于B+樹的葉節(jié)點中;包括 步驟B1、重新定義B+樹非葉節(jié)點的索引鍵值;將B+樹非葉節(jié)點中的第i個索引鍵值定義
為以該非葉節(jié)點的第i+l個子節(jié)點為根的子樹中,第一次出現(xiàn)的新鍵值;若新鍵值不存在,
即該子樹中包含的所有鍵值均相同,且已經(jīng)出現(xiàn)在之前的子樹中,則將該索引鍵值定義為 "空"。
步驟B2、在每個非葉節(jié)點中新增一個索引鍵值。該新增的索引鍵值表示以某個非葉節(jié)點 第0個子節(jié)點為根的子樹中,第一次出現(xiàn)的新鍵值。
步驟C、執(zhí)行索引操作,包括査詢操作、插入操作、刪除操作。
所述査詢操作中,在非葉節(jié)點中,確定下一步應(yīng)該遍歷的個子節(jié)點時,增加了對可能出 現(xiàn)的"空"索引鍵值的處理。
所述插入操作中,每次將新鍵值插入到相應(yīng)的葉節(jié)點后,從該葉節(jié)點向上遞歸更新父節(jié) 點的的索引鍵值,直至根節(jié)點。所述插入操作包括分裂過程,將一個節(jié)點分裂成兩個節(jié)點后, 在父節(jié)點中更新本節(jié)點索引鍵值并且增加對應(yīng)新節(jié)點的索引鍵值,并可能需要遞歸向上更新, 直至根節(jié)點。
所述刪除操作中,每次在某個葉節(jié)點中刪除一個鍵值后,從該葉節(jié)點向上遞歸更新父節(jié) 點的的索引鍵值,直至根節(jié)點。所述刪除操作包括合并過程,合并兩個節(jié)點后,需要在父節(jié) 點中更新本節(jié)點索引鍵值并且刪除被合并節(jié)點的索引鍵值,并可能需要遞歸向上更新,直至 根節(jié)點。
請參閱圖2,其中揭示本發(fā)明中重新定義B+樹結(jié)構(gòu)的一棵樹的實例。因為6號葉子節(jié)點 中的所有鍵值9已經(jīng)在之前的節(jié)點出現(xiàn)過,故第一次出現(xiàn)的新鍵值不存在,所以用"#"表示 該索引值為"空"。另外,圖中用下劃線標注的數(shù)字表示每個非葉節(jié)點的額外索引鍵值,例如, 因為第8號葉子節(jié)點中第一次出現(xiàn)的新鍵值為25,而它又是3號節(jié)點的第0個兒子節(jié)點,所 以3號節(jié)點的額外索引鍵值為25。
本發(fā)明中B+樹的插入算法總是從根節(jié)點開始,通過比較索引鍵值和待插入鍵值的大小來 確定下一步應(yīng)該遍歷哪一個子節(jié)點,直至找到合適的葉節(jié)點來容納待插入鍵值。在遞歸向下 遍歷的過程中,如果節(jié)點已滿,即節(jié)點的(索引)鍵值數(shù)等于節(jié)點允許的最大值時,提前對其進行分裂操作,這樣可以保證當下層節(jié)點進行分裂操作需要向上層父節(jié)點中添加一個新的 索引鍵值時,父節(jié)點總是未滿,即節(jié)點的索引鍵值數(shù)小于最大允許的鍵值數(shù)。此外,每當發(fā) 生分裂操作和插入新鍵值后,都可能需要沿著查詢路經(jīng)遞歸向上更新父節(jié)點中的索引鍵值, 以保證B+樹數(shù)據(jù)結(jié)構(gòu)的完整性。
圖3-1、圖3-2揭示一個在圖2所示的B+樹中插入鍵值29后,引起的第9號葉子節(jié)點的 分裂和第3號節(jié)點索引值更新的例子。如圖所示,待插入鍵值為29,從根節(jié)點遞歸向下最終 找到合適的第9號葉節(jié)點以容納新鍵值。此時由于第9號葉節(jié)點己滿,需要將其分裂成本節(jié) 葉節(jié)點和第10號新葉節(jié)點,然后在第10號葉節(jié)點中插入鍵值29。由于原先第9號節(jié)點中第 一次出現(xiàn)的鍵值30現(xiàn)在由于分裂操作被移動到第10號節(jié)點中,所以應(yīng)該將其父節(jié)點,即第3 號節(jié)點中相應(yīng)的索引鍵值從30更新為"空",用"#"表示;同時,在父節(jié)點中還應(yīng)該添加一 個索引鍵值以表示新增葉節(jié)點中第一次出現(xiàn)的新鍵值,本例中為新插入鍵值29。
本發(fā)明的B+樹刪除算法類似插入算法,通過比較索引鍵值和待刪除鍵值在大小來確定下 一步應(yīng)該遍歷哪一個子節(jié)點,直至找到包含待刪除鍵值的葉節(jié)點。在遞歸向下的遍歷的過程 中,如果節(jié)點的索引鍵值數(shù)已經(jīng)等于規(guī)定的最小值時,提前將其與鄰居節(jié)點合并(merge)或 是從鄰居節(jié)點中借出(borrow)索引值。這樣可以保證當下層節(jié)點進行合并操作需要從上層父 節(jié)點中刪除一個索引鍵值時,父節(jié)點中的索引鍵值總是足夠多,即節(jié)點的索引鍵值數(shù)大于規(guī) 定的最小鍵值數(shù)。由于將重復(fù)的鍵值直接存儲在B+樹的葉節(jié)點中,遍歷到的葉節(jié)點的左側(cè)可 能不是第一個包含待刪除鍵值的節(jié)點,所以應(yīng)該向左査找到第一個包含待刪除鍵值的葉節(jié)點, 同時應(yīng)該對新查詢路經(jīng)上的節(jié)點重新進行"合并"或是"借出"的操作。此外,由于我們改 變了B+樹中索引值的定義,所以"合并"、"借出"和"刪除"操作不只影響到待操作節(jié)點與 其父節(jié)點兩個節(jié)點中的索引值,為了保持整個B+樹索引結(jié)構(gòu)的完整性,父節(jié)點中索引值的變 化可能需要更新查詢路經(jīng)向上每個節(jié)點的索引值。
如圖4所示,為了刪除鍵值21,從根節(jié)點開始遞歸向下找到一個包含鍵值21的節(jié)點eaf, 此時向左查找到第一個包含鍵值21的葉節(jié)點leftMostLeaf,它們的共同父節(jié)點為 commonParent。從圖中可以看出,從共同父節(jié)點commonParent到leaf節(jié)點的路經(jīng)上已經(jīng)進行 了 "合并"或是"借出"的操作,而在commonParent節(jié)點到leftMostLeaf節(jié)點的路經(jīng)上還沒 有,,所以應(yīng)該在此路經(jīng)上重新按需要進行"合并"或是"借出"的操作。其中,左邊路經(jīng)上 的節(jié)點還未進行過MERGE或BORROW操作;右邊路徑上的節(jié)點已經(jīng)進行過MERGE或 BORROW操作。綜上,本發(fā)明的利用B+樹的數(shù)據(jù)庫索引方法,由于將重復(fù)出現(xiàn)的鍵值直接存儲在B+樹的 葉節(jié)點中,避免了使用溢出節(jié)點,所以當溢出節(jié)點相對于鍵值較大時,而數(shù)據(jù)表中又存在一 定量的重復(fù)鍵值的情況下,本發(fā)明能夠有效地避免空間的浪費,從而減少索引文件的大小, 同時也拓寬了B+樹的適用范圍。由此優(yōu)化了數(shù)據(jù)庫索引方案。
以上實施例僅用以說明而非限制本發(fā)明的技術(shù)方案。不脫離本發(fā)明精神和范圍的任何修 改或局部替換,均應(yīng)涵蓋在本發(fā)明的權(quán)利要求范圍當中。
權(quán)利要求
1. 一種數(shù)據(jù)庫索引的方法,其特征在于,該方法包括如下步驟步驟A、根據(jù)索引數(shù)據(jù)庫建立一B+樹;步驟B、定義步驟A中的B+樹的數(shù)據(jù)結(jié)構(gòu),將重復(fù)的鍵值存儲于B+樹的葉節(jié)點中;步驟C、執(zhí)行索引操作,包括查詢操作、插入操作、刪除操作。
2、 根據(jù)權(quán)利要求l所述的數(shù)據(jù)庫索引的方法,其特征在于所述步驟B包括步驟B1、重新定義B+樹非葉節(jié)點的索引鍵值;步驟B2、在每個非葉節(jié)點中新增一個索引鍵值。
3、 根據(jù)權(quán)利要求2所述的數(shù)據(jù)庫索引的方法,其特征在于所述步驟B1中,將B+樹非葉節(jié)點中的第i個索引鍵值定義為以該非葉節(jié)點的第i + l個子節(jié)點為根的子樹中, 第一次出現(xiàn)的新鍵值;若新鍵值不存在,即該子樹中包含的所有鍵值均相同,且已經(jīng)出現(xiàn)在之前的子樹中,則將該索引鍵值定義為"空"。
4、 根據(jù)權(quán)利要求2所述的數(shù)據(jù)庫索引的方法,其特征在于所述步驟B2中,該新增的 索引鍵值表示以某個非葉節(jié)點第O個子節(jié)點為根的子樹中,第一次出現(xiàn)的新鍵值。
5、 根據(jù)權(quán)利要求1或2或3或4所述的數(shù)據(jù)庫索引的方法,其特征在于所述査詢操作 中,在非葉節(jié)點中,確定下一步應(yīng)該遍歷的個子節(jié)點時,增加了對可能出現(xiàn)的"空" 索引鍵值的處理。
6、 根據(jù)權(quán)利要求1或2或3或4所述的數(shù)據(jù)庫索引的方法,其特征在于所述插入操作 中,每次將新鍵值插入到相應(yīng)的葉節(jié)點后,從該葉節(jié)點向上遞歸更新父節(jié)點的的索引 鍵值,直至根節(jié)點。
7、 根據(jù)權(quán)利要求1或2或3或4所述的數(shù)據(jù)庫索引的方法,其特征在于所述插入操作 包括分裂過程,將一個節(jié)點分裂成兩個節(jié)點后,在父節(jié)點中更新本節(jié)點索引鍵值并且 增加對應(yīng)新節(jié)點的索引鍵值,并可能需要遞歸向上更新,直至根節(jié)點。
8、 根據(jù)權(quán)利要求1或2或3或4所述的數(shù)據(jù)庫索引的方法,其特征在于所述刪除操作 中,每次在某個葉節(jié)點中刪除一個鍵值后,從該葉節(jié)點向上遞歸更新父節(jié)點的的索引 鍵值,直至根節(jié)點。
9、 根據(jù)權(quán)利要求1或2或3或4所述的數(shù)據(jù)庫索引的方法,其特征在于所述刪除操作 包括合并過程,合并兩個節(jié)點后,需要在父節(jié)點中更新本節(jié)點索引鍵值并且刪除被合 并節(jié)點的索引鍵值,并可能需要遞歸向上更新,直至根節(jié)點。
全文摘要
本發(fā)明揭示了一種數(shù)據(jù)庫索引的方法,該方法包括如下步驟步驟A、根據(jù)索引數(shù)據(jù)庫建立一B+樹;步驟B、定義步驟A中的B+樹的數(shù)據(jù)結(jié)構(gòu),將重復(fù)的鍵值存儲于B+樹的葉節(jié)點中;步驟C、執(zhí)行索引操作,包括查詢操作、插入操作、刪除操作。本發(fā)明的利用B+樹的數(shù)據(jù)庫索引方法,由于將重復(fù)出現(xiàn)的鍵值直接存儲在B+樹的葉節(jié)點中,避免了使用溢出節(jié)點,所以當溢出節(jié)點相對于鍵值較大時,而數(shù)據(jù)表中又存在一定量的重復(fù)鍵值的情況下,本發(fā)明能夠有效地避免空間的浪費,從而減少索引文件的大小,同時也拓寬了B+樹的適用范圍。由此優(yōu)化了數(shù)據(jù)庫索引方案。
文檔編號G06F17/30GK101286160SQ200810038369
公開日2008年10月15日 申請日期2008年5月30日 優(yōu)先權(quán)日2008年5月30日
發(fā)明者徐逸文, 鈺 方, 曾國蓀, 苗奪謙, 蔣昌俊, 閆春鋼, 陳閎中 申請人:同濟大學
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1