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

一種數(shù)據(jù)庫的b樹索引的生成方法及裝置的制作方法

文檔序號(hào):6585131閱讀:292來源:國(guó)知局
專利名稱:一種數(shù)據(jù)庫的b樹索引的生成方法及裝置的制作方法
技術(shù)領(lǐng)域
本發(fā)明屬于數(shù)據(jù)庫處理技術(shù)領(lǐng)域,特別涉及一種數(shù)據(jù)庫的B樹索引的生成方法及 裝置。
背景技術(shù)
隨著智能卡技術(shù)的發(fā)展,卡內(nèi)存放的數(shù)據(jù)量越來越大,傳統(tǒng)的文件系統(tǒng),從中尋找 特定的數(shù)據(jù)就要遍歷整個(gè)文件,效率低下。為了克服這一缺陷,達(dá)到快速查找數(shù)據(jù)的目的, 我們?cè)谥悄芸ㄖ幸M(jìn)了一種數(shù)據(jù)庫索引技術(shù),即B樹索引技術(shù)。 B樹索引是指把索引組織成B樹數(shù)據(jù)結(jié)構(gòu)來達(dá)到高效執(zhí)行索引的目的,B樹是一 種多路的平衡查找樹,一顆M階的B樹,需滿足下列性質(zhì)樹中每個(gè)節(jié)點(diǎn)至多有M棵子樹; 若根節(jié)點(diǎn)不是葉節(jié)點(diǎn),則至少有兩棵子樹;除根之外的所有非終端節(jié)點(diǎn)至少有[m/2]棵子 樹;所有的非終端節(jié)點(diǎn)(根節(jié)點(diǎn)和導(dǎo)航節(jié)點(diǎn))包含下列信息數(shù)據(jù)(n, A0, Kl, Al, K2, A2,
K3,A3......Kn,An),其中Ki為關(guān)鍵字,且Ki < K(i+1) {i = 1,2. ,n_l},Ai{i = 0. n}
為指向子樹根節(jié)點(diǎn)的指針,且指針A(i-l)所指子樹中所有節(jié)點(diǎn)的關(guān)鍵字均小于KiU = 1, 2. . . n} ,An所指子樹中所有結(jié)點(diǎn)的關(guān)鍵字均大于Kn,n{[M/2]-l < = n < = M_l}為關(guān)鍵字 的個(gè)數(shù)。所有的葉子節(jié)點(diǎn)都出現(xiàn)在同一層次上,并且不帶指針信息。如圖l所示,圖l是一 棵索引樹示意圖,包含根節(jié)點(diǎn)(包括記錄R18的節(jié)點(diǎn)),導(dǎo)航節(jié)點(diǎn)(如包括記錄R4、 R7、 RIO 和R15的節(jié)點(diǎn))和葉節(jié)點(diǎn)(如包括記錄Rl、 R2和R3的節(jié)點(diǎn))。其中根節(jié)點(diǎn)和導(dǎo)航節(jié)點(diǎn)中 的記錄包括關(guān)鍵字和指針,葉節(jié)點(diǎn)中的記錄只包括關(guān)鍵字但不包括指針。各節(jié)點(diǎn)中可容納 的記錄數(shù)量也為n,并也應(yīng)滿足n {[M/2] -1 < = n < = M_l}。 現(xiàn)有B樹索引算法的主要內(nèi)容包括對(duì)B樹各節(jié)點(diǎn)中的記錄的查詢,刪除,插入,更 新操作,對(duì)B樹的查詢操作有標(biāo)準(zhǔn)的算法實(shí)現(xiàn),而對(duì)B樹的刪除,插入,更新因?yàn)樯婕暗綄?duì)B 樹的平衡操作,所以會(huì)根據(jù)具體的硬件和軟件環(huán)境具體實(shí)現(xiàn)?,F(xiàn)有的B樹索引算法的實(shí)現(xiàn) 為了達(dá)到快速執(zhí)行索引的目的,需要分為刪除,插入,更新(可分解為刪除和插入)操作,占 用大量的內(nèi)存對(duì)硬件的要求較高。

