麻豆精品无码国产在线播放,国产亚洲精品成人AA片新蒲金,国模无码大尺度一区二区三区,神马免费午夜福利剧场

一種實(shí)時(shí)數(shù)據(jù)庫(kù)的b+樹索引方法及裝置的制作方法

文檔序號(hào):6438775閱讀:234來源:國(guó)知局
專利名稱:一種實(shí)時(shí)數(shù)據(jù)庫(kù)的b+樹索引方法及裝置的制作方法
技術(shù)領(lǐng)域
本發(fā)明屬于數(shù)據(jù)處理領(lǐng)域,尤其涉及一種實(shí)時(shí)數(shù)據(jù)庫(kù)的B+樹索引方法及裝置。
背景技術(shù)
隨著現(xiàn)今數(shù)據(jù)量的不斷擴(kuò)充,數(shù)據(jù)庫(kù)中的數(shù)據(jù)不斷增多,在應(yīng)用時(shí)要求數(shù)據(jù)庫(kù)具有主動(dòng)、實(shí)時(shí)、時(shí)效等特性。其中,索引是提高數(shù)據(jù)庫(kù)系統(tǒng)執(zhí)行效率的一種有效工具。由于實(shí)時(shí)數(shù)據(jù)庫(kù)的索引受內(nèi)存的快速存取以及高有效利用率的影響,因此適用于實(shí)時(shí)數(shù)據(jù)庫(kù)的索引結(jié)構(gòu)大致可以分為兩大類一類是數(shù)據(jù)保持某種自然排序的索引結(jié)構(gòu),如各種數(shù)據(jù)結(jié)構(gòu); 另一類是數(shù)據(jù)隨機(jī)分布的索引結(jié)構(gòu),如各種哈希結(jié)構(gòu)。傳統(tǒng)索引結(jié)構(gòu)主要有下列三種,以下將詳細(xì)描述。第一,采用數(shù)組做索引結(jié)構(gòu)。其具體方法為通過預(yù)先知道數(shù)據(jù)的大小或者通過虛擬存儲(chǔ)映射技術(shù)而使數(shù)據(jù)妥當(dāng)增長(zhǎng),使數(shù)組索引使用的空間最小。然而,數(shù)組索引結(jié)構(gòu)不能動(dòng)態(tài)維護(hù),每一維護(hù)操作所引起的數(shù)據(jù)移動(dòng)量是O(n)級(jí)的(η為數(shù)組元素個(gè)數(shù)),使得維護(hù)代價(jià)過高。且數(shù)組索引結(jié)構(gòu)實(shí)用性不強(qiáng)。第二,采用AVL樹(一種自平衡二叉查找樹)做索引結(jié)構(gòu)。由于AVL樹操作的時(shí)間復(fù)雜度較小,為0(Log2N) (N為記錄數(shù)),因此具有較高的存取性能。但是由于其每個(gè)結(jié)點(diǎn)只有一個(gè)數(shù)據(jù)元素,卻有兩個(gè)指針和有關(guān)指針信息,造成其內(nèi)存的有效利用率很低。第三,采用B樹(一種數(shù)據(jù)結(jié)構(gòu))做索引結(jié)構(gòu)。B樹是一種動(dòng)態(tài)調(diào)節(jié)的平衡樹,B樹的操作代價(jià)是o( Logk + l + l-^- +C),其中,
k是B樹的階(0rder),N是記錄數(shù),C是一個(gè)很小的整數(shù)。然而,將B樹作為索引結(jié)構(gòu)時(shí),由于關(guān)鍵字分布在整個(gè)B樹中,并且在內(nèi)結(jié)點(diǎn)(葉結(jié)點(diǎn)以外的結(jié)點(diǎn))中出現(xiàn)過的關(guān)鍵字不再出現(xiàn)在葉結(jié)點(diǎn)中,使得順序鏈不能將樹中所有關(guān)鍵字鏈接在一起,這不利于需要順序查找或排序的操作。其次,在B樹中,刪除操作比較繁瑣。因此,B樹無法滿足實(shí)時(shí)數(shù)據(jù)庫(kù)高效的執(zhí)行效率。

