亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

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

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

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


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