發(fā)明內(nèi)容
為了解決現(xiàn)有B樹索引算法需要占用大量的內(nèi)存,對(duì)硬件的要求較高的問題,本 發(fā)明實(shí)施例提供了一種數(shù)據(jù)庫的B樹索引的生成方法,包括 對(duì)索引樹一個(gè)節(jié)點(diǎn)進(jìn)行插入或刪除記錄操作前確定會(huì)導(dǎo)致索引樹不平衡,則獲取
待更新節(jié)點(diǎn)中所有記錄,待更新節(jié)點(diǎn)為進(jìn)行操作的節(jié)點(diǎn)和其相鄰的兄弟節(jié)點(diǎn); 以獲取的記錄和待插入的記錄作為待重新分配的記錄,或以除待刪除的記錄之外
的獲取的記錄作為待重新分配的記錄,計(jì)算待重新分配的記錄的大小總和; 根據(jù)單個(gè)節(jié)點(diǎn)容納記錄的大小和待重新分配的記錄的大小總和,重新計(jì)算生成新
的平衡索引樹所需新節(jié)點(diǎn)的數(shù)量和各新節(jié)點(diǎn)容納的記錄數(shù)量; 根據(jù)新節(jié)點(diǎn)的數(shù)量和各新節(jié)點(diǎn)容納的記錄數(shù)量將待重新分配的記錄分配到新節(jié)樹。 同時(shí)本發(fā)明實(shí)施例還提供一種數(shù)據(jù)庫的B樹索引的生成方法,包括 對(duì)階數(shù)為M的索引樹一個(gè)節(jié)點(diǎn)進(jìn)行插入或刪除記錄操作前確定會(huì)導(dǎo)致索引樹不
平衡,則獲取待更新節(jié)點(diǎn)中所有記錄,待更新節(jié)點(diǎn)為進(jìn)行操作的節(jié)點(diǎn)和其相鄰的兄弟節(jié)
點(diǎn); 將獲取的記錄載入到第一內(nèi)存空間中,把第一內(nèi)存空間中的記錄拷貝到第二內(nèi)存 空間,第二內(nèi)存空間最多可容納M個(gè)記錄; 若生成新的平衡索引樹所需的新節(jié)點(diǎn)中需包括待插入記錄,則記錄拷貝后第二內(nèi) 存空間中包括除待插入記錄之外的生成新節(jié)點(diǎn)所需的記錄,將存于第二內(nèi)存空間中生成新 節(jié)點(diǎn)所需的記錄以及待插入記錄導(dǎo)入到第一內(nèi)存空間中,并進(jìn)行標(biāo)記用于生成新節(jié)點(diǎn),以 新節(jié)點(diǎn)代替待更新節(jié)點(diǎn)生成新的平衡索引樹; 若新節(jié)點(diǎn)中不需包括待插入記錄,則進(jìn)行記錄拷貝后第二內(nèi)存空間包括生成新節(jié)
點(diǎn)所需的全部記錄,將存于第二內(nèi)存空間生成新節(jié)點(diǎn)所需的全部記錄導(dǎo)入到第一內(nèi)存空間
中,并進(jìn)行標(biāo)記用于生成新節(jié)點(diǎn),以新節(jié)點(diǎn)代替待更新節(jié)點(diǎn)生成新的平衡索引樹。
同時(shí)本發(fā)明實(shí)施例還提供一種數(shù)據(jù)庫的B樹索引的生成裝置,包括 第一獲取模塊用于對(duì)索引樹一個(gè)節(jié)點(diǎn)進(jìn)行插入或刪除記錄操作前確定會(huì)導(dǎo)致索
引樹不平衡,則獲取待更新節(jié)點(diǎn)中所有記錄,待更新節(jié)點(diǎn)為進(jìn)行操作的節(jié)點(diǎn)和其相鄰的兄
弟節(jié)點(diǎn); 第一計(jì)算模塊用于以獲取的記錄和待插入的記錄作為待重新分配的記錄,或以 除待刪除的記錄之外的獲取的記錄作為待重新分配的記錄,計(jì)算待重新分配的記錄的大小 總和; 第二計(jì)算模塊用于根據(jù)單個(gè)節(jié)點(diǎn)容納記錄的大小和待重新分配的記錄的大小總
和,重新計(jì)算生成新的平衡索引樹所需新節(jié)點(diǎn)的數(shù)量和各新節(jié)點(diǎn)容納的記錄數(shù)量; 索引樹生成模塊用于根據(jù)新節(jié)點(diǎn)的數(shù)量和各新節(jié)點(diǎn)容納的記錄數(shù)量將待重新分
配的記錄分配到新節(jié)點(diǎn)中,并以新節(jié)點(diǎn)代替待更新節(jié)點(diǎn)生成新的平衡索引樹。
同時(shí)本發(fā)明實(shí)施例還提供一種數(shù)據(jù)庫的B樹索引的生成裝置,包括 第二獲取模塊用于對(duì)階數(shù)為M的索引樹一個(gè)節(jié)點(diǎn)進(jìn)行插入或刪除記錄操作前確
定會(huì)導(dǎo)致索引樹不平衡,則獲取待更新節(jié)點(diǎn)中所有記錄,待更新節(jié)點(diǎn)為進(jìn)行操作的節(jié)點(diǎn)和
其相鄰的兄弟節(jié)點(diǎn); 記錄拷貝模塊用于將獲取的記錄載入到第一內(nèi)存空間中,把第一內(nèi)存空間中的 記錄拷貝到第二內(nèi)存空間,第二內(nèi)存空間最多可容納M個(gè)記錄; 若生成新的平衡索引樹所需的新節(jié)點(diǎn)中需包括待插入記錄,則記錄拷貝后第二內(nèi) 存空間中包括除待插入記錄之外的生成新節(jié)點(diǎn)所需的記錄,將存于第二內(nèi)存空間中生成新 節(jié)點(diǎn)所需的記錄以及待插入記錄導(dǎo)入到第一內(nèi)存空間中,并進(jìn)行標(biāo)記用于生成新節(jié)點(diǎn),以 新節(jié)點(diǎn)代替待更新節(jié)點(diǎn)生成新的平衡索引樹; 若新節(jié)點(diǎn)中不需包括待插入記錄,則進(jìn)行記錄拷貝后第二內(nèi)存空間包括新節(jié)點(diǎn)中 的全部記錄,將存于第二內(nèi)存空間的新節(jié)點(diǎn)中的全部記錄導(dǎo)入到第一內(nèi)存空間中,并進(jìn)行 標(biāo)記用于生成新節(jié)點(diǎn),以新節(jié)點(diǎn)代替待更新節(jié)點(diǎn)生成新的平衡索引樹。 由上述本發(fā)明提供的具體實(shí)施方案可以看出,正是由于重新計(jì)算生成新的平衡索引樹所需新節(jié)點(diǎn)的數(shù)量和各新節(jié)點(diǎn)容納的記錄數(shù)量并據(jù)此重新分配,不需區(qū)分插入或刪除 操作,占用內(nèi)存少,對(duì)硬件的要求較低。


