專利名稱:一種基于拉鏈信息的索引存儲(chǔ)管理方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)庫、信息檢索領(lǐng)域,尤其涉及一種基于拉鏈信息的索引存儲(chǔ)管理方法。
背景技術(shù):
Web的出現(xiàn)極大地推動(dòng)了數(shù)據(jù)庫系統(tǒng)的研究,同時(shí),一般信息檢索領(lǐng)域的各種技術(shù)也在Web信息檢索中獲得新生,對(duì)信息檢索、數(shù)據(jù)庫系統(tǒng)以及Web本身的研究正在以多種方式進(jìn)行融合。如何快速地從存儲(chǔ)的大量數(shù)據(jù)中找滿足用戶需求的信息已經(jīng)成為數(shù)據(jù)庫和信息檢索領(lǐng)域研究的新熱點(diǎn)。在數(shù)據(jù)庫系統(tǒng)中,通常使用索引來協(xié)助快速查詢,提高數(shù)據(jù)庫表數(shù)據(jù)訪問速度。一般來說,數(shù)據(jù)庫存儲(chǔ)的基本單位是頁,存儲(chǔ)信息的物理文件分配的磁盤空間可以從邏輯上劃分成頁,磁盤I/o操作在頁級(jí)執(zhí)行。當(dāng)為一張空表創(chuàng)建索引時(shí),數(shù)據(jù)庫系統(tǒng)將分配一個(gè)索引頁,該索引頁在插入數(shù)據(jù)前一直是空的。此頁此時(shí)既是根結(jié)點(diǎn),也是葉結(jié)點(diǎn)。當(dāng)往表中插入一行數(shù)據(jù),數(shù)據(jù)庫系統(tǒng)即向此根結(jié)點(diǎn)中插入一行索引記錄。當(dāng)根結(jié)點(diǎn)滿時(shí),數(shù)據(jù)庫系統(tǒng)大抵按以下步驟進(jìn)行分裂:1、創(chuàng)建兩個(gè)兒子結(jié)點(diǎn)。2、將原根節(jié)結(jié)中的數(shù)據(jù)近似地拆成兩半,分別寫入新的兩個(gè)兒子結(jié)點(diǎn)。3、根結(jié)點(diǎn)中加上指向兩個(gè)兒子結(jié)點(diǎn)的指針。通常狀況下,由于索引記錄僅包含索引字段值(以及4-9字節(jié)的指針),索引實(shí)體比真實(shí)的數(shù)據(jù)行要小許多,因此,索引頁相較數(shù)據(jù)頁來說要密集許多。一個(gè)索引頁可以存儲(chǔ)數(shù)量更多的索引記錄,這意味著在索引中查找時(shí),在I/o上占很大的優(yōu)勢(shì)。目前,數(shù)據(jù)庫索引的數(shù)據(jù)結(jié)構(gòu)主要是基于B-樹及其變種。B樹是一種性能很高的外存多路查找樹,具有平衡,層數(shù)較少等優(yōu)點(diǎn),適用于系統(tǒng)對(duì)大塊數(shù)據(jù)的讀寫優(yōu)化。在插入數(shù)據(jù)時(shí),B樹會(huì)對(duì)節(jié)點(diǎn)進(jìn)行檢測(cè),通過及時(shí)調(diào)整,使之達(dá)到平衡。一般來說,基于B樹的索引的物理文件組織包括B樹文件和數(shù)據(jù)文件,索引的邏輯類型包括以下兩類:1、聚集索引,表數(shù)據(jù)按照索引的順序來存儲(chǔ)。對(duì)于聚集索引,葉子結(jié)點(diǎn)即是數(shù)據(jù)頁,不再有另外單獨(dú)的數(shù)據(jù)文件。相對(duì)于非聚集索引來說,它插入數(shù)據(jù)的速度較慢,時(shí)間主要花費(fèi)在“物理存儲(chǔ)的排序”上,但查詢數(shù)據(jù)時(shí)速度較快,因?yàn)閿?shù)據(jù)都存儲(chǔ)在同一棵B樹里。2、非聚集索引,表數(shù)據(jù)存儲(chǔ)順序與索引順序無關(guān)。對(duì)于非聚集索引,葉結(jié)點(diǎn)是由索引頁組成,包含索引字段值及指向數(shù)據(jù)塊的邏輯指針。然而,目前的索引存儲(chǔ)方案也存在著一些缺陷,主要是更新索引時(shí),由于插入的數(shù)據(jù)對(duì)應(yīng)的鍵在B樹中可能已存在,這時(shí)如果直接更新物理數(shù)據(jù)文件,需要先找到該鍵對(duì)應(yīng)的數(shù)據(jù)塊在文件中的位置,然后在文件內(nèi)部追加寫入數(shù)據(jù)。但是,目前寫入文件操作只支持在文件尾部追加寫入,因此該操作需要重新排放文件內(nèi)已有的數(shù)據(jù)頁,將新加入的數(shù)據(jù)寫入恰當(dāng)?shù)奈恢?,?dǎo)致文件碎片較多,降低了數(shù)據(jù)更新和查詢的性能。而過多的文件碎片會(huì)使系統(tǒng)在讀文件的時(shí)候來回尋找,引起系統(tǒng)性能下降,嚴(yán)重的話還可能導(dǎo)致存儲(chǔ)文件的丟失。
發(fā)明內(nèi)容
為解決上述中存在的問題與缺陷,本發(fā)明提供了一種基于拉鏈信息的索引存儲(chǔ)管理方法。所述技術(shù)方案如下:一種基于拉鏈信息的索引存儲(chǔ)管理方法,所述索引的物理文件組織包括:B樹索引文件、拉鏈文件和數(shù)據(jù)文件;所述方法包括:A根據(jù)鍵值對(duì)將數(shù)據(jù)寫入數(shù)據(jù)文件;B根據(jù)寫入的數(shù)據(jù)信息構(gòu)造拉鏈信息塊;C判斷插入的數(shù)據(jù)鍵值對(duì)在B樹中是否存在,并相應(yīng)地更新B樹文件和拉鏈信息文件。本發(fā)明提供的技術(shù)方案的有益效果是:在物理文件設(shè)計(jì)上添加了拉鏈文件,在索引存儲(chǔ)的邏輯處理中,基于拉鏈信息項(xiàng)進(jìn)行數(shù)據(jù)操作,為數(shù)據(jù)的高效插入、更新和查詢提供了支持,提高了數(shù)據(jù)處理性能。
圖1是基于拉鏈信息的索引存儲(chǔ)管理方法流程圖;圖2是基于拉鏈信息的索引的存儲(chǔ)架構(gòu)圖;圖3是基于拉鏈信息的索引存儲(chǔ)管理方法的實(shí)現(xiàn)流程圖;圖4是基于拉鏈信息的索引存儲(chǔ)管理方法的查詢流程圖。
具體實(shí)施例方式為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對(duì)本發(fā)明實(shí)施方式作進(jìn)一步地詳細(xì)描述:參見圖1,為基于拉鏈信息的索引存儲(chǔ)管理方法流程,所述索引的物理文件組織包括:B樹索引文件、拉鏈文件和數(shù)據(jù)文件;所述方法包括以下步驟:步驟10根據(jù)鍵值對(duì)將數(shù)據(jù)寫入數(shù)據(jù)文件;根據(jù)新的鍵值對(duì),將數(shù)據(jù)寫入數(shù)據(jù)文件,同時(shí)記錄當(dāng)前寫入數(shù)據(jù)在數(shù)據(jù)文件中的偏移量offset、數(shù)據(jù)長(zhǎng)度datasize及數(shù)據(jù)的個(gè)數(shù)num。步驟20根據(jù)寫入的數(shù)據(jù)信息構(gòu)造拉鏈信息塊;根據(jù)數(shù)據(jù)在數(shù)據(jù)文件中的偏移量offset、數(shù)據(jù)長(zhǎng)度datasize、數(shù)據(jù)的個(gè)數(shù)num及拉鏈信息塊指針prevEntity構(gòu)造一個(gè)拉鏈信息塊。步驟30判斷插入的數(shù)據(jù)鍵值對(duì)在B樹中是否存在,并相應(yīng)地更新B樹文件和拉鏈信息文件。如果不存在,將拉鏈彳目息塊中的prevEntity設(shè)直為_1,并將拉鏈彳目息塊與入拉鏈信息文件,并將當(dāng)前拉鏈信息塊的塊號(hào)做為key-value鍵值對(duì)的value值插入B樹中。如果存在,將拉鏈信息塊的指向上一個(gè)拉鏈信息塊的指針prevEntity的值設(shè)置為已存在key的value值,并將拉鏈信息塊寫入拉鏈信息文件,同時(shí)更新key的value值為當(dāng)前拉鏈信息塊的塊號(hào)(如圖3所示)。上述B樹中的每個(gè)葉子節(jié)點(diǎn)存儲(chǔ)著拉鏈文件中某個(gè)拉鏈信息塊的塊號(hào),拉鏈文件中的每個(gè)拉鏈信息塊存儲(chǔ)著對(duì)應(yīng)的數(shù)據(jù)塊在數(shù)據(jù)文件中的位置信息,數(shù)據(jù)文件存放的是真正的數(shù)據(jù)。參見圖2,為基于拉鏈信息的索引的存儲(chǔ)架構(gòu),索引的物理文件組織包括B樹索引文件、拉鏈文件和數(shù)據(jù)文件。B樹中的每個(gè)葉子節(jié)點(diǎn)存儲(chǔ)著拉鏈文件中某個(gè)拉鏈信息塊的塊號(hào),拉鏈文件中的每個(gè)拉鏈信息塊存儲(chǔ)著對(duì)應(yīng)的數(shù)據(jù)塊在數(shù)據(jù)文件中的位置信息,包括在數(shù)據(jù)文件中的偏移量offset、數(shù)據(jù)長(zhǎng)度datasize、數(shù)據(jù)的個(gè)數(shù)num以及指向同一個(gè)鍵的上一個(gè)拉鏈快的指針,數(shù)據(jù)文件中的每個(gè)數(shù)據(jù)塊存儲(chǔ)的是真實(shí)的數(shù)據(jù)。參見圖4,是基于拉鏈信息的索引存儲(chǔ)管理方法的查詢流程,包括:步驟401根據(jù)新的key在B樹中查詢,判斷該key是否存在,如果不存在,執(zhí)行步驟407 ;如果存在,執(zhí)行步驟402。步驟402取得key對(duì)應(yīng)的拉鏈信息塊塊號(hào)值。步驟403根據(jù)拉鏈信息塊號(hào)值在拉鏈信息文件中讀取相應(yīng)的拉鏈信息塊信息。步驟404根據(jù)拉鏈信息塊中的記錄的數(shù)據(jù)文件中的偏移量off set、數(shù)據(jù)個(gè)數(shù)num、數(shù)據(jù)長(zhǎng)度datasize,讀取數(shù)據(jù)文件中的數(shù)據(jù)。步驟405判斷拉鏈信息塊中的指向上一個(gè)拉鏈信息塊的指針pervEntity是否等于-1,如果等于-1,執(zhí)行步驟407,否則,執(zhí)行步驟406。步驟406取得上一個(gè)拉鏈信息塊的指針pervEntity對(duì)應(yīng)的拉鏈信息塊號(hào)值,然后執(zhí)行步驟403。 步驟407結(jié)束本次查詢。以上所述僅為本發(fā)明的較佳實(shí)施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種基于拉鏈信息的索引存儲(chǔ)管理方法,其特征在于,所述索引的物理文件組織包括:B樹索引文件、拉鏈文件和數(shù)據(jù)文件;所述方法包括: a根據(jù)鍵值對(duì)將數(shù)據(jù)寫入數(shù)據(jù)文件; b根據(jù)寫入的數(shù)據(jù)信息構(gòu)造拉鏈信息塊; c判斷插入的數(shù)據(jù)鍵值對(duì)在B樹中是否存在,并相應(yīng)地更新B樹文件和拉鏈信息文件。
2.根據(jù)權(quán)利要求1所述的基于拉鏈信息的索引存儲(chǔ)管理方法,其特征在于,所述步驟a還包括:記錄寫入數(shù)據(jù)在數(shù)據(jù)文件中的偏移量、數(shù)據(jù)長(zhǎng)度及數(shù)據(jù)的個(gè)數(shù),并根據(jù)數(shù)據(jù)在數(shù)據(jù)文件中的偏移量、數(shù)據(jù)長(zhǎng)度及數(shù)據(jù)的個(gè)數(shù)讀取數(shù)據(jù)文件中的數(shù)據(jù)。
3.根據(jù)權(quán)利要求1所述的基于拉鏈信息的索引存儲(chǔ)管理方法,其特征在于,所述步驟c具體包括: 數(shù)據(jù)鍵值對(duì)在B樹中不存在,設(shè)置拉鏈信息塊指向上一個(gè)拉鏈信息塊的指針值,且將拉鏈信息塊寫入拉鏈信息文件,并將拉鏈信息塊的塊號(hào)作為鍵值對(duì)的值插入B樹中; 數(shù)據(jù)鍵值對(duì)在B樹中存在,將當(dāng)前拉鏈信息塊指向上一拉鏈信息塊的指針值設(shè)置為鍵值,并將拉鏈信息塊寫入拉鏈信息文件,同時(shí)更新鍵值為當(dāng)前拉鏈信息塊的塊號(hào)。
全文摘要
本發(fā)明公開了一種基于拉鏈信息的索引存儲(chǔ)管理方法,所述索引的物理文件組織包括B樹索引文件、拉鏈文件和數(shù)據(jù)文件;所述方法包括根據(jù)鍵值對(duì)將數(shù)據(jù)寫入數(shù)據(jù)文件;根據(jù)寫入的數(shù)據(jù)信息構(gòu)造拉鏈信息塊;判斷插入的數(shù)據(jù)鍵值對(duì)在B樹中是否存在,并相應(yīng)地更新B樹文件和拉鏈信息文件。本發(fā)明在物理文件設(shè)計(jì)上添加了拉鏈文件,在索引存儲(chǔ)的邏輯處理中,基于拉鏈信息項(xiàng)進(jìn)行數(shù)據(jù)操作,為數(shù)據(jù)的高效插入、更新和查詢提供了支持,提高了數(shù)據(jù)處理性能。
文檔編號(hào)G06F17/30GK103116652SQ20131007028
公開日2013年5月22日 申請(qǐng)日期2013年3月6日 優(yōu)先權(quán)日2013年3月6日
發(fā)明者陳琳, 湯汨寶, 夏冬, 王奎 申請(qǐng)人:同方知網(wǎng)(北京)技術(shù)有限公司