一種讀優(yōu)化的內(nèi)存數(shù)據(jù)庫(kù)t樹索引結(jié)構(gòu)的方法
【專利摘要】一種讀優(yōu)化的內(nèi)存數(shù)據(jù)庫(kù)T樹索引結(jié)構(gòu)的方法,構(gòu)造t-T樹的數(shù)據(jù)結(jié)構(gòu):根據(jù)已有的數(shù)據(jù),建立T樹索引結(jié)構(gòu),根據(jù)T樹結(jié)構(gòu)中節(jié)點(diǎn)的大小N,對(duì)數(shù)據(jù)進(jìn)行插入操作,并且保證節(jié)點(diǎn)內(nèi)的數(shù)據(jù)有序,如果一個(gè)節(jié)點(diǎn)內(nèi)的數(shù)據(jù)滿,還要進(jìn)行分裂操作以保證樹的平衡,在構(gòu)造t-T樹過程中,樹結(jié)構(gòu)中的內(nèi)置T樹左右子樹字段在這一階段不進(jìn)行任何操作;在已經(jīng)建立好的t-T樹中進(jìn)行數(shù)據(jù)查詢操作,查詢操作分為單值查詢和范圍查詢,本發(fā)明充分利用了T樹結(jié)構(gòu)本身所提供的高效數(shù)據(jù)訪問效率,從而在整體上提供了良好的讀性能;同時(shí),利用緩存位置敏感算法,通過減少指針的使用來提高緩存的命中率。
【專利說明】—種讀優(yōu)化的內(nèi)存數(shù)據(jù)庫(kù)T樹索引結(jié)構(gòu)的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于計(jì)算機(jī)【技術(shù)領(lǐng)域】,具體涉及一種讀優(yōu)化的內(nèi)存數(shù)據(jù)庫(kù)T樹索引結(jié)構(gòu)的方法。
【背景技術(shù)】
[0002]在數(shù)據(jù)庫(kù)系統(tǒng)中,為了加快數(shù)據(jù)的訪問速度,可以建立索引結(jié)構(gòu),索引結(jié)構(gòu)是一個(gè)或多個(gè)列(例如,employee表的姓氏(Iname)列)的值進(jìn)行排序的結(jié)構(gòu)。如果按特定職員的姓來查找他或她,則與在表中搜索所有的行相比,索引有助于更快地獲取信息。常見的磁盤數(shù)據(jù)庫(kù)索引有B樹索引,B+樹索引,T樹索引,它們的使用可以顯著的減少磁盤I/O數(shù)。隨著內(nèi)存價(jià)格的降低,內(nèi)存數(shù)據(jù)庫(kù)技術(shù)得到了廣泛的應(yīng)用。不同于磁盤數(shù)據(jù)庫(kù)系統(tǒng),內(nèi)存數(shù)據(jù)庫(kù)系統(tǒng)在數(shù)據(jù)訪問時(shí)顯著的減少或消除了磁盤1/0,提高了數(shù)據(jù)訪問的速度,原來的數(shù)據(jù)庫(kù)索引,如B樹索引,由于其節(jié)點(diǎn)中存在著大量的指針結(jié)構(gòu),空間利用率不高,Cache命中率也不高,直接引用會(huì)降低內(nèi)存數(shù)據(jù)庫(kù)系統(tǒng)的效率。針對(duì)這些問題,需要通過修改數(shù)據(jù)庫(kù)系統(tǒng)的數(shù)據(jù)索引來高效利用物理內(nèi)存空間,提高內(nèi)存數(shù)據(jù)庫(kù)系統(tǒng)的數(shù)據(jù)訪問速度。
[0003]Cache是計(jì)算機(jī)系統(tǒng)的層次存儲(chǔ)結(jié)構(gòu)中,介于中央處理器(CPU)和主存儲(chǔ)器之間的高速小容量存儲(chǔ)器。它具有速度快,容量小的特點(diǎn)。它充分利用了訪存局部性原理,用來存儲(chǔ)CPU最近訪問的內(nèi)存內(nèi)容。CPU訪問數(shù)據(jù)時(shí),先在Cache中查找,如果找到則直接傳輸?shù)紺PU中的寄存器中,這稱為命中;如果沒有找到,那么需要在內(nèi)存中查找,并且要把查找到的內(nèi)容重新寫入Cache,下次讀取時(shí)就可以避免內(nèi)存?zhèn)鬏敗T趦?nèi)存數(shù)據(jù)庫(kù)的應(yīng)用中,緩存的命中成為了數(shù)據(jù)庫(kù)效率的瓶頸,同時(shí)在大數(shù)據(jù)量的訪問模式下,存在著許多熱點(diǎn)數(shù)據(jù),可以將熱點(diǎn)數(shù)據(jù)放入Cache來加快數(shù)據(jù)訪問速度。
[0004]在小數(shù)據(jù)量的查找情況下,AVL樹由于其編程簡(jiǎn)單,而且算法效率高而被廣泛使用,但是,面對(duì)大數(shù)據(jù)量的訪問,樹的高度和Cache命中率成為限制其性能的因素,因而我們需要考慮使用其他數(shù)據(jù)結(jié)構(gòu)來替代它。
【發(fā)明內(nèi)容】
[0005]為了克服上述現(xiàn)有技術(shù)存在的缺點(diǎn),本發(fā)明的目的在于提供一種讀優(yōu)化的內(nèi)存數(shù)據(jù)庫(kù)T樹索引結(jié)構(gòu)的方法,充分利用了 T樹結(jié)構(gòu)本身所提供的高效數(shù)據(jù)訪問效率,從而在整體上提供了良好的讀性能;同時(shí),利用緩存位置敏感算法,通過減少指針的使用來提高緩存的命中率。
[0006]為了達(dá)到上述目的,本發(fā)明所采用的技術(shù)方案是:
[0007]—種讀優(yōu)化的內(nèi)存數(shù)據(jù)庫(kù)T樹索引結(jié)構(gòu)的方法,包括以下步驟:
[0008]第一步,構(gòu)造t-Τ樹的數(shù)據(jù)結(jié)構(gòu):根據(jù)已有的數(shù)據(jù),建立T樹索引結(jié)構(gòu),根據(jù)T樹結(jié)構(gòu)中節(jié)點(diǎn)的大小N,對(duì)數(shù)據(jù)進(jìn)行插入操作,找到第一個(gè)不大于當(dāng)前值的數(shù)據(jù)的位置,執(zhí)行插入,有時(shí)需要移動(dòng)某些數(shù)據(jù)的位置;如果一個(gè)節(jié)點(diǎn)內(nèi)的數(shù)據(jù)滿,需新分配節(jié)點(diǎn)來存儲(chǔ)數(shù)據(jù),同時(shí),如果當(dāng)前節(jié)點(diǎn)的左右子樹高度差大于等于2,需做樹的旋轉(zhuǎn)操作,以保持樹的平衡,在構(gòu)造t-τ樹過程中,樹結(jié)構(gòu)中的內(nèi)置T樹左右子樹字段在這一階段不進(jìn)行任何操作;
[0009]第二步,在已經(jīng)建立好的t-T樹中進(jìn)行數(shù)據(jù)查詢操作,查詢操作分為單值查詢和范圍查詢,
[0010]在單值查詢中,首先在內(nèi)置T樹中查詢,如果內(nèi)置T樹為空,那么在外層T樹中查詢,把需要查找的值和節(jié)點(diǎn)內(nèi)的最大值、最小值進(jìn)行比較,若小于最小值,那么在這個(gè)節(jié)點(diǎn)的左子樹中查找;若大于最大值,那么在這個(gè)節(jié)點(diǎn)的右子樹中查找,同時(shí)把查找到的結(jié)果插入內(nèi)置T樹中;若內(nèi)置T樹不為空,那么在內(nèi)置T樹的節(jié)點(diǎn)內(nèi)查詢,在一個(gè)節(jié)點(diǎn)內(nèi),使用二分查找算法來加速查找過程,若在節(jié)點(diǎn)內(nèi)找到,返回查找結(jié)果,若沒有找到,返回外層T樹,在外層T樹中進(jìn)行查找,將查找到的節(jié)點(diǎn)插入內(nèi)置T樹中,如果節(jié)點(diǎn)的插入導(dǎo)致了內(nèi)置T樹的AVL樹平衡條件被破壞,那么需要進(jìn)行旋轉(zhuǎn)操作來使樹結(jié)構(gòu)保持AVL特性;
[0011]在范圍查詢中,進(jìn)行等價(jià)轉(zhuǎn)換,轉(zhuǎn)換成單值查詢,當(dāng)找到第一個(gè)滿足要求的節(jié)點(diǎn)后,再進(jìn)行遞歸的調(diào)用來訪問節(jié)點(diǎn)的子樹,或者回溯訪問節(jié)點(diǎn)的父節(jié)點(diǎn),這樣就可以遍歷所有滿足范圍查詢的節(jié)點(diǎn)。
[0012]在大數(shù)量訪問中,被經(jīng)常訪問到的部分?jǐn)?shù)據(jù),通過在T樹中內(nèi)置T樹,來提供一種緩沖的效果,減少了數(shù)據(jù)訪問時(shí)間。
[0013]本發(fā)明的有益效果是:
[0014]由于本發(fā)明引入了一種在T樹中嵌套的T樹結(jié)構(gòu),在面對(duì)大數(shù)據(jù)量的有熱點(diǎn)數(shù)據(jù)的訪問中,提供了很好的數(shù)據(jù)緩沖,有效的應(yīng)對(duì)了大數(shù)據(jù)量的單值查詢和范圍查詢,算法時(shí)間復(fù)雜度從0(LogNM)降到了 0(LogNm),其中m為熱點(diǎn)數(shù)據(jù)總量,N為節(jié)點(diǎn)內(nèi)的關(guān)鍵字個(gè)數(shù),同時(shí),面對(duì)最壞情況下的訪問,時(shí)間復(fù)雜度回歸到O (LogNM),其中M為樹結(jié)構(gòu)中關(guān)鍵字總數(shù),算法中使用Cache位置敏感技術(shù),使Cache命中率得到提升,從而減少了數(shù)據(jù)訪問延遲。針對(duì)修改操作,可以利用現(xiàn)有的算法進(jìn)行,不需要任何修改,提高了算法的可操作性。
【專利附圖】
【附圖說明】:
[0015]附圖是本發(fā)明的t-τ樹的結(jié)構(gòu)圖。
【具體實(shí)施方式】:
[0016]下面結(jié)合附圖對(duì)本發(fā)明做詳細(xì)面描述。
[0017]一種讀優(yōu)化的內(nèi)存數(shù)據(jù)庫(kù)T樹索引結(jié)構(gòu),包括以下方法:
[0018]第一步,參照附圖,構(gòu)造t-T樹的數(shù)據(jù)結(jié)構(gòu):根據(jù)已有的數(shù)據(jù),類似于普通的T樹索弓I建立過程,建立T樹索引結(jié)構(gòu),根據(jù)T樹結(jié)構(gòu)中節(jié)點(diǎn)的大小N,對(duì)數(shù)據(jù)進(jìn)行插入操作,找到第一個(gè)不大于當(dāng)前值的數(shù)據(jù)的位置,執(zhí)行插入,有時(shí)需要移動(dòng)某些數(shù)據(jù)的位置;如果一個(gè)節(jié)點(diǎn)內(nèi)的數(shù)據(jù)滿,需新分配節(jié)點(diǎn)來存儲(chǔ)數(shù)據(jù),同時(shí),如果當(dāng)前節(jié)點(diǎn)的左右子樹高度差大于等于2,需做樹的旋轉(zhuǎn)操作,以保持樹的平衡,由于T樹中只有左右兩個(gè)指針域,所以平衡操作相比于B樹結(jié)構(gòu)要簡(jiǎn)單,在構(gòu)造t-T樹過程中,樹結(jié)構(gòu)中的內(nèi)置T樹的左右子樹字段在這一階段不進(jìn)行任何操作;
[0019]第二步,在已經(jīng)建立好的t-T樹中進(jìn)行數(shù)據(jù)查詢操作,查詢操作分為單值查詢和范圍查詢,
[0020]在單值查詢中,首先在內(nèi)置T樹中查詢,如果內(nèi)置T樹為空,那么在外層T樹中查詢,把需要查找的值和節(jié)點(diǎn)內(nèi)的最大值、最小值進(jìn)行比較,若小于最小值,那么在這個(gè)節(jié)點(diǎn)的左子樹中查找;若大于最大值,那么在這個(gè)節(jié)點(diǎn)的右子樹中查找,同時(shí)把查找到的結(jié)果插入內(nèi)置T樹中;若內(nèi)置T樹不為空,那么在內(nèi)置T樹的節(jié)點(diǎn)內(nèi)查詢,在一個(gè)節(jié)點(diǎn)內(nèi),使用二分查找算法來加速查找過程,若在節(jié)點(diǎn)內(nèi)找到,返回查找結(jié)果,若沒有找到,返回外層T樹,在外層T樹中進(jìn)行查找,將查找到的節(jié)點(diǎn)插入內(nèi)置T樹中,如果節(jié)點(diǎn)的插入導(dǎo)致了內(nèi)置T樹的AVL樹平衡條件被破壞,那么需要進(jìn)行旋轉(zhuǎn)操作來使樹結(jié)構(gòu)保持AVL特性;
[0021]在范圍查詢中,進(jìn)行等價(jià)轉(zhuǎn)換,轉(zhuǎn)換成單值查詢,當(dāng)找到第一個(gè)滿足要求的節(jié)點(diǎn)后,再進(jìn)行遞歸的調(diào)用來訪問節(jié)點(diǎn)的子樹,或者回溯訪問節(jié)點(diǎn)的父節(jié)點(diǎn),這樣就可以遍歷所有滿足范圍查詢的節(jié)點(diǎn)。
[0022]在大數(shù)量訪問中,被經(jīng)常訪問到的部分?jǐn)?shù)據(jù),通過在T樹中內(nèi)置T樹,來提供一種緩沖的效果,減少了數(shù)據(jù)訪問時(shí)間。
【權(quán)利要求】
1.一種讀優(yōu)化的內(nèi)存數(shù)據(jù)庫(kù)T樹索引結(jié)構(gòu)的方法,其特征在于,包括以下步驟: 第一步,構(gòu)造t-τ樹的數(shù)據(jù)結(jié)構(gòu):根據(jù)已有的數(shù)據(jù),建立T樹索引結(jié)構(gòu),根據(jù)T樹結(jié)構(gòu)中節(jié)點(diǎn)的大小N,對(duì)數(shù)據(jù)進(jìn)行插入操作,找到第一個(gè)不大于當(dāng)前值的數(shù)據(jù)的位置,執(zhí)行插入,有時(shí)需要移動(dòng)某些數(shù)據(jù)的位置;如果一個(gè)節(jié)點(diǎn)內(nèi)的數(shù)據(jù)滿,需新分配節(jié)點(diǎn)來存儲(chǔ)數(shù)據(jù),同時(shí),如果當(dāng)前節(jié)點(diǎn)的左右子樹高度差大于等于2,需做樹的旋轉(zhuǎn)操作,以保持樹的平衡,在構(gòu)造t-T樹過程中,樹結(jié)構(gòu)中的內(nèi)置T樹左右子樹字段在這一階段不進(jìn)行任何操作; 第二步,在已經(jīng)建立好的t - T樹中進(jìn)行數(shù)據(jù)查詢操作,查詢操作分為單值查詢和范圍查詢, 在單值查詢中,首先在內(nèi)置T樹中查詢,如果內(nèi)置T樹為空,那么在外層T樹中查詢,把需要查找的值和節(jié)點(diǎn)內(nèi)的最大值、最小值進(jìn)行比較,若小于最小值,那么在這個(gè)節(jié)點(diǎn)的左子樹中查找;若大于最大值,那么在這個(gè)節(jié)點(diǎn)的右子樹中查找,同時(shí)把查找到的結(jié)果插入內(nèi)置T樹中;若內(nèi)置T樹不為空,那么在內(nèi)置T樹的節(jié)點(diǎn)內(nèi)查詢,在一個(gè)節(jié)點(diǎn)內(nèi),使用二分查找算法來加速查找過程,若在節(jié)點(diǎn)內(nèi)找到,返回查找結(jié)果,若沒有找到,返回外層T樹,在外層T樹中進(jìn)行查找,將查找到的節(jié)點(diǎn)插入內(nèi)置T樹中,如果節(jié)點(diǎn)的插入導(dǎo)致了內(nèi)置T樹的AVL樹平衡條件被破壞,那么需要進(jìn)行旋轉(zhuǎn)操作來使樹結(jié)構(gòu)保持AVL特性; 在范圍查詢中,進(jìn)行等價(jià)轉(zhuǎn)換,轉(zhuǎn)換成單值查詢,當(dāng)找到第一個(gè)滿足要求的節(jié)點(diǎn)后,再進(jìn)行遞歸的調(diào)用來訪問節(jié)點(diǎn)的子樹,或者回溯訪問節(jié)點(diǎn)的父節(jié)點(diǎn),這樣就可以遍歷所有滿足范圍查詢的節(jié)點(diǎn)。
2.根據(jù)權(quán)利要求1所述的一種讀優(yōu)化的內(nèi)存數(shù)據(jù)庫(kù)T樹索引結(jié)構(gòu)的方法,其特征在于:在大數(shù)量訪問中,被經(jīng)常訪問到的部分?jǐn)?shù)據(jù),通過在T樹中內(nèi)置T樹,來提供一種緩沖的效果,減少了數(shù)據(jù)訪問時(shí)間。
【文檔編號(hào)】G06F17/30GK103902693SQ201410122539
【公開日】2014年7月2日 申請(qǐng)日期:2014年3月28日 優(yōu)先權(quán)日:2014年3月28日
【發(fā)明者】段章峰, 伍衛(wèi)國(guó), 錢德沛, 崔金華, 王寅峰 申請(qǐng)人:西安交通大學(xué)