圖1為現(xiàn)有技術(shù)中的一棵索引樹示意圖; 圖2為本發(fā)明提供的第一實(shí)施例方法流程圖; 圖3為本發(fā)明提供的第一實(shí)施例提供的索引樹的示意圖; 圖4-6為本發(fā)明提供的第一實(shí)施例生成新索引樹的示意圖; 圖7為本發(fā)明提供的第二實(shí)施例裝置結(jié)構(gòu)圖; 圖8為本發(fā)明提供的第三實(shí)施例裝置結(jié)構(gòu)圖。
具體實(shí)施例方式
為了解決用戶身份驗(yàn)證的安全性較低的問題,本發(fā)明提供的第一實(shí)施例是一種數(shù)
據(jù)庫的B樹索引的生成方法,方法流程如圖2所示,包括 步驟101 :對(duì)B樹中待插入或刪除記錄的節(jié)點(diǎn)10進(jìn)行查找。 步驟102 :在對(duì)節(jié)點(diǎn)10進(jìn)行插入或刪除記錄操作前進(jìn)行判斷,如果節(jié)點(diǎn)10空間足 夠,則執(zhí)行插入操作結(jié)束。否則轉(zhuǎn)步驟103。如果刪除記錄后,節(jié)點(diǎn)IO空間大于等于一半, 則執(zhí)行刪除操作結(jié)束。否則轉(zhuǎn)步驟103。 步驟103 :查找父節(jié)點(diǎn)以此來獲取節(jié)點(diǎn)10及其左兄弟節(jié)點(diǎn)11和右兄弟節(jié)點(diǎn)12, 3 個(gè)節(jié)點(diǎn)中的全部記錄。 步驟104 :分配一段內(nèi)存空間即01d,載入節(jié)點(diǎn)10以及其左兄弟節(jié)點(diǎn)11和右兄弟 節(jié)點(diǎn)12,3個(gè)節(jié)點(diǎn)中的全部記錄,對(duì)應(yīng)的內(nèi)存指針分別為即01d
,即01d[l],即01d[2]。
步驟105 :計(jì)算上述3個(gè)節(jié)點(diǎn)中的記錄的大小和插入的記錄的大小之和,或與刪除 的記錄的大小之差。 步驟106 :根據(jù)步驟105的計(jì)算結(jié)果以及單個(gè)節(jié)點(diǎn)容納記錄的大小,重新計(jì)算每個(gè) 新節(jié)點(diǎn)能容納的記錄數(shù)量和需要多少新節(jié)點(diǎn),重新利用即Old[O],即Old[l],即01d[2]來 作為新節(jié)點(diǎn)的內(nèi)存指針。 步驟107 :分配一新內(nèi)存空間apcell,從內(nèi)存空間即01d中把需要的數(shù)據(jù)拷貝到 apcell[]中,然后再從apcell[]中把數(shù)據(jù)導(dǎo)入到內(nèi)存空間即01d中并分配對(duì)應(yīng)的內(nèi)存指 針。 步驟108 :以分配的內(nèi)存指針將內(nèi)存空間即01d中的記錄分配到新節(jié)點(diǎn)中,并以新 節(jié)點(diǎn)代替待更新節(jié)點(diǎn)生成新的平衡索引樹。 由上述步驟可知,生成新的索引樹的過程并不區(qū)分是插入記錄操作還是刪除記錄
操作,因此本實(shí)施例中的方法占用內(nèi)存少非常適用于智能卡等內(nèi)存小的環(huán)境使用。 其中步驟101中,對(duì)節(jié)點(diǎn)中記錄的操作包括插入、刪除和更新記錄,其中更新記
錄可分解為刪除記錄和插入記錄兩部分,因此本實(shí)施例僅以插入和更新記錄進(jìn)行說明。 其中步驟102中,節(jié)點(diǎn)IO進(jìn)行插入或刪除記錄操作前需進(jìn)行判斷,判斷節(jié)點(diǎn)10的
空間是否符合插入或刪除記錄的條件,例如本實(shí)施例中B樹的階數(shù)M為6,每個(gè)節(jié)點(diǎn)可容納
的記錄數(shù)為n,且滿足n{[M/2]-l < = n < = M_l},則每個(gè)節(jié)點(diǎn)可容納的記錄數(shù)的范圍為2-5個(gè),若插入1個(gè)記錄時(shí)發(fā)現(xiàn)節(jié)點(diǎn)10中已有4個(gè)記錄,則如果插入后節(jié)點(diǎn)10中有5個(gè)記 錄,則認(rèn)為節(jié)點(diǎn)10空間足夠,若節(jié)點(diǎn)10已有5個(gè)記錄,則插入后節(jié)點(diǎn)10中有6個(gè)記錄,則 認(rèn)為節(jié)點(diǎn)10空間不夠。同樣,若刪除1個(gè)記錄時(shí)發(fā)現(xiàn)節(jié)點(diǎn)10中已有3個(gè)記錄,則刪除后節(jié) 點(diǎn)10中有2個(gè)記錄,則認(rèn)為節(jié)點(diǎn)IO大于等于一半,若節(jié)點(diǎn)10已有2個(gè)記錄,則刪除后節(jié)點(diǎn) 10中有1個(gè)記錄,則認(rèn)為節(jié)點(diǎn)10空間小于一半。無論是節(jié)點(diǎn)10空間不夠進(jìn)行插入操作,還 是節(jié)點(diǎn)10空間小于一半(當(dāng)然若刪除記錄后節(jié)點(diǎn)10中的記錄不得小于2)進(jìn)行刪除操作, 都會(huì)導(dǎo)致B樹不平衡,此時(shí)需執(zhí)行步驟103。 其中步驟103中,查找父節(jié)點(diǎn)時(shí),還可能是節(jié)點(diǎn)IO只有左兄弟節(jié)點(diǎn)ll,沒有右兄 弟節(jié)點(diǎn),或只有右兄弟節(jié)點(diǎn)12沒有左兄弟節(jié)點(diǎn),此時(shí)就只獲取節(jié)點(diǎn)IO和左兄弟節(jié)點(diǎn)中的記 錄,或者只獲取節(jié)點(diǎn)IO和右兄弟節(jié)點(diǎn)中的記錄。后續(xù)計(jì)算時(shí)也只是根據(jù)2個(gè)節(jié)點(diǎn)中的記錄 進(jìn)行計(jì)算無論是節(jié)點(diǎn)10、節(jié)點(diǎn)11還是節(jié)點(diǎn)12,這3個(gè)節(jié)點(diǎn)都是作為待更新節(jié)點(diǎn),在后續(xù)步 驟中待更新節(jié)點(diǎn)將被新節(jié)點(diǎn)代替。 其中步驟104中,內(nèi)存空間ap01d用于存儲(chǔ)節(jié)點(diǎn)10、節(jié)點(diǎn)11和節(jié)點(diǎn)12中的全部記 錄,本實(shí)施例中本步驟是為各節(jié)點(diǎn)中的記錄分別分配內(nèi)存指針,當(dāng)然也可以不為各節(jié)點(diǎn)中 的記錄分別分配內(nèi)存指針。 其中步驟105中,本實(shí)施例中每個(gè)記錄的大小為4Bytes,3個(gè)節(jié)點(diǎn)中總共包括 12個(gè)記錄則總的記錄大小為48Bytes,加上插入的1個(gè)記錄,13個(gè)記錄總的記錄大小為 52Bytes。同樣12個(gè)記錄總的記錄大小為48Bytes,刪除1個(gè)記錄,11個(gè)記錄總的記錄大小 為44Bytes本實(shí)施例中,無論是3個(gè)節(jié)點(diǎn)中總共包括的12個(gè)記錄,加上1個(gè)記錄后的13個(gè) 記錄,還是刪除一個(gè)記錄后的11個(gè)記錄,都是作為待重新分配的記錄。
其中步驟106中,根據(jù)步驟105的計(jì)算結(jié)果52Bytes以及單個(gè)節(jié)點(diǎn)容納記錄數(shù)為 2-5個(gè)對(duì)應(yīng)的記錄的大小8-20Bytes,重新計(jì)算需要3個(gè)新節(jié)點(diǎn),每個(gè)新節(jié)點(diǎn)能容納的記錄 數(shù)量非別為4個(gè)、5個(gè)、4個(gè),或5個(gè)、3個(gè)、5個(gè)。同樣根據(jù)步驟105的計(jì)算結(jié)果44Bytes,以 及單個(gè)節(jié)點(diǎn)容納記錄數(shù)為2-5個(gè)對(duì)應(yīng)的記錄的大小8-20Bytes,重新計(jì)算需要3個(gè)新節(jié)點(diǎn), 每個(gè)新節(jié)點(diǎn)能容納的記錄數(shù)量分別為4個(gè)、4個(gè)、3個(gè),或5個(gè)、3個(gè)、3個(gè)。
其中步驟107中,新內(nèi)存空間apcell最多可容納6個(gè)記錄,即大小為24Bytes。根 據(jù)步驟106計(jì)算的新節(jié)點(diǎn)數(shù),和每個(gè)新節(jié)點(diǎn)能容納的記錄數(shù)量,分次將步驟105中得到的待 重新分配的記錄,按生成各新節(jié)點(diǎn)所需拷貝到新內(nèi)存空間即cell中、然后再由新內(nèi)存空間 即cell中將生成新節(jié)點(diǎn)所需的記錄導(dǎo)入到內(nèi)存空間即01d中,并通過內(nèi)存指針即Old[O], 即01d[l],即01d[2]進(jìn)行標(biāo)記,如內(nèi)存指針即Old[O]所標(biāo)記的內(nèi)存空間中的記錄用于生成 新節(jié)點(diǎn)13。插入記錄R13之前如圖3所示的索引樹包括節(jié)點(diǎn)11(包括R2、R5、R6、R7、R8)、 節(jié)點(diǎn)10 (包括R12、R14、R15、R16、R19)和節(jié)點(diǎn)12 (包括R20和R21)總共有12個(gè)記錄,即記 錄R2、R5、R6、R7、R8、R12、R14、R15、R16、R19、R20和R21,節(jié)點(diǎn)11、節(jié)點(diǎn)10和節(jié)點(diǎn)12共有 一個(gè)父節(jié)點(diǎn)100、生成的新索引樹父節(jié)點(diǎn)100下需要3個(gè)新節(jié)點(diǎn),新節(jié)點(diǎn)13、新節(jié)點(diǎn)14和新 節(jié)點(diǎn)15能容納的記錄數(shù)量分別為4個(gè)、5個(gè)、4個(gè),生成新索引樹示意圖如圖4所示。將內(nèi) 存空間即01d中的記錄R2、 R5、 R6、 R7拷貝到新內(nèi)存空間apcell中,將新內(nèi)存空間apcell 中的記錄R2、 R5、 R6、 R7,導(dǎo)入到內(nèi)存空間ap01d中的記錄R2、 R5、 R6、 R7所在位置,并以內(nèi) 存指針即Old[O]標(biāo)識(shí)作為生成節(jié)點(diǎn)13的記錄。將內(nèi)存空間即01d中的記錄R8、R12、R14、 R15、R16拷貝到新內(nèi)存空間即ce11中,使得此時(shí)的新內(nèi)存空間apcell中的記錄有R8、R12、R14、R15、R16,再將其中的R8、R12、R14、R15以及插入記錄R13導(dǎo)入到內(nèi)存空間即01d中的 記錄R8、 R12、 R14、 R15、 R16所在位置,并以內(nèi)存指針即Old[l]標(biāo)識(shí)作為生成節(jié)點(diǎn)14的記 錄。將內(nèi)存空間ap01d中的記錄R19、R20和R21拷貝到新內(nèi)存空間apcell中,使得此時(shí)的 新內(nèi)存空間即cell中的記錄有R16、 R19、 R20和R21,將記錄R16、 R19、 R20導(dǎo)入到內(nèi)存空 間即01d中的記錄R19、 R20和R21的位置,將記錄R21導(dǎo)入到內(nèi)存空間即01d中的一個(gè)其 它位置,并以內(nèi)存指針即01d[2]標(biāo)識(shí)作為生成節(jié)點(diǎn)15的記錄。 刪除操作時(shí)類似,例如節(jié)點(diǎn)11 (包括R2、 R5、 R6、 R7、 R8)、節(jié)點(diǎn)IO(包括R12、 R14) 和節(jié)電12 (包括R15、 R16、 R19、 R20和R21) , 3個(gè)節(jié)點(diǎn)共12個(gè)記錄,分別為R2、 R5、 R6、 R7、 R8、 R12、 R14、 R15、 R16、 R19、 R20和R21,重新計(jì)算需要3個(gè)新節(jié)點(diǎn),新節(jié)點(diǎn)13、新節(jié)點(diǎn)14和 新節(jié)點(diǎn)15能容納的記錄數(shù)量非別為4個(gè)、4個(gè)、3個(gè),刪除記錄R12,將記錄R2、R5、R6、R7由 內(nèi)存空間ap01d拷貝到新內(nèi)存空間apcell中,由新內(nèi)存空間apcell中將R2、R5、R6、R7導(dǎo) 入到內(nèi)存空間即01d R2、 R5、 R6、 R7所在位置,并以內(nèi)存指針即Old[O]標(biāo)識(shí)作為生成節(jié)點(diǎn) 13的記錄,將記錄R8、R14、R15、R16由內(nèi)存空間ap01d拷貝到新內(nèi)存空間寧el1中,由新 內(nèi)存空間apcell中將R8、 R14、 R15、 R16導(dǎo)入到內(nèi)存空間即01d R8、 R12、 R14、 R15所在位 置,并以內(nèi)存指針apOld[l]標(biāo)識(shí)作為生成節(jié)點(diǎn)14的記錄。后續(xù)步驟與插入操作類似,此處 不再贅述。 本實(shí)施例的原則是,將由獲取的總共12個(gè)記錄,R2、R5、R6、R8、R9、R12、R14、R15、 R16、 R19、 R20禾口 R21載入到內(nèi)存空間ap01d中,把內(nèi)存空間ap01d中的記錄拷貝到內(nèi)存空 間apcell中,內(nèi)存空間即cell中最多可容納6(本實(shí)施例中的M值)個(gè)記錄。以插入記錄 為例,對(duì)于新節(jié)點(diǎn)14中需包括待插入記錄R13,則把內(nèi)存空間即01d中的記錄拷貝到內(nèi)存空 間apcell后,內(nèi)存空間apcell中包括除待插入記錄R13之外的生成新節(jié)點(diǎn)14所需的記錄 R8、 R12、 R14、 R15,將存于內(nèi)存空間apcell中的生成新節(jié)點(diǎn)所需的記錄R8、 R12、 R14、 R15, 以及待插入記錄R13導(dǎo)入到內(nèi)存空間即01d中,并進(jìn)行標(biāo)記用于生成新節(jié)點(diǎn)14。
生成新索引樹需要由原來的節(jié)點(diǎn)10、節(jié)點(diǎn)11、節(jié)點(diǎn)12,增加新節(jié)點(diǎn)數(shù)量變?yōu)楣?jié)點(diǎn) 23、節(jié)點(diǎn)24、節(jié)點(diǎn)25、節(jié)點(diǎn)25的示意圖如圖5所示,生成新索引樹需要由原來的節(jié)點(diǎn)10、節(jié) 點(diǎn)11、節(jié)點(diǎn)12,減少新節(jié)點(diǎn)數(shù)量新節(jié)點(diǎn)數(shù)量變?yōu)楣?jié)點(diǎn)33、節(jié)點(diǎn)34的示意圖如圖6所示(本 示意圖中B樹的階數(shù)為7)。 以插入記錄為例,對(duì)于新節(jié)點(diǎn)13、 15中不需包括待插入記錄,則進(jìn)行記錄拷貝后 內(nèi)存空間apcell包括生成新節(jié)點(diǎn)所需的全部記錄,將存于內(nèi)存空間即cel1中生成新節(jié)點(diǎn) 所需的全部記錄導(dǎo)入到內(nèi)存空間ap01d中,并進(jìn)行標(biāo)記用于生成新節(jié)點(diǎn)。刪除記錄對(duì)于新 節(jié)點(diǎn)13、14、15類同。 因?yàn)樯尚鹿?jié)點(diǎn)的內(nèi)存空間是重利用存儲(chǔ)原有記錄的內(nèi)存空間即01d,所以從內(nèi) 存空間即01d中把需要的數(shù)據(jù)拷貝到apcell []中(數(shù)據(jù)不會(huì)多于一個(gè)記錄的大小),然后 再從apcell []中把數(shù)據(jù)導(dǎo)入到內(nèi)存空間即01d并標(biāo)識(shí),作為存儲(chǔ)生成新節(jié)點(diǎn)的記錄的內(nèi) 存空間,如果原標(biāo)識(shí)不夠就重新分配新標(biāo)識(shí)如即01d[3],如果原標(biāo)識(shí)如即01d[2]多余就釋 放。 本步驟中生成將記錄重新分配到新節(jié)點(diǎn)的方法,不限于之前的步驟,具體而言,節(jié) 點(diǎn)13包括記錄R2 、 R5 、 R6 、 R8 、 R9 ,若插入記錄R7則會(huì)導(dǎo)致B樹不平衡,則將R2 、 R5 、 R6 、 R8 、 R9和R7作為待重新分配的記錄,根據(jù)本步驟中的方法直接重新分配到新節(jié)點(diǎn),若刪除記錄R2與前述的刪除方法類同,此處不再贅述。 其中步驟108中,以分配的內(nèi)存指針即01d
、即01d[1]和即01d[2]將內(nèi)存空間
即01d中的記錄分配到新節(jié)點(diǎn)13、新節(jié)點(diǎn)14、新節(jié)點(diǎn)15中,并以新節(jié)點(diǎn)13、新節(jié)點(diǎn)14、新節(jié)
點(diǎn)15代替待更新節(jié)點(diǎn)(節(jié)點(diǎn)10、節(jié)點(diǎn)11、節(jié)點(diǎn)12)生成新的平衡索引樹。 本發(fā)明提供的第二實(shí)施例是一種數(shù)據(jù)庫的B樹索引的裝置,其結(jié)構(gòu)如圖7所示,包
括 第一獲取模塊201 :用于對(duì)索引樹一個(gè)節(jié)點(diǎn)進(jìn)行插入或刪除記錄操作前確定會(huì)導(dǎo) 致索引樹不平衡,則獲取待更新節(jié)點(diǎn)中所有記錄,待更新節(jié)點(diǎn)為進(jìn)行操作的節(jié)點(diǎn)和其相鄰 的兄弟節(jié)點(diǎn); 第一計(jì)算模塊202 :用于以獲取的記錄和待插入的記錄作為待重新分配的記錄, 或以除待刪除的記錄之外的獲取的記錄作為待重新分配的記錄,計(jì)算待重新分配的記錄的 大小總和; 第二計(jì)算模塊203 :用于根據(jù)單個(gè)節(jié)點(diǎn)容納記錄的大小和待重新分配的記錄的大
小總和,重新計(jì)算生成新的平衡索引樹所需新節(jié)點(diǎn)的數(shù)量和各新節(jié)點(diǎn)容納的記錄數(shù)量; 索引樹生成模塊204 :用于根據(jù)新節(jié)點(diǎn)的數(shù)量和各新節(jié)點(diǎn)容納的記錄數(shù)量將待重
新分配的記錄分配到新節(jié)點(diǎn)中,并以新節(jié)點(diǎn)代替待更新節(jié)點(diǎn)生成新的平衡索引樹。 進(jìn)一步,第一獲取模塊201 :還用于對(duì)階數(shù)為M的索引樹節(jié)點(diǎn)進(jìn)行插入記錄操作前
進(jìn)行預(yù)判斷,若該節(jié)點(diǎn)中的記錄數(shù)量與待插入記錄的數(shù)量之和大于等于M,則導(dǎo)致索引樹不
平衡;或 對(duì)階數(shù)為M的索引樹節(jié)點(diǎn)進(jìn)行刪除記錄操作前進(jìn)行預(yù)判斷,若該節(jié)點(diǎn)中除待刪除
的記錄之外的記錄數(shù)量小于M/2的整數(shù)部分減1且小于2個(gè),則導(dǎo)致索引樹不平衡。 進(jìn)一步,索引樹生成模塊204 :還用于將獲取的記錄載入到第一內(nèi)存空間中,把第
一內(nèi)存空間中的記錄拷貝到第二內(nèi)存空間,第二內(nèi)存空間最多可容納M個(gè)記錄; 若新節(jié)點(diǎn)中需包括待插入記錄,則記錄拷貝后第二內(nèi)存空間中包括除待插入記錄
之外的生成新節(jié)點(diǎn)所需的記錄,將存于第二內(nèi)存空間中生成新節(jié)點(diǎn)所需的記錄以及待插入
記錄導(dǎo)入到第一內(nèi)存空間中,并進(jìn)行標(biāo)記用于生成新節(jié)點(diǎn); 若新節(jié)點(diǎn)中不需包括待插入記錄,則進(jìn)行記錄拷貝后第二內(nèi)存空間包括生成新節(jié) 點(diǎn)所需的全部記錄,將存于第二內(nèi)存空間生成新節(jié)點(diǎn)所需的全部記錄導(dǎo)入到第一內(nèi)存空間 中,并進(jìn)行標(biāo)記用于生成新節(jié)點(diǎn)。 進(jìn)一步,還包括,操作執(zhí)行模塊205 :用于對(duì)索引樹節(jié)點(diǎn)進(jìn)行插入或刪除記錄操作 前確定不會(huì)導(dǎo)致索引樹不平衡,則進(jìn)行插入或刪除記錄操作。 本發(fā)明提供的第三實(shí)施例是一種數(shù)據(jù)庫的B樹索引的裝置,其結(jié)構(gòu)如圖8所示,包 括 第二獲取模塊301 :用于對(duì)階數(shù)為M的索引樹一個(gè)節(jié)點(diǎn)進(jìn)行插入或刪除記錄操作 前確定會(huì)導(dǎo)致索引樹不平衡,則獲取待更新節(jié)點(diǎn)中所有記錄,待更新節(jié)點(diǎn)為進(jìn)行操作的節(jié) 點(diǎn)和其相鄰的兄弟節(jié)點(diǎn); 記錄拷貝模塊302 :用于將獲取的記錄載入到第一內(nèi)存空間中,把第一內(nèi)存空間 中的記錄拷貝到第二內(nèi)存空間,第二內(nèi)存空間最多可容納M個(gè)記錄; 若新節(jié)點(diǎn)中需包括待插入記錄,則記錄拷貝后第二內(nèi)存空間中包括除待插入記錄
10之外的生成新節(jié)點(diǎn)所需的記錄,將存于第二內(nèi)存空間中生成新節(jié)點(diǎn)所需的記錄以及待插入 記錄導(dǎo)入到第一內(nèi)存空間中,并進(jìn)行標(biāo)記用于生成新節(jié)點(diǎn),以新節(jié)點(diǎn)代替待更新節(jié)點(diǎn)生成 新的平衡索引樹; 若新節(jié)點(diǎn)中不需包括待插入記錄,則進(jìn)行記錄拷貝后第二內(nèi)存空間包括新節(jié)點(diǎn)中 的全部記錄,將存于第二內(nèi)存空間的新節(jié)點(diǎn)中的全部記錄導(dǎo)入到第一內(nèi)存空間中,并進(jìn)行 標(biāo)記用于生成新節(jié)點(diǎn),以新節(jié)點(diǎn)代替待更新節(jié)點(diǎn)生成新的平衡索引樹。 顯然,本領(lǐng)域的技術(shù)人員可以對(duì)本發(fā)明進(jìn)行各種改動(dòng)和變型而不脫離本發(fā)明的精 神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍 之內(nèi),則本發(fā)明也意圖包含這些改動(dòng)和變型在內(nèi)。
權(quán)利要求
一種數(shù)據(jù)庫的B樹索引的生成方法,其特征在于,包括對(duì)索引樹一個(gè)節(jié)點(diǎn)進(jìn)行插入或刪除記錄操作前確定會(huì)導(dǎo)致索引樹不平衡,則獲取待更新節(jié)點(diǎn)中所有記錄,待更新節(jié)點(diǎn)為進(jìn)行操作的節(jié)點(diǎn)和其相鄰的兄弟節(jié)點(diǎn);以獲取的記錄和待插入的記錄作為待重新分配的記錄,或以除待刪除的記錄之外的獲取的記錄作為待重新分配的記錄,計(jì)算待重新分配的記錄的大小總和;根據(jù)單個(gè)節(jié)點(diǎn)容納記錄的大小和待重新分配的記錄的大小總和,重新計(jì)算生成新的平衡索引樹所需新節(jié)點(diǎn)的數(shù)量和各新節(jié)點(diǎn)容納的記錄數(shù)量;根據(jù)新節(jié)點(diǎn)的數(shù)量和各新節(jié)點(diǎn)容納的記錄數(shù)量將待重新分配的記錄分配到新節(jié)點(diǎn)中,并以新節(jié)點(diǎn)代替待更新節(jié)點(diǎn)生成新的平衡索引樹。
2. 如權(quán)利要求1所述的方法,其特征在于,對(duì)索引樹一個(gè)節(jié)點(diǎn)進(jìn)行插入或刪除記錄操 作前確定會(huì)導(dǎo)致索引樹不平衡包括對(duì)階數(shù)為M的索引樹節(jié)點(diǎn)進(jìn)行插入記錄操作前進(jìn)行預(yù)判斷,若該節(jié)點(diǎn)中的記錄數(shù)量與 待插入記錄的數(shù)量之和大于等于M,則導(dǎo)致索引樹不平衡;或?qū)﹄A數(shù)為M的索引樹節(jié)點(diǎn)進(jìn)行刪除記錄操作前進(jìn)行預(yù)判斷,若該節(jié)點(diǎn)中除待刪除的記 錄之外的記錄數(shù)量小于M/2的整數(shù)部分減1且小于2個(gè),則導(dǎo)致索引樹不平衡。
3. 如權(quán)利要求2所述的方法,其特征在于,將待重新分配的記錄分配到新節(jié)點(diǎn)中具體為將獲取的記錄載入到第一內(nèi)存空間中,把第一內(nèi)存空間中的記錄拷貝到第二內(nèi)存空 間,第二內(nèi)存空間最多可容納M個(gè)記錄;若新節(jié)點(diǎn)中需包括待插入記錄,則記錄拷貝后第二內(nèi)存空間中包括除待插入記錄之外 的生成新節(jié)點(diǎn)所需的記錄,將存于第二內(nèi)存空間中生成新節(jié)點(diǎn)所需的記錄以及待插入記錄 導(dǎo)入到第一內(nèi)存空間中,并進(jìn)行標(biāo)記用于生成新節(jié)點(diǎn);若新節(jié)點(diǎn)中不需包括待插入記錄,則進(jìn)行記錄拷貝后第二內(nèi)存空間包括生成新節(jié)點(diǎn)所 需的全部記錄,將存于第二內(nèi)存空間生成新節(jié)點(diǎn)所需的全部記錄導(dǎo)入到第一內(nèi)存空間中, 并進(jìn)行標(biāo)記用于生成新節(jié)點(diǎn)。
4. 如權(quán)利要求1所述的方法,其特征在于,對(duì)索引樹節(jié)點(diǎn)進(jìn)行插入或刪除記錄操作前 確定不會(huì)導(dǎo)致索引樹不平衡,則進(jìn)行插入或刪除記錄操作。
5. 如權(quán)利要求1所述的方法,其特征在于,相鄰的兄弟節(jié)點(diǎn)為左兄弟節(jié)點(diǎn)和右兄弟節(jié) 點(diǎn),或相鄰的兄弟節(jié)點(diǎn)為左兄弟節(jié)點(diǎn),或相鄰的兄弟節(jié)點(diǎn)為右兄弟節(jié)點(diǎn)。
6. —種數(shù)據(jù)庫的B樹索引的生成方法,其特征在于,包括對(duì)階數(shù)為M的索引樹一個(gè)節(jié)點(diǎn)進(jìn)行插入或刪除記錄操作前確定會(huì)導(dǎo)致索引樹不平衡, 則獲取待更新節(jié)點(diǎn)中所有記錄,待更新節(jié)點(diǎn)為進(jìn)行操作的節(jié)點(diǎn)和其相鄰的兄弟節(jié)點(diǎn);將獲取的記錄載入到第一內(nèi)存空間中,把第一內(nèi)存空間中的記錄拷貝到第二內(nèi)存空 間,第二內(nèi)存空間最多可容納M個(gè)記錄;若生成新的平衡索引樹所需的新節(jié)點(diǎn)中需包括待插入記錄,則記錄拷貝后第二內(nèi)存空 間中包括除待插入記錄之外的生成新節(jié)點(diǎn)所需的記錄,將存于第二內(nèi)存空間中生成新節(jié)點(diǎn) 所需的記錄以及待插入記錄導(dǎo)入到第一內(nèi)存空間中,并進(jìn)行標(biāo)記用于生成新節(jié)點(diǎn),以新節(jié) 點(diǎn)代替待更新節(jié)點(diǎn)生成新的平衡索引樹;若新節(jié)點(diǎn)中不需包括待插入記錄,則進(jìn)行記錄拷貝后第二內(nèi)存空間包括生成新節(jié)點(diǎn)所需的全部記錄,將存于第二內(nèi)存空間生成新節(jié)點(diǎn)所需的全部記錄導(dǎo)入到第一內(nèi)存空間中, 并進(jìn)行標(biāo)記用于生成新節(jié)點(diǎn),以新節(jié)點(diǎn)代替待更新節(jié)點(diǎn)生成新的平衡索引樹。
7. —種數(shù)據(jù)庫的B樹索引的裝置,其特征在于,包括第一獲取模塊用于對(duì)索引樹一個(gè)節(jié)點(diǎn)進(jìn)行插入或刪除記錄操作前確定會(huì)導(dǎo)致索引樹 不平衡,則獲取待更新節(jié)點(diǎn)中所有記錄,待更新節(jié)點(diǎn)為進(jìn)行操作的節(jié)點(diǎn)和其相鄰的兄弟節(jié) 點(diǎn);第一計(jì)算模塊用于以獲取的記錄和待插入的記錄作為待重新分配的記錄,或以除待 刪除的記錄之外的獲取的記錄作為待重新分配的記錄,計(jì)算待重新分配的記錄的大小總 和;第二計(jì)算模塊用于根據(jù)單個(gè)節(jié)點(diǎn)容納記錄的大小和待重新分配的記錄的大小總和, 重新計(jì)算生成新的平衡索引樹所需新節(jié)點(diǎn)的數(shù)量和各新節(jié)點(diǎn)容納的記錄數(shù)量;索引樹生成模塊用于根據(jù)新節(jié)點(diǎn)的數(shù)量和各新節(jié)點(diǎn)容納的記錄數(shù)量將待重新分配的 記錄分配到新節(jié)點(diǎn)中,并以新節(jié)點(diǎn)代替待更新節(jié)點(diǎn)生成新的平衡索引樹。
8. 如權(quán)利要求7所述的裝置,其特征在于,第一獲取模塊還用于對(duì)階數(shù)為M的索引樹 節(jié)點(diǎn)進(jìn)行插入記錄操作前進(jìn)行預(yù)判斷,若該節(jié)點(diǎn)中的記錄數(shù)量與待插入記錄的數(shù)量之和大 于等于M,則導(dǎo)致索引樹不平衡;或?qū)﹄A數(shù)為M的索引樹節(jié)點(diǎn)進(jìn)行刪除記錄操作前進(jìn)行預(yù)判斷,若該節(jié)點(diǎn)中除待刪除的記 錄之外的記錄數(shù)量小于M/2的整數(shù)部分減1且小于2個(gè),則導(dǎo)致索引樹不平衡。
9. 如權(quán)利要求8所述的裝置,其特征在于,索引樹生成模塊還用于將獲取的記錄載入到第一內(nèi)存空間中,把第一內(nèi)存空間中的記錄拷貝到第二內(nèi)存空間,第二內(nèi)存空間最多可容納M個(gè)記錄;若新節(jié)點(diǎn)中需包括待插入記錄,則記錄拷貝后第二內(nèi)存空間中包括除待插入記錄之外 的生成新節(jié)點(diǎn)所需的記錄,將存于第二內(nèi)存空間中生成新節(jié)點(diǎn)所需的記錄以及待插入記錄導(dǎo)入到第一內(nèi)存空間中,并進(jìn)行標(biāo)記用于生成新節(jié)點(diǎn);若新節(jié)點(diǎn)中不需包括待插入記錄,則進(jìn)行記錄拷貝后第二內(nèi)存空間包括生成新節(jié)點(diǎn)所 需的全部記錄,將存于第二內(nèi)存空間生成新節(jié)點(diǎn)所需的全部記錄導(dǎo)入到第一內(nèi)存空間中, 并進(jìn)行標(biāo)記用于生成新節(jié)點(diǎn)。
10. 如權(quán)利要求7所述的裝置,其特征在于,還包括,操作執(zhí)行模塊用于對(duì)索引樹節(jié)點(diǎn)進(jìn)行插入或刪除記錄操作前確定不會(huì)導(dǎo)致索引樹不平衡,則進(jìn)行插入或刪除記錄操作。
11. 一種數(shù)據(jù)庫的B樹索引的裝置,其特征在于,包括第二獲取模塊用于對(duì)階數(shù)為M的索引樹一個(gè)節(jié)點(diǎn)進(jìn)行插入或刪除記錄操作前確定會(huì) 導(dǎo)致索引樹不平衡,則獲取待更新節(jié)點(diǎn)中所有記錄,待更新節(jié)點(diǎn)為進(jìn)行操作的節(jié)點(diǎn)和其相 鄰的兄弟節(jié)點(diǎn);記錄拷貝模塊用于將獲取的記錄載入到第一內(nèi)存空間中,把第一內(nèi)存空間中的記錄 拷貝到第二內(nèi)存空間,第二內(nèi)存空間最多可容納M個(gè)記錄;若生成新的平衡索引樹所需的新節(jié)點(diǎn)中需包括待插入記錄,則記錄拷貝后第二內(nèi)存空 間中包括除待插入記錄之外的生成新節(jié)點(diǎn)所需的記錄,將存于第二內(nèi)存空間中生成新節(jié)點(diǎn) 所需的記錄以及待插入記錄導(dǎo)入到第一內(nèi)存空間中,并進(jìn)行標(biāo)記用于生成新節(jié)點(diǎn),以新節(jié) 點(diǎn)代替待更新節(jié)點(diǎn)生成新的平衡索引樹;若新節(jié)點(diǎn)中不需包括待插入記錄,則進(jìn)行記錄拷貝后第二內(nèi)存空間包括新節(jié)點(diǎn)中的全 部記錄,將存于第二內(nèi)存空間的新節(jié)點(diǎn)中的全部記錄導(dǎo)入到第一內(nèi)存空間中,并進(jìn)行標(biāo)記 用于生成新節(jié)點(diǎn),以新節(jié)點(diǎn)代替待更新節(jié)點(diǎn)生成新的平衡索引樹。
全文摘要
為了解決現(xiàn)有B樹索引算法需要占用大量的內(nèi)存,對(duì)硬件的要求較高的問題,本發(fā)明公開了一種數(shù)據(jù)庫的B樹索引的生成方法及裝置,該方法包括對(duì)索引樹一個(gè)節(jié)點(diǎn)進(jìn)行插入或刪除記錄操作前確定會(huì)導(dǎo)致索引樹不平衡,則獲取待更新節(jié)點(diǎn)中所有記錄,以獲取的記錄并根據(jù)插入、刪除記錄得到待重新分配的記錄,計(jì)算待重新分配的記錄的大小總和,同時(shí)根據(jù)單個(gè)節(jié)點(diǎn)容納記錄的大小,重新計(jì)算生成新的平衡索引樹所需新節(jié)點(diǎn)的數(shù)量和各新節(jié)點(diǎn)容納的記錄數(shù)量,以此將待重新分配的記錄分配到新節(jié)點(diǎn)中,并生成新的平衡索引樹,由于通過重新分配的記錄的大小總和單個(gè)節(jié)點(diǎn)容納記錄的大小重新計(jì)算,并據(jù)此重新分配,不需區(qū)分插入或刪除操作,占用內(nèi)存少對(duì)硬件要求低。
文檔編號(hào)G06F17/30GK101763415SQ20091024256
公開日2010年6月30日 申請(qǐng)日期2009年12月16日 優(yōu)先權(quán)日2009年12月16日
發(fā)明者王國(guó)猛 申請(qǐng)人:北京握奇數(shù)據(jù)系統(tǒng)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1