發(fā)明內(nèi)容
本發(fā)明實(shí)施例的目的在于提供一種實(shí)時(shí)數(shù)據(jù)庫(kù)的B+樹索引方法及裝置,旨在解決現(xiàn)有的用于實(shí)時(shí)數(shù)據(jù)庫(kù)的索引結(jié)構(gòu)效率不高,實(shí)用性不強(qiáng)的問題。本發(fā)明實(shí)施例是這樣實(shí)現(xiàn)的,一種實(shí)時(shí)數(shù)據(jù)庫(kù)的B+樹索引方法,所述方法包括根據(jù)實(shí)時(shí)數(shù)據(jù)庫(kù)中表或記錄的個(gè)數(shù),獲得節(jié)點(diǎn)個(gè)數(shù),所述節(jié)點(diǎn)包括節(jié)點(diǎn)域和控制域;根據(jù)每個(gè)節(jié)點(diǎn)所需占用的內(nèi)存空間,劃分對(duì)應(yīng)的內(nèi)存空間用于存儲(chǔ)每個(gè)節(jié)點(diǎn)的節(jié)點(diǎn)域和控制域;
將表或記錄的關(guān)鍵字存儲(chǔ)至節(jié)點(diǎn)的節(jié)點(diǎn)域,將指針信息存儲(chǔ)至節(jié)點(diǎn)的控制域,以此生成各節(jié)點(diǎn)及B+樹索引。本發(fā)明實(shí)施例的另一目的在于提供了一種實(shí)時(shí)數(shù)據(jù)庫(kù)的B+樹索引裝置,所述裝置包括節(jié)點(diǎn)個(gè)數(shù)獲取單元,用于根據(jù)實(shí)時(shí)數(shù)據(jù)庫(kù)中表或記錄的個(gè)數(shù),獲得節(jié)點(diǎn)個(gè)數(shù),所述節(jié)點(diǎn)包括節(jié)點(diǎn)域和控制域;內(nèi)存劃分單元,用于根據(jù)每個(gè)節(jié)點(diǎn)所需占用的內(nèi)存空間,劃分對(duì)應(yīng)的內(nèi)存空間用于存儲(chǔ)每個(gè)節(jié)點(diǎn)的節(jié)點(diǎn)域和控制域;索引生成單元,用于將表或記錄的關(guān)鍵字存儲(chǔ)至節(jié)點(diǎn)的節(jié)點(diǎn)域,將指針信息存儲(chǔ)至節(jié)點(diǎn)的控制域,以此生成各節(jié)點(diǎn)及B+樹索引。在本發(fā)明實(shí)施例中,通過B+樹來實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)庫(kù)的索引,提供了一種既高效,又穩(wěn)定的索引方法。既提高了實(shí)時(shí)數(shù)據(jù)庫(kù)的穩(wěn)定性,又提高了實(shí)時(shí)數(shù)據(jù)庫(kù)的性能,使得用戶能夠更加快捷地訪問實(shí)時(shí)數(shù)據(jù)庫(kù)。


