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

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

文檔序號:6585131閱讀:266來源:國知局
專利名稱:一種數(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ù)就要遍歷整個文件,效率低下。為了克服這一缺陷,達到快速查找數(shù)據(jù)的目的, 我們在智能卡中引進了一種數(shù)據(jù)庫索引技術(shù),即B樹索引技術(shù)。 B樹索引是指把索引組織成B樹數(shù)據(jù)結(jié)構(gòu)來達到高效執(zhí)行索引的目的,B樹是一 種多路的平衡查找樹,一顆M階的B樹,需滿足下列性質(zhì)樹中每個節(jié)點至多有M棵子樹; 若根節(jié)點不是葉節(jié)點,則至少有兩棵子樹;除根之外的所有非終端節(jié)點至少有[m/2]棵子 樹;所有的非終端節(jié)點(根節(jié)點和導(dǎo)航節(jié)點)包含下列信息數(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é)點的指針,且指針A(i-l)所指子樹中所有節(jié)點的關(guān)鍵字均小于KiU = 1, 2. . . n} ,An所指子樹中所有結(jié)點的關(guān)鍵字均大于Kn,n{[M/2]-l < = n < = M_l}為關(guān)鍵字 的個數(shù)。所有的葉子節(jié)點都出現(xiàn)在同一層次上,并且不帶指針信息。如圖l所示,圖l是一 棵索引樹示意圖,包含根節(jié)點(包括記錄R18的節(jié)點),導(dǎo)航節(jié)點(如包括記錄R4、 R7、 RIO 和R15的節(jié)點)和葉節(jié)點(如包括記錄Rl、 R2和R3的節(jié)點)。其中根節(jié)點和導(dǎo)航節(jié)點中 的記錄包括關(guān)鍵字和指針,葉節(jié)點中的記錄只包括關(guān)鍵字但不包括指針。各節(jié)點中可容納 的記錄數(shù)量也為n,并也應(yīng)滿足n {[M/2] -1 < = n < = M_l}。 現(xiàn)有B樹索引算法的主要內(nèi)容包括對B樹各節(jié)點中的記錄的查詢,刪除,插入,更 新操作,對B樹的查詢操作有標準的算法實現(xiàn),而對B樹的刪除,插入,更新因為涉及到對B 樹的平衡操作,所以會根據(jù)具體的硬件和軟件環(huán)境具體實現(xiàn)?,F(xiàn)有的B樹索引算法的實現(xiàn) 為了達到快速執(zhí)行索引的目的,需要分為刪除,插入,更新(可分解為刪除和插入)操作,占 用大量的內(nèi)存對硬件的要求較高。

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


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