圖1是本發(fā)明實(shí)施例一提供的實(shí)時(shí)數(shù)據(jù)庫(kù)的B+樹索引方法流程圖;圖2是本發(fā)明實(shí)施例二提供的根據(jù)B+樹索引查找關(guān)鍵字的實(shí)例;圖3是本發(fā)明實(shí)施例三提供的根據(jù)B+樹索引插入關(guān)鍵字的一種實(shí)例;圖4是本發(fā)明實(shí)施例三提供的根據(jù)B+樹索引插入關(guān)鍵字的一種實(shí)例;圖5是本發(fā)明實(shí)施例四提供的根據(jù)B+樹索引刪除關(guān)鍵字的一種實(shí)例;圖6是本發(fā)明實(shí)施例四提供的根據(jù)B+樹索引刪除關(guān)鍵字的一種實(shí)例;圖7是本發(fā)明實(shí)施例五提供的實(shí)時(shí)數(shù)據(jù)庫(kù)的B+樹索引裝置結(jié)構(gòu)示意圖。
具體實(shí)施例方式為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。本發(fā)明實(shí)施例提供一種實(shí)時(shí)數(shù)據(jù)庫(kù)的B+樹(一種數(shù)據(jù)結(jié)構(gòu))索引方法,通過重新定義B+樹的節(jié)點(diǎn)域及控制域的數(shù)據(jù)結(jié)構(gòu)后,創(chuàng)建B+樹,利用B+樹建立實(shí)時(shí)數(shù)據(jù)庫(kù)的索引。本發(fā)明提供了一種實(shí)時(shí)數(shù)據(jù)庫(kù)的B+樹索引方法及裝置所述方法包括根據(jù)實(shí)時(shí)數(shù)據(jù)庫(kù)中表或記錄的個(gè)數(shù),獲得節(jié)點(diǎn)個(gè)數(shù),所述節(jié)點(diǎn)包括節(jié)點(diǎn)域和控制域;根據(jù)每個(gè)節(jié)點(diǎn)所需占用的內(nèi)存空間,劃分對(duì)應(yīng)的內(nèi)存空間用于存儲(chǔ)每個(gè)節(jié)點(diǎn)的節(jié)點(diǎn)域和控制域;將表或記錄的關(guān)鍵字存儲(chǔ)至節(jié)點(diǎn)的節(jié)點(diǎn)域,將指針信息存儲(chǔ)至節(jié)點(diǎn)的控制域,以此生成各節(jié)點(diǎn)及B+樹索引。所述裝置包括節(jié)點(diǎn)個(gè)數(shù)獲取單元,用于根據(jù)實(shí)時(shí)數(shù)據(jù)庫(kù)中表或記錄的個(gè)數(shù),獲得節(jié)點(diǎn)個(gè)數(shù),所述節(jié)點(diǎn)包括節(jié)點(diǎn)域和控制域;內(nèi)存劃分單元,用于根據(jù)每個(gè)節(jié)點(diǎn)所需占用的內(nèi)存空間,劃分對(duì)應(yīng)的內(nèi)存空間用于存儲(chǔ)每個(gè)節(jié)點(diǎn)的節(jié)點(diǎn)域和控制域;索引生成單元,用于將表或記錄的關(guān)鍵字存儲(chǔ)至節(jié)點(diǎn)的節(jié)點(diǎn)域,將指針信息存儲(chǔ)至節(jié)點(diǎn)的控制域,以此生成各節(jié)點(diǎn)及B+樹索引。為了說明本發(fā)明所述的技術(shù)方案,下面通過具體實(shí)施例來進(jìn)行說明。實(shí)施例一如圖1所示為本發(fā)明提供的實(shí)時(shí)數(shù)據(jù)庫(kù)的B+樹索引方法的流程圖,為了便于說明,僅示出了與本發(fā)明實(shí)施例相關(guān)的部分。在步驟SlOl中,根據(jù)實(shí)時(shí)數(shù)據(jù)庫(kù)中表或記錄的個(gè)數(shù),獲得節(jié)點(diǎn)個(gè)數(shù),所述節(jié)點(diǎn)包括節(jié)點(diǎn)域和控制域。在本發(fā)明實(shí)施例中,由于索引既可以是實(shí)時(shí)數(shù)據(jù)庫(kù)中表的索引,也可以是實(shí)時(shí)數(shù)據(jù)庫(kù)中各條記錄的索引。在B+樹中,用一個(gè)節(jié)點(diǎn)來表示一個(gè)表或一條數(shù)據(jù)庫(kù)中的記錄,因此表的個(gè)數(shù)或記錄的條數(shù)與節(jié)點(diǎn)個(gè)數(shù)相同。若是創(chuàng)建表的索引,則根據(jù)表的個(gè)數(shù)獲得節(jié)點(diǎn)的個(gè)數(shù);若是創(chuàng)建記錄的索引,則根據(jù)記錄的個(gè)數(shù)獲得節(jié)點(diǎn)的個(gè)數(shù)。在本發(fā)明實(shí)施例中,節(jié)點(diǎn)包括節(jié)點(diǎn)域和控制域。其中,節(jié)點(diǎn)域用于存儲(chǔ)節(jié)點(diǎn)信息, 此處即為表或記錄的關(guān)鍵字;控制域用于存儲(chǔ)指針信息,此處的指針信息包括但不限于 指向其他節(jié)點(diǎn)的指針及指向關(guān)鍵字對(duì)應(yīng)的表或記錄的指針。在步驟S102中,根據(jù)每個(gè)節(jié)點(diǎn)所需占用的內(nèi)存空間,劃分對(duì)應(yīng)的內(nèi)存空間用于存儲(chǔ)每個(gè)節(jié)點(diǎn)的節(jié)點(diǎn)域和控制域。在本發(fā)明實(shí)施例中,由于每個(gè)節(jié)點(diǎn)的大小不同,占用的內(nèi)存空間大小就不同。在計(jì)算出每個(gè)節(jié)點(diǎn)所占用的內(nèi)存空間后,劃分對(duì)應(yīng)的內(nèi)存空間用于存儲(chǔ)每個(gè)節(jié)點(diǎn)的節(jié)點(diǎn)域和控制域。如將內(nèi)存地址0X00到0X11的內(nèi)存空間用于存儲(chǔ)第一個(gè)節(jié)點(diǎn)的節(jié)點(diǎn)域。在步驟S103中,將表或記錄的關(guān)鍵字存儲(chǔ)至節(jié)點(diǎn)的節(jié)點(diǎn)域,將指針信息存儲(chǔ)至節(jié)點(diǎn)的控制域,以此生成各節(jié)點(diǎn)及B+樹索引。在本發(fā)明實(shí)施例中,將表或記錄的關(guān)鍵字存儲(chǔ)至各節(jié)點(diǎn)的節(jié)點(diǎn)域,并將表或記錄的關(guān)鍵字作為節(jié)點(diǎn)的關(guān)鍵字,將指針信息(如指針信息)存儲(chǔ)至節(jié)點(diǎn)的控制域,初始化B+ 樹,生成各節(jié)點(diǎn)及B+樹索引。在本發(fā)明實(shí)施例中,生成的B+樹中每個(gè)節(jié)點(diǎn)的子樹個(gè)數(shù)小于等于B+樹的階數(shù),所述B+樹每個(gè)分支所包括的子樹個(gè)數(shù)大于等于B+樹的階數(shù),所述B+樹中除葉子節(jié)點(diǎn)外,其他節(jié)點(diǎn)至少有兩顆子樹。在B+樹中,每個(gè)節(jié)點(diǎn)的子樹個(gè)數(shù)與該節(jié)點(diǎn)的關(guān)鍵字個(gè)數(shù)相同,葉子節(jié)點(diǎn)包含的關(guān)鍵字的個(gè)數(shù)大于等于子樹個(gè)數(shù)的二分之一。葉子節(jié)點(diǎn)用于存儲(chǔ)節(jié)點(diǎn)的關(guān)鍵字及指向該關(guān)鍵字對(duì)應(yīng)的表或記錄的指針,或用于存儲(chǔ)數(shù)據(jù)文件分塊后每塊數(shù)據(jù)文件的最大關(guān)鍵字及指向該最大關(guān)鍵字對(duì)應(yīng)的表或記錄的指針,葉子節(jié)點(diǎn)按關(guān)鍵字值的大小順序進(jìn)行鏈接,所有葉子節(jié)點(diǎn)都在一層。所有分支節(jié)點(diǎn)包括該分支節(jié)點(diǎn)的子節(jié)點(diǎn)中值最大關(guān)鍵字或值最小的關(guān)鍵字的分界值及指向該分界值的指針。如圖2中,第二層中左邊第一個(gè)節(jié)點(diǎn)包含關(guān)鍵字F及J,而F和J正是該節(jié)點(diǎn)的子節(jié)點(diǎn)中值最小的關(guān)鍵字的分界值。其中,節(jié)點(diǎn)包括根節(jié)點(diǎn)、分支節(jié)點(diǎn)及葉子節(jié)點(diǎn),是根節(jié)點(diǎn)、分支節(jié)點(diǎn)及葉子節(jié)點(diǎn)的總稱。位于樹頂端的節(jié)點(diǎn)為根節(jié)點(diǎn);位于B+樹最底端的,沒有子節(jié)點(diǎn)的節(jié)點(diǎn)稱為葉子節(jié)點(diǎn);除了葉子節(jié)點(diǎn)和根節(jié)點(diǎn)外的節(jié)點(diǎn)稱為分支節(jié)點(diǎn)。除此外,還可用雙親節(jié)點(diǎn)和子節(jié)點(diǎn)來說明節(jié)點(diǎn)間的關(guān)系,與節(jié)點(diǎn)相連的,位于該節(jié)點(diǎn)上一層的節(jié)點(diǎn)稱為該節(jié)點(diǎn)的雙親節(jié)點(diǎn);而與該節(jié)點(diǎn)相連的,位于該節(jié)點(diǎn)下一層的節(jié)點(diǎn)稱為該節(jié)點(diǎn)的子節(jié)點(diǎn)。在本發(fā)明實(shí)施例中,通過B+樹來實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)庫(kù)的索引,提供了一種既高效,又穩(wěn)定的索引方法。既提高了實(shí)時(shí)數(shù)據(jù)庫(kù)的穩(wěn)定性,又提高了實(shí)時(shí)數(shù)據(jù)庫(kù)的性能,使得用戶能夠更加快捷地訪問實(shí)時(shí)數(shù)據(jù)庫(kù)。實(shí)施例二 實(shí)施例二為本發(fā)明提供的根據(jù)實(shí)施例一創(chuàng)建的B+樹索引查詢關(guān)鍵字的方法,為了便于說明,僅示出了與本發(fā)明實(shí)施例相關(guān)的部分。在本發(fā)明實(shí)施例中,將所需查找的表或記錄的關(guān)鍵字逐層與B+樹中各個(gè)節(jié)點(diǎn)的所有關(guān)鍵字相比較,直到在葉子節(jié)點(diǎn)中查找到與所述所需查找的表或記錄的關(guān)鍵字相同的關(guān)鍵字。下面舉一個(gè)具體的實(shí)例來詳細(xì)說明。假如所建立的B+樹如圖2所示,其中,表或記錄的關(guān)鍵字用英文字母表示,葉子節(jié)點(diǎn)按關(guān)鍵字值的大小順序進(jìn)行鏈接。需要在這顆B+樹中查找關(guān)鍵字G。則具體的查找方法如下首先,將關(guān)鍵字G與根節(jié)點(diǎn)中的關(guān)鍵字P相比較,得出G小于P,因此根據(jù)根節(jié)點(diǎn)中的指針,跳至第二層中包含了關(guān)鍵字F及J的節(jié)點(diǎn)。此時(shí),關(guān)鍵字G再與關(guān)鍵字F及J比較,在得出G大于F小于J后,再沿著指針進(jìn)入第三層的節(jié)點(diǎn),在第三層的節(jié)點(diǎn)中查詢到關(guān)鍵字G。并在包含關(guān)鍵字G的葉子節(jié)點(diǎn)中找到一個(gè)指向關(guān)鍵字G對(duì)應(yīng)的表或記錄的指針。在本發(fā)明實(shí)施例中,由于只有葉子節(jié)點(diǎn)用于存儲(chǔ)節(jié)點(diǎn)的關(guān)鍵字及指向該關(guān)鍵字對(duì)應(yīng)的表或記錄的指針,因此在B+樹中查詢時(shí),若非葉子節(jié)點(diǎn)包含的關(guān)鍵字等于需要查找的關(guān)鍵字,并不終止查詢。而是繼續(xù)向下查找,直到查到包含需要查找的關(guān)鍵字的葉子節(jié)點(diǎn)。實(shí)施例三實(shí)施例三為本發(fā)明提供的根據(jù)實(shí)施例一創(chuàng)建的B+樹索引插入關(guān)鍵字的方法,為了便于說明,僅示出了與本發(fā)明實(shí)施例相關(guān)的部分。在本發(fā)明實(shí)施例中,由于葉子節(jié)點(diǎn)按關(guān)鍵字值的大小順序進(jìn)行鏈接,則將需插入的關(guān)鍵字根據(jù)其值的大小插入對(duì)應(yīng)的葉子節(jié)點(diǎn)中。其中,有以下兩點(diǎn)需注意其一,若需插入的關(guān)鍵字對(duì)應(yīng)的葉子節(jié)點(diǎn)加上需插入的關(guān)鍵字后,它所包含的關(guān)鍵字的個(gè)數(shù)小于等于該葉子節(jié)點(diǎn)階數(shù),則將該關(guān)鍵字直接插入對(duì)應(yīng)的葉子節(jié)點(diǎn)中。其二,若需插入的關(guān)鍵字對(duì)應(yīng)的葉子節(jié)點(diǎn)加上需插入的關(guān)鍵字后,它所包含的關(guān)鍵字的個(gè)數(shù)大于該葉子節(jié)點(diǎn)階數(shù),則需分裂該葉子節(jié)點(diǎn)。具體分裂方法為將需插入的關(guān)鍵字對(duì)應(yīng)的葉子節(jié)點(diǎn)分裂為兩個(gè)節(jié)點(diǎn),這兩個(gè)節(jié)點(diǎn)所包含的關(guān)鍵字的個(gè)數(shù)分別為(m+l)/2向下取整后所得的整數(shù),(m+l)/2向上取整后所得的整數(shù)。其中,m 為節(jié)點(diǎn)階數(shù)。此時(shí),再判斷該葉子節(jié)點(diǎn)的雙親節(jié)點(diǎn)是否滿足該雙親節(jié)點(diǎn)包含的關(guān)鍵字個(gè)數(shù)小于等于該雙親節(jié)點(diǎn)階數(shù),若滿足,結(jié)束插入流程;若不滿足,則繼續(xù)按上述方法分裂該雙親節(jié)點(diǎn),直到所有節(jié)點(diǎn)都滿足節(jié)點(diǎn)包含的關(guān)鍵字個(gè)數(shù)小于等于該節(jié)點(diǎn)階數(shù)。下面對(duì)比圖3及圖4來說明插入關(guān)鍵字E的過程。若按照?qǐng)D3所示,直接將E插入左邊第一個(gè)葉子節(jié)點(diǎn),則造成該葉子節(jié)點(diǎn)不滿足節(jié)點(diǎn)包含的關(guān)鍵字個(gè)數(shù)小于等于該節(jié)點(diǎn)階數(shù),引起錯(cuò)誤。因此,要按照?qǐng)D4所示的方法,分裂E所在的葉子節(jié)點(diǎn),使得E所在葉子節(jié)點(diǎn)分為兩個(gè)節(jié)點(diǎn),一個(gè)包含關(guān)鍵字A和B,另一個(gè)包含關(guān)鍵字C、D及E,使得這兩個(gè)葉子節(jié)點(diǎn)都滿足節(jié)點(diǎn)包含的關(guān)鍵字個(gè)數(shù)小于等于該節(jié)點(diǎn)階數(shù)。實(shí)施例四實(shí)施例四為本發(fā)明提供的根據(jù)實(shí)施例一創(chuàng)建的B+樹索引刪除關(guān)鍵字的方法,為了便于說明,僅示出了與本發(fā)明實(shí)施例相關(guān)的部分。在本發(fā)明實(shí)施例中,首先查找到需刪除的關(guān)鍵字所在的節(jié)點(diǎn),然后將該關(guān)鍵字刪除。具體有兩種情況其一,查詢到需刪除的關(guān)鍵字所在的節(jié)點(diǎn)后,若該節(jié)點(diǎn)中的關(guān)鍵字個(gè)數(shù)大于該節(jié)點(diǎn)階數(shù)的二分之一,則直接刪除該關(guān)鍵字及與指向該關(guān)鍵字對(duì)應(yīng)的表或記錄的指針。其二,查詢到需刪除的關(guān)鍵字所在的節(jié)點(diǎn)后,若該節(jié)點(diǎn)中的關(guān)鍵字個(gè)數(shù)等于該節(jié)點(diǎn)階數(shù)的二分之一,則從該節(jié)點(diǎn)的兄弟節(jié)點(diǎn)中移一個(gè)或多個(gè)關(guān)鍵字到該節(jié)點(diǎn)中,使該節(jié)點(diǎn)與其兄弟節(jié)點(diǎn)中所含的關(guān)鍵字個(gè)數(shù)基本相同。具體為,若該節(jié)點(diǎn)中的關(guān)鍵字個(gè)數(shù)等于該節(jié)點(diǎn)階數(shù)的二分之一,刪除關(guān)鍵字后,可能導(dǎo)致該節(jié)點(diǎn)中的關(guān)鍵字個(gè)數(shù)小于該節(jié)點(diǎn)階數(shù)的二分之一,因此,此時(shí)需從該節(jié)點(diǎn)的兄弟節(jié)點(diǎn)中移一個(gè)或多個(gè)關(guān)鍵字到該節(jié)點(diǎn)中,使該節(jié)點(diǎn)與其兄弟節(jié)點(diǎn)中所含的關(guān)鍵字個(gè)數(shù)基本相同。然而,若該兄弟節(jié)點(diǎn)所包含的關(guān)鍵字個(gè)數(shù)等于節(jié)點(diǎn)階數(shù)的二分之一,則不能移動(dòng)該兄弟節(jié)點(diǎn)中的關(guān)鍵字,而是將該節(jié)點(diǎn)與它的兄弟節(jié)點(diǎn)或雙親節(jié)點(diǎn)中的一個(gè)關(guān)鍵字合并為一個(gè)節(jié)點(diǎn)。下面通過圖5及圖6來說明刪除關(guān)鍵字G的過程。如圖5所示,首先從包含關(guān)鍵點(diǎn)G的葉子節(jié)點(diǎn)中刪除關(guān)鍵點(diǎn)G。然而由于G所在節(jié)點(diǎn)原有兩個(gè)關(guān)鍵字(即在刪除關(guān)鍵字 G之前),該節(jié)點(diǎn)關(guān)鍵字的個(gè)數(shù)等于節(jié)點(diǎn)階數(shù)的二分之一。因此,在刪除關(guān)鍵字G后,必須將該節(jié)點(diǎn)的兄弟節(jié)點(diǎn)中的一個(gè)或多個(gè)關(guān)鍵字加入該節(jié)點(diǎn)中。但是由于其兄弟節(jié)點(diǎn)所包含的關(guān)鍵字個(gè)數(shù)也等于節(jié)點(diǎn)階數(shù)的二分之一,因此,合并該節(jié)點(diǎn)與其兄弟節(jié)點(diǎn),即將關(guān)鍵字F、J、K 合在一個(gè)節(jié)點(diǎn)中(如圖6所示)。此時(shí),由于合成節(jié)點(diǎn)后,該合成后的節(jié)點(diǎn)的雙親節(jié)點(diǎn)中關(guān)鍵字J已經(jīng)不是該雙親節(jié)點(diǎn)的子節(jié)點(diǎn)中值最小的關(guān)鍵字的分界值,因此還需從該雙親節(jié)點(diǎn)中刪除關(guān)鍵字J。實(shí)施例五圖7為本發(fā)明實(shí)施例提供的實(shí)時(shí)數(shù)據(jù)庫(kù)的B+樹索引裝置結(jié)構(gòu)示意圖,為了便于說明,僅示出了與本發(fā)明實(shí)施例相關(guān)的部份。該裝置可以是內(nèi)置于電腦等電子設(shè)備的軟件單元、硬件單元或者軟硬件相結(jié)合的單元,或者作為獨(dú)立的掛件集成到這些電子設(shè)備或電子的應(yīng)用系統(tǒng)中。其中節(jié)點(diǎn)個(gè)數(shù)獲取單元71,用于根據(jù)實(shí)時(shí)數(shù)據(jù)庫(kù)中表或記錄的個(gè)數(shù),獲得節(jié)點(diǎn)個(gè)數(shù),所述節(jié)點(diǎn)包括節(jié)點(diǎn)域和控制域。內(nèi)存劃分單元72,用于根據(jù)每個(gè)節(jié)點(diǎn)所需占用的內(nèi)存空間,劃分對(duì)應(yīng)的內(nèi)存空間用于存儲(chǔ)每個(gè)節(jié)點(diǎn)的節(jié)點(diǎn)域和控制域。索引生成單元73,用于將表或記錄的關(guān)鍵字存儲(chǔ)至節(jié)點(diǎn)的節(jié)點(diǎn)域,將指針信息存儲(chǔ)至節(jié)點(diǎn)的控制域,以此生成各節(jié)點(diǎn)及B+樹索引。
在本發(fā)明實(shí)施例中,生成的B+樹中每個(gè)節(jié)點(diǎn)的子樹個(gè)數(shù)小于等于B+樹的階數(shù),所述B+樹每個(gè)分支所包括的子樹個(gè)數(shù)大于等于B+樹的階數(shù),所述B+樹中除葉子節(jié)點(diǎn)外,其他節(jié)點(diǎn)至少有兩顆子樹。在B+樹中,每個(gè)節(jié)點(diǎn)的子樹個(gè)數(shù)與該節(jié)點(diǎn)的關(guān)鍵字個(gè)數(shù)相同,葉子節(jié)點(diǎn)包含的關(guān)鍵字的個(gè)數(shù)大于等于所述子樹個(gè)數(shù)的二分之一。葉子節(jié)點(diǎn)用于存儲(chǔ)節(jié)點(diǎn)的關(guān)鍵字及指向該關(guān)鍵字對(duì)應(yīng)的表或記錄的指針,或用于存儲(chǔ)數(shù)據(jù)文件分塊后每塊數(shù)據(jù)文件的最大關(guān)鍵字及指向該最大關(guān)鍵字對(duì)應(yīng)的表或記錄的指針,葉子節(jié)點(diǎn)按關(guān)鍵字值的大小順序進(jìn)行鏈接,所有葉子節(jié)點(diǎn)都在一層。所有分支節(jié)點(diǎn)包括該分支節(jié)點(diǎn)的子節(jié)點(diǎn)中值最大關(guān)鍵字或值最小的關(guān)鍵字的分界值及指向該分界值的指針。優(yōu)選的,所述實(shí)時(shí)數(shù)據(jù)庫(kù)的B+樹索引裝置還包括查詢單元,用于將所需查找的表或記錄的關(guān)鍵字逐層與B+樹中各個(gè)節(jié)點(diǎn)的所有關(guān)鍵字相比較,直到在葉子節(jié)點(diǎn)中查找到與所述所需查找的表或記錄的關(guān)鍵字相同的關(guān)鍵字。插入單元,用于將需插入的關(guān)鍵字根據(jù)其值的大小插入對(duì)應(yīng)的葉子節(jié)點(diǎn)中;若需插入的關(guān)鍵字對(duì)應(yīng)的葉子節(jié)點(diǎn)加上需插入的關(guān)鍵字后,所包含的關(guān)鍵字的個(gè)數(shù)小于等于該葉子節(jié)點(diǎn)階數(shù),則將需插入的關(guān)鍵字直接插入對(duì)應(yīng)的葉子節(jié)點(diǎn)中;若需插入的關(guān)鍵字對(duì)應(yīng)的葉子節(jié)點(diǎn)加上需插入的關(guān)鍵字后,所包含的關(guān)鍵字的個(gè)數(shù)大于該葉子節(jié)點(diǎn)階數(shù),則分裂該葉子節(jié)點(diǎn)。刪除單元,用于查詢到需刪除的關(guān)鍵字所在的節(jié)點(diǎn)后,若該節(jié)點(diǎn)中的關(guān)鍵字個(gè)數(shù)大于該節(jié)點(diǎn)階數(shù)的二分之一,則直接刪除該關(guān)鍵字及與指向該關(guān)鍵字對(duì)應(yīng)的表或記錄的指針;若該節(jié)點(diǎn)中的關(guān)鍵字個(gè)數(shù)等于該節(jié)點(diǎn)階數(shù)的二分之一,則從該節(jié)點(diǎn)的兄弟節(jié)點(diǎn)中移一個(gè)或多個(gè)關(guān)鍵字到該節(jié)點(diǎn)中,使該節(jié)點(diǎn)與其兄弟節(jié)點(diǎn)中所含的關(guān)鍵字個(gè)數(shù)基本相同。在本發(fā)明實(shí)施例中,通過B+樹來實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)庫(kù)的索引,提供了一種既高效,又穩(wěn)定的索引方法。既提高了實(shí)時(shí)數(shù)據(jù)庫(kù)的穩(wěn)定性,又提高了實(shí)時(shí)數(shù)據(jù)庫(kù)的性能,使得用戶能夠更加快捷地訪問實(shí)時(shí)數(shù)據(jù)庫(kù)。本領(lǐng)域普通技術(shù)人員可以理解,實(shí)現(xiàn)上述實(shí)施例方法中的全部或部分步驟是可以通過程序來指令相關(guān)的硬件來完成,所述的程序可以在存儲(chǔ)于一計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中,所述的存儲(chǔ)介質(zhì),如ROM/RAM、磁盤、光盤等。以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種實(shí)時(shí)數(shù)據(jù)庫(kù)的B+樹索引方法,其特征在于,所述方法包括根據(jù)實(shí)時(shí)數(shù)據(jù)庫(kù)中表或記錄的個(gè)數(shù),獲得節(jié)點(diǎn)個(gè)數(shù),所述節(jié)點(diǎn)包括節(jié)點(diǎn)域和控制域;根據(jù)每個(gè)節(jié)點(diǎn)所需占用的內(nèi)存空間,劃分對(duì)應(yīng)的內(nèi)存空間用于存儲(chǔ)每個(gè)節(jié)點(diǎn)的節(jié)點(diǎn)域和控制域;將表或記錄的關(guān)鍵字存儲(chǔ)至節(jié)點(diǎn)的節(jié)點(diǎn)域,將指針信息存儲(chǔ)至節(jié)點(diǎn)的控制域,以此生成各節(jié)點(diǎn)及B+樹索引。
2.如權(quán)利要求1所述的方法,其特征在于,在所述B+樹中,節(jié)點(diǎn)的子樹個(gè)數(shù)與節(jié)點(diǎn)的關(guān)鍵字個(gè)數(shù)相同,葉子節(jié)點(diǎn)包含的關(guān)鍵字的個(gè)數(shù)大于等于所述子樹個(gè)數(shù)的二分之一;葉子節(jié)點(diǎn)用于存儲(chǔ)關(guān)鍵字及指向該關(guān)鍵字對(duì)應(yīng)的表或記錄的指針,葉子節(jié)點(diǎn)按關(guān)鍵字值的大小順序進(jìn)行鏈接;所有分支節(jié)點(diǎn)包括該分支節(jié)點(diǎn)的子節(jié)點(diǎn)中值最大關(guān)鍵字或值最小的關(guān)鍵字的分界值及指向該分界值的指針。
3.如權(quán)利要求1或2所述的方法,其特征在于,利用所述B+樹索引查找表或記錄的方法為將所需查找的表或記錄的關(guān)鍵字逐層與B+樹各個(gè)節(jié)點(diǎn)的關(guān)鍵字相比較,直到在葉子節(jié)點(diǎn)中查找到與所述所需查找的表或記錄的關(guān)鍵字相同的關(guān)鍵字。
4.如權(quán)利要求1或2所述的方法,其特征在于,利用所述B+樹索引插入表或記錄的方法為將需插入的關(guān)鍵字根據(jù)其值的大小插入對(duì)應(yīng)的葉子節(jié)點(diǎn)中;若需插入的關(guān)鍵字對(duì)應(yīng)的葉子節(jié)點(diǎn)加上需插入的關(guān)鍵字后,所包含的關(guān)鍵字的個(gè)數(shù)小于等于該葉子節(jié)點(diǎn)階數(shù),則將需插入的關(guān)鍵字直接插入對(duì)應(yīng)的葉子節(jié)點(diǎn)中;若需插入的關(guān)鍵字對(duì)應(yīng)的葉子節(jié)點(diǎn)加上需插入的關(guān)鍵字后,所包含的關(guān)鍵字的個(gè)數(shù)大于該葉子節(jié)點(diǎn)階數(shù),則分裂該葉子節(jié)點(diǎn)。
5.如權(quán)利要求1或2所述的方法,其特征在于,利用所述B+樹索引刪除表或記錄的方法為查詢到需刪除的關(guān)鍵字所在的節(jié)點(diǎn)后,若該節(jié)點(diǎn)中的關(guān)鍵字個(gè)數(shù)大于該節(jié)點(diǎn)階數(shù)的二分之一,則直接刪除該關(guān)鍵字及與指向該關(guān)鍵字對(duì)應(yīng)的表或記錄的指針;查詢到需刪除的關(guān)鍵字所在的節(jié)點(diǎn)后,若該節(jié)點(diǎn)中的關(guān)鍵字個(gè)數(shù)等于該節(jié)點(diǎn)階數(shù)的二分之一,則從該節(jié)點(diǎn)的兄弟節(jié)點(diǎn)中移一個(gè)或多個(gè)關(guān)鍵字到該節(jié)點(diǎn)中,使該節(jié)點(diǎn)與其兄弟節(jié)點(diǎn)中所含的關(guān)鍵字個(gè)數(shù)基本相同。
6.一種實(shí)時(shí)數(shù)據(jù)庫(kù)的B+樹索引裝置,其特征在于,所述裝置包括節(jié)點(diǎn)個(gè)數(shù)獲取單元,用于根據(jù)實(shí)時(shí)數(shù)據(jù)庫(kù)中表或記錄的個(gè)數(shù),獲得節(jié)點(diǎn)個(gè)數(shù),所述節(jié)點(diǎn)包括節(jié)點(diǎn)域和控制域;內(nèi)存劃分單元,用于根據(jù)每個(gè)節(jié)點(diǎn)所需占用的內(nèi)存空間,劃分對(duì)應(yīng)的內(nèi)存空間用于存儲(chǔ)每個(gè)節(jié)點(diǎn)的節(jié)點(diǎn)域和控制域;索引生成單元,用于將表或記錄的關(guān)鍵字存儲(chǔ)至節(jié)點(diǎn)的節(jié)點(diǎn)域,將指針信息存儲(chǔ)至節(jié)點(diǎn)的控制域,以此生成各節(jié)點(diǎn)及B+樹索引。
7.如權(quán)利要求6所述的裝置,其特征在于,在所述B+樹中,節(jié)點(diǎn)的子樹個(gè)數(shù)與節(jié)點(diǎn)的關(guān)鍵字個(gè)數(shù)相同,葉子節(jié)點(diǎn)包含的關(guān)鍵字的個(gè)數(shù)大于等于所述子樹個(gè)數(shù)的二分之一;葉子節(jié)點(diǎn)用于存儲(chǔ)關(guān)鍵字及指向該關(guān)鍵字對(duì)應(yīng)的表或記錄的指針,葉子節(jié)點(diǎn)按關(guān)鍵字值的大小順序進(jìn)行鏈接;所有分支節(jié)點(diǎn)包括該分支節(jié)點(diǎn)的子節(jié)點(diǎn)中值最大關(guān)鍵字或值最小的關(guān)鍵字的分界值及指向該分界值的指針。
8.如權(quán)利要求6或7所述的裝置,其特征在于,所述裝置還包括查詢單元,用于將所需查找的表或記錄的關(guān)鍵字逐層與B+樹各個(gè)節(jié)點(diǎn)的關(guān)鍵字相比較,直到在葉子節(jié)點(diǎn)中查找到與所述所需查找的表或記錄的關(guān)鍵字相同的關(guān)鍵字。
9.如權(quán)利要求6或7所述的裝置,其特征在于,所述裝置還包括插入單元,用于將需插入的關(guān)鍵字根據(jù)其值的大小插入對(duì)應(yīng)的葉子節(jié)點(diǎn)中;若需插入的關(guān)鍵字對(duì)應(yīng)的葉子節(jié)點(diǎn)加上需插入的關(guān)鍵字后,所包含的關(guān)鍵字的個(gè)數(shù)小于等于該葉子節(jié)點(diǎn)階數(shù),則將需插入的關(guān)鍵字直接插入對(duì)應(yīng)的葉子節(jié)點(diǎn)中;若需插入的關(guān)鍵字對(duì)應(yīng)的葉子節(jié)點(diǎn)加上需插入的關(guān)鍵字后,所包含的關(guān)鍵字的個(gè)數(shù)大于該葉子節(jié)點(diǎn)階數(shù),則分裂該葉子節(jié)點(diǎn)。
10.如權(quán)利要求6或7所述的裝置,其特征在于,所述裝置還包括刪除單元,用于查詢到需刪除的關(guān)鍵字所在的節(jié)點(diǎn)后,若該節(jié)點(diǎn)中的關(guān)鍵字個(gè)數(shù)大于該節(jié)點(diǎn)階數(shù)的二分之一,則直接刪除該關(guān)鍵字及與指向該關(guān)鍵字對(duì)應(yīng)的表或記錄的指針; 查詢到需刪除的關(guān)鍵字所在的節(jié)點(diǎn)后,若該節(jié)點(diǎn)中的關(guān)鍵字個(gè)數(shù)等于該節(jié)點(diǎn)階數(shù)的二分之一,則從該節(jié)點(diǎn)的兄弟節(jié)點(diǎn)中移一個(gè)或多個(gè)關(guān)鍵字到該節(jié)點(diǎn)中,使該節(jié)點(diǎn)與其兄弟節(jié)點(diǎn)中所含的關(guān)鍵字個(gè)數(shù)基本相同。
全文摘要
本發(fā)明適用于數(shù)據(jù)處理領(lǐng)域,提供了一種實(shí)時(shí)數(shù)據(jù)庫(kù)的B+樹索引方法及裝置,所述方法包括根據(jù)實(shí)時(shí)數(shù)據(jù)庫(kù)中表或記錄的個(gè)數(shù),獲得節(jié)點(diǎn)個(gè)數(shù),所述節(jié)點(diǎn)包括節(jié)點(diǎn)域和控制域;根據(jù)每個(gè)節(jié)點(diǎn)所需占用的內(nèi)存空間,劃分對(duì)應(yīng)的內(nèi)存空間用于存儲(chǔ)每個(gè)節(jié)點(diǎn)的節(jié)點(diǎn)域和控制域;將表或記錄的關(guān)鍵字存儲(chǔ)至節(jié)點(diǎn)的節(jié)點(diǎn)域,將指針信息存儲(chǔ)至節(jié)點(diǎn)的控制域,以此生成各節(jié)點(diǎn)及B+樹索引。提供了一種既高效,又穩(wěn)定的索引方法。既提高了實(shí)時(shí)數(shù)據(jù)庫(kù)的穩(wěn)定性,又提高了實(shí)時(shí)數(shù)據(jù)庫(kù)的性能,使得用戶能夠更加快捷地訪問實(shí)時(shí)數(shù)據(jù)庫(kù)。
文檔編號(hào)G06F17/30GK102402602SQ20111036759
公開日2012年4月4日 申請(qǐng)日期2011年11月18日 優(yōu)先權(quán)日2011年11月18日
發(fā)明者丁明偉 申請(qǐng)人:航天科工深圳(集團(tuán))有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
主站蜘蛛池模板: 福安市| 农安县| 鹤庆县| 中宁县| 美姑县| 星子县| 青州市| 磴口县| 阜城县| 枣强县| 崇州市| 南京市| 乌什县| 信丰县| 宾川县| 新闻| 安岳县| 莱州市| 澎湖县| 黄冈市| 白朗县| 肥东县| 凤山市| 莒南县| 南陵县| 攀枝花市| 大渡口区| 木兰县| 罗江县| 焉耆| 霞浦县| 德清县| 东兰县| 屏东县| 右玉县| 邹城市| 九江县| 德安县| 象山县| 永州市| 垫江县|