一種鍵值存儲(chǔ)的數(shù)據(jù)訪問(wèn)方法及其系統(tǒng)的制作方法
【專利摘要】本發(fā)明公開(kāi)了一種鍵值存儲(chǔ)的數(shù)據(jù)訪問(wèn)方法及其系統(tǒng),該方法根據(jù)跳表中每個(gè)數(shù)據(jù)節(jié)點(diǎn)的數(shù)據(jù)訪問(wèn)頻率,動(dòng)態(tài)調(diào)整每個(gè)數(shù)據(jù)節(jié)點(diǎn)高度,以實(shí)現(xiàn)高頻數(shù)據(jù)的快速訪問(wèn),該方法包括:訪問(wèn)頻度設(shè)置步驟和數(shù)據(jù)節(jié)點(diǎn)高度調(diào)整步驟,訪問(wèn)頻度設(shè)置步驟用于跳表中的每個(gè)節(jié)點(diǎn)動(dòng)態(tài)設(shè)置一個(gè)訪問(wèn)頻度,數(shù)據(jù)節(jié)點(diǎn)高度調(diào)整步驟用于通過(guò)動(dòng)態(tài)設(shè)置的訪問(wèn)頻度調(diào)整每個(gè)節(jié)點(diǎn)高度,實(shí)現(xiàn)訪問(wèn)頻率高的數(shù)據(jù)增加節(jié)點(diǎn)高度,訪問(wèn)頻率低的數(shù)據(jù)降低節(jié)點(diǎn)高度。
【專利說(shuō)明】一種鍵值存儲(chǔ)的數(shù)據(jù)訪問(wèn)方法及其系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]該發(fā)明所屬的【技術(shù)領(lǐng)域】是信息存儲(chǔ)領(lǐng)域,特別涉及一種鍵值存儲(chǔ)的數(shù)據(jù)訪問(wèn)方法及其系統(tǒng)。
【背景技術(shù)】
[0002]鍵值存儲(chǔ)是云計(jì)算環(huán)境下典型的數(shù)據(jù)組織方式。數(shù)據(jù)以Key排序的方式存儲(chǔ),以提升數(shù)據(jù)插入、查找、刪除的效率。已有數(shù)據(jù)組織方法構(gòu)建均衡數(shù)據(jù)結(jié)構(gòu),使得每個(gè)數(shù)據(jù)的插入、查找、刪除性能基本相當(dāng)。但是由此帶來(lái)的問(wèn)題是,高頻數(shù)據(jù)的訪問(wèn)效率與低頻數(shù)據(jù)的訪問(wèn)效率相當(dāng)。通過(guò)提升高頻數(shù)據(jù)的訪問(wèn)效率,可以提升系統(tǒng)整體性能,因此,需要在不影響數(shù)據(jù)結(jié)構(gòu)均衡性的前提下,提升高頻數(shù)據(jù)的訪問(wèn)效率。
[0003]已有的平衡數(shù)據(jù)結(jié)構(gòu)有:在內(nèi)存中使用的跳表(SkipList)、紅黑樹(shù)、基樹(shù),在磁盤上使用的B+樹(shù)等。其中SkipList以其實(shí)現(xiàn)簡(jiǎn)單、快速高效而被廣泛應(yīng)用于鍵值存儲(chǔ)系統(tǒng)或數(shù)據(jù)庫(kù)系統(tǒng),比如LevelDB和SkipDB等。
[0004]跳表是平衡樹(shù)的一種替代的數(shù)據(jù)結(jié)構(gòu),與紅黑樹(shù)不相同的是,跳表對(duì)于樹(shù)的平衡的實(shí)現(xiàn)基于一種隨機(jī)化的算法。跳表在每個(gè)節(jié)點(diǎn)中增加了向前的指針,通過(guò)空間來(lái)?yè)Q取時(shí)間,從而提升查找的效率。如果一個(gè)節(jié)點(diǎn)存在K個(gè)向前的指針的話,那么該節(jié)點(diǎn)是K層的節(jié)點(diǎn)。一個(gè)跳表的層MaxLevel定義為跳表中所有節(jié)點(diǎn)中最大的層數(shù)。Skip List是一種隨機(jī)化的數(shù)據(jù)結(jié)構(gòu),基于并聯(lián)的鏈表,其搜索的時(shí)間復(fù)雜度為0(log η)。跳表是對(duì)有序的鏈表以隨機(jī)高度的方式增加上附加的前進(jìn)鏈接,所以在列表中的查找可以快速的跳過(guò)部分列表。Skip List可以很好解決有序鏈表查找特定值的困難。
[0005]從跳表的查詢方式可以看出,節(jié)點(diǎn)的高度越高,其查詢效率越高;高度越低,其查詢效率越低。
[0006]以紅黑樹(shù)和基樹(shù)為代表的平衡樹(shù)數(shù)據(jù)組織方式,將數(shù)據(jù)以平衡的方式置于樹(shù)中節(jié)點(diǎn),無(wú)論數(shù)據(jù)的訪問(wèn)頻度是否有差異,其訪問(wèn)效率基本相當(dāng)。跳表基于一種隨機(jī)化的概率方式?jīng)Q定數(shù)據(jù)節(jié)點(diǎn)的高度,均衡各個(gè)節(jié)點(diǎn)的訪問(wèn)效率。以跳表方式組織的數(shù)據(jù),節(jié)點(diǎn)高度越大,查詢所需要的比較次數(shù)越少,其查詢效率越高;反之,節(jié)點(diǎn)高度越低,查詢所需要的比較次數(shù)越多,其查詢效率越低。因此,跳表中數(shù)據(jù)的高度與跳表的性能直接相關(guān)??傊?,平衡樹(shù)和跳表均衡了各個(gè)節(jié)點(diǎn)的訪問(wèn)效率,卻使得高頻數(shù)據(jù)的訪問(wèn)效率得不到提升。
【發(fā)明內(nèi)容】
[0007]本發(fā)明要解決的技術(shù)問(wèn)題在于提供了一種鍵值存儲(chǔ)的數(shù)據(jù)訪問(wèn)方法及其系統(tǒng),以克服現(xiàn)有技術(shù)中跳表方式組織的中高頻數(shù)據(jù)訪問(wèn)效率不高的問(wèn)題。
[0008]為了達(dá)到以上目的,本發(fā)明提供了一種鍵值存儲(chǔ)的數(shù)據(jù)訪問(wèn)方法,其特征在于,所述方法根據(jù)跳表中每個(gè)數(shù)據(jù)節(jié)點(diǎn)的數(shù)據(jù)訪問(wèn)頻率,動(dòng)態(tài)調(diào)整所述每個(gè)數(shù)據(jù)節(jié)點(diǎn)高度,以實(shí)現(xiàn)高頻數(shù)據(jù)的快速訪問(wèn),所述方法包括:
[0009]訪問(wèn)頻度設(shè)置步驟:所述跳表中的每個(gè)節(jié)點(diǎn)動(dòng)態(tài)設(shè)置一個(gè)訪問(wèn)頻度;[0010]數(shù)據(jù)節(jié)點(diǎn)高度調(diào)整步驟:通過(guò)動(dòng)態(tài)設(shè)置的所述訪問(wèn)頻度調(diào)整所述每個(gè)節(jié)點(diǎn)高度,實(shí)現(xiàn)訪問(wèn)頻率高的數(shù)據(jù)增加所述節(jié)點(diǎn)高度,訪問(wèn)頻率低的數(shù)據(jù)降低所述節(jié)點(diǎn)高度。
[0011 ] 上述鍵值存儲(chǔ)的數(shù)據(jù)訪問(wèn)方法,其特征在于,所述訪問(wèn)頻度設(shè)置步驟還包括:
[0012]初始化步驟:將鍵值對(duì)插入所述跳表,作為所述跳表的一個(gè)節(jié)點(diǎn),初始化所述鍵值對(duì)的上一周期內(nèi)節(jié)點(diǎn)訪問(wèn)次數(shù)fl和所述鍵值對(duì)當(dāng)前周期內(nèi)節(jié)點(diǎn)訪問(wèn)次數(shù)f2 ;
[0013]訪問(wèn)頻度計(jì)算步驟:對(duì)所述鍵值對(duì)每訪問(wèn)一次,則將所述鍵值對(duì)的當(dāng)前周期內(nèi)節(jié)點(diǎn)訪問(wèn)次數(shù)f2增加,在一段時(shí)間后,計(jì)算所述fl和所述f2的比值,以進(jìn)行所述節(jié)點(diǎn)高度的調(diào)整。
[0014]上述鍵值存儲(chǔ)的數(shù)據(jù)訪問(wèn)方法,其特征在于,所述數(shù)據(jù)節(jié)點(diǎn)高度調(diào)整步驟還包括:
[0015]單個(gè)數(shù)據(jù)節(jié)點(diǎn)高度調(diào)整步驟:根據(jù)所述f I和所述f2的比值,對(duì)單個(gè)所述鍵值對(duì)的節(jié)點(diǎn)高度進(jìn)行調(diào)整;
[0016]所有數(shù)據(jù)節(jié)點(diǎn)高度調(diào)整步驟:根據(jù)所有數(shù)據(jù)節(jié)點(diǎn)平均高度與所有節(jié)點(diǎn)最大高度進(jìn)行比較判斷,調(diào)整所有數(shù)據(jù)節(jié)點(diǎn)平均高度。
[0017]上述鍵值存儲(chǔ)的數(shù)據(jù)訪問(wèn)方法,其特征在于,所述單個(gè)數(shù)據(jù)節(jié)點(diǎn)高度調(diào)整步驟還包括:
[0018]判斷步驟:判斷如果所述f I為0,則將所述f2的值賦值給所述f 1,并將所述f2置為0,若所述fl不為0,則計(jì)算f2與fl的比值;
[0019]節(jié)點(diǎn)高度增加步驟:如果所述f2與Π的比值大于等于K,所述K大于I,并且所述鍵值對(duì)的節(jié)點(diǎn)高度沒(méi)有達(dá)到所述跳表的最大值,則將所述鍵值對(duì)的節(jié)點(diǎn)高度增加,如果所述鍵值對(duì)的節(jié)點(diǎn)高度已經(jīng)達(dá)到所述跳表的最大值,則保持所述鍵值對(duì)的節(jié)點(diǎn)高度不變;
[0020]節(jié)點(diǎn)高度降低步驟:如果所述f2與Π的比值小于等于M,所述M小于I并且大于
O,并且所述鍵值對(duì)的節(jié)點(diǎn)高度沒(méi)有達(dá)到所述跳表的最小值,則將所述鍵值對(duì)的節(jié)點(diǎn)高度降低,如果所述鍵值對(duì)的節(jié)點(diǎn)高度已經(jīng)達(dá)到所述跳表的最小值,則保持所述鍵值對(duì)的節(jié)點(diǎn)高度不變;
[0021]節(jié)點(diǎn)高度保持步驟:如果所述f2與Π的比值大于所述M,并且小于所述K,則保持所述鍵值對(duì)的節(jié)點(diǎn)高度不變。
[0022]上述鍵值存儲(chǔ)的數(shù)據(jù)訪問(wèn)方法,其特征在于,所述所有數(shù)據(jù)節(jié)點(diǎn)高度調(diào)整步驟還包括:
[0023]數(shù)據(jù)節(jié)點(diǎn)平均高度計(jì)算步驟:在一段時(shí)間后,計(jì)算所有數(shù)據(jù)節(jié)點(diǎn)平均高度,如果所述節(jié)點(diǎn)平均高度大于Q*所有節(jié)點(diǎn)最大高度,或小于P*所有節(jié)點(diǎn)最大高度,其中,Q和P為大于O并且小于1,并且Q大于P,則計(jì)算所述每個(gè)節(jié)點(diǎn)所述f I占所有節(jié)點(diǎn)總訪問(wèn)次數(shù)的百分比R,將所述節(jié)點(diǎn)平均高度設(shè)置為R*所有節(jié)點(diǎn)最大高度。
[0024]本發(fā)明還提供了一種鍵值存儲(chǔ)的數(shù)據(jù)訪問(wèn)系統(tǒng),采用如所述的鍵值存儲(chǔ)的數(shù)據(jù)訪問(wèn)方法,其特征在于,所述系統(tǒng)包括:
[0025]訪問(wèn)頻度設(shè)置模塊:為所述跳表中的每個(gè)節(jié)點(diǎn)動(dòng)態(tài)設(shè)置一個(gè)訪問(wèn)頻度;
[0026]數(shù)據(jù)節(jié)點(diǎn)高度調(diào)整模塊:通過(guò)動(dòng)態(tài)設(shè)置的所述訪問(wèn)頻度調(diào)整所述每個(gè)節(jié)點(diǎn)高度,實(shí)現(xiàn)訪問(wèn)頻率高的數(shù)據(jù)增加所述節(jié)點(diǎn)高度,訪問(wèn)頻率低的數(shù)據(jù)降低所述節(jié)點(diǎn)高度。
[0027]上述鍵值存儲(chǔ)的數(shù)據(jù)訪問(wèn)系統(tǒng),其特征在于,所述訪問(wèn)頻度設(shè)置模塊還包括:[0028]初始化模塊:將鍵值對(duì)插入所述跳表,作為所述跳表的一個(gè)節(jié)點(diǎn),初始化所述鍵值對(duì)的上一周期內(nèi)節(jié)點(diǎn)訪問(wèn)次數(shù)fl和所述鍵值對(duì)當(dāng)前周期內(nèi)節(jié)點(diǎn)訪問(wèn)次數(shù)f2 ;
[0029]訪問(wèn)頻度計(jì)算模塊:對(duì)所述鍵值對(duì)每訪問(wèn)一次,則所述鍵值對(duì)的當(dāng)前周期內(nèi)節(jié)點(diǎn)訪問(wèn)次數(shù)f2增加,在一段時(shí)間后,計(jì)算所述fl和所述f2的比值,以進(jìn)行所述節(jié)點(diǎn)高度的調(diào)
難
iF.0
[0030]上述鍵值存儲(chǔ)的數(shù)據(jù)訪問(wèn)系統(tǒng),其特征在于,所述數(shù)據(jù)節(jié)點(diǎn)高度調(diào)整模塊還包括:
[0031]單個(gè)數(shù)據(jù)節(jié)點(diǎn)高度調(diào)整模塊:根據(jù)所述f I和所述f2的比值,對(duì)單個(gè)所述鍵值對(duì)的節(jié)點(diǎn)聞度進(jìn)行調(diào)整;
[0032]所有數(shù)據(jù)節(jié)點(diǎn)高度調(diào)整模塊:根據(jù)所有數(shù)據(jù)節(jié)點(diǎn)平均高度與所有節(jié)點(diǎn)最大高度進(jìn)行比較判斷,調(diào)整所有數(shù)據(jù)節(jié)點(diǎn)平均高度。
[0033]上述鍵值存儲(chǔ)的數(shù)據(jù)訪問(wèn)系統(tǒng),其特征在于,所述單個(gè)數(shù)據(jù)節(jié)點(diǎn)高度調(diào)整模塊還包括:
[0034]判斷模塊:判斷如果所述Π為0,則將所述f2的值賦值給所述Π,并將所述f2置為0,若所述fl不為0,則計(jì)算f2與fl的比值;
[0035]節(jié)點(diǎn)高度增加模塊:如果所述f2與fl的比值大于等于K,所述K大于I,并且所述鍵值對(duì)的節(jié)點(diǎn)高度沒(méi)有達(dá)到所述跳表的最大值,則將所述鍵值對(duì)的節(jié)點(diǎn)高度增加,如果所述鍵值對(duì)的節(jié)點(diǎn)高度已經(jīng)達(dá)到所述跳表的最大值,則保持所述鍵值對(duì)的節(jié)點(diǎn)高度不變;
[0036]節(jié)點(diǎn)高度降低模塊:如果所述f2與Π的比值小于等于M,所述M小于I并且大于
O,并且所述鍵值對(duì)的節(jié)點(diǎn)高度沒(méi)有達(dá)到所述跳表的最小值,則將所述鍵值對(duì)的節(jié)點(diǎn)高度降低,如果所述鍵值對(duì)的節(jié)點(diǎn)高度已經(jīng)達(dá)到所述跳表的最小值,則保持所述鍵值對(duì)的節(jié)點(diǎn)高度不變;
[0037]節(jié)點(diǎn)高度保持模塊:如果所述f2與Π的比值大于所述M,并且小于所述K,則保持所述鍵值對(duì)的節(jié)點(diǎn)高度不變。
[0038]上述鍵值存儲(chǔ)的數(shù)據(jù)訪問(wèn)系統(tǒng),其特征在于,所述所有數(shù)據(jù)節(jié)點(diǎn)高度調(diào)整模塊還包括:
[0039]數(shù)據(jù)節(jié)點(diǎn)平均高度計(jì)算模塊:在一段時(shí)間后,計(jì)算所有數(shù)據(jù)節(jié)點(diǎn)平均高度,如果所述節(jié)點(diǎn)平均高度大于Q*所有節(jié)點(diǎn)最大高度,或小于P*所有節(jié)點(diǎn)最大高度,其中,Q和P為大于O并且小于1,并且Q大于P,則計(jì)算所述每個(gè)節(jié)點(diǎn)所述f I占所有節(jié)點(diǎn)總訪問(wèn)次數(shù)的百分比R,將所述節(jié)點(diǎn)平均高度設(shè)置為R*所有節(jié)點(diǎn)最大高度。
[0040]與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果在于,在不改變數(shù)據(jù)順序性的前提下,利用數(shù)據(jù)訪問(wèn)頻率的不同,提高了高頻數(shù)據(jù)的訪問(wèn)效率;并能夠依據(jù)數(shù)據(jù)訪問(wèn)熱度動(dòng)態(tài)調(diào)整其在跳表中的高度,從而縮短高頻數(shù)據(jù)的訪問(wèn)時(shí)間,提升整個(gè)鍵值存儲(chǔ)系統(tǒng)的性能。
【專利附圖】
【附圖說(shuō)明】
[0041]圖1為本發(fā)明鍵值存儲(chǔ)的數(shù)據(jù)訪問(wèn)方法的流程示意圖;
[0042]圖2為本發(fā)明單個(gè)數(shù)據(jù)節(jié)點(diǎn)高度調(diào)整步驟的流程示意圖;
[0043]圖3為本發(fā)明所有數(shù)據(jù)節(jié)點(diǎn)高度調(diào)整步驟的流程示意圖;
[0044]圖4為本發(fā)明鍵值存儲(chǔ)的數(shù)據(jù)訪問(wèn)方法一實(shí)施例步驟示意圖;[0045]圖5為本發(fā)明鍵值存儲(chǔ)的數(shù)據(jù)訪問(wèn)系統(tǒng)結(jié)構(gòu)示意圖;
[0046]圖6為本發(fā)明單個(gè)數(shù)據(jù)節(jié)點(diǎn)高度調(diào)整模塊的結(jié)構(gòu)示意圖;
[0047]圖7為本發(fā)明所有數(shù)據(jù)節(jié)點(diǎn)高度調(diào)整模塊的結(jié)構(gòu)示意圖。
[0048]其中,附圖標(biāo)記:
[0049]I訪問(wèn)頻度設(shè)置模塊2數(shù)據(jù)節(jié)點(diǎn)高度調(diào)整模塊
[0050]11初始化模塊12分支元數(shù)據(jù)服務(wù)器 [0051]21單個(gè)數(shù)據(jù)節(jié)點(diǎn)高度調(diào)整模塊 22所有數(shù)據(jù)節(jié)點(diǎn)高度調(diào)整模塊
[0052]211判斷模塊212節(jié)點(diǎn)高度增加模塊
[0053]213節(jié)點(diǎn)高度降低模塊214節(jié)點(diǎn)高度保持模塊
[0054]221數(shù)據(jù)節(jié)點(diǎn)平均高度計(jì)算模塊
[0055]SI~S2、S11~S12、S21~S22、S211~S214、S10~S104:本發(fā)明各實(shí)施例的施
行步驟
【具體實(shí)施方式】
[0056]下面給出本發(fā)明的【具體實(shí)施方式】,結(jié)合圖示對(duì)本發(fā)明做出了詳細(xì)描述。
[0057]本發(fā)明的鍵值存儲(chǔ)的數(shù)據(jù)訪問(wèn)方法的關(guān)鍵內(nèi)容包括:第一、給跳表中每個(gè)節(jié)點(diǎn)設(shè)置一個(gè)訪問(wèn)頻度的方法;第二、依據(jù)數(shù)據(jù)訪問(wèn)頻度調(diào)整跳表中數(shù)據(jù)節(jié)點(diǎn)高度的方法;第三、訪問(wèn)頻率高的數(shù)據(jù),增加其高度;訪問(wèn)頻率低的數(shù)據(jù),降低其高度。
[0058]圖1為本發(fā)明鍵值存儲(chǔ)的數(shù)據(jù)訪問(wèn)方法的流程示意圖,如圖1所示,本發(fā)明提供的一種鍵值存儲(chǔ)的數(shù)據(jù)訪問(wèn)方法,該方法根據(jù)跳表中每個(gè)數(shù)據(jù)節(jié)點(diǎn)的數(shù)據(jù)訪問(wèn)頻率,動(dòng)態(tài)調(diào)整所述每個(gè)數(shù)據(jù)節(jié)點(diǎn)高度,以實(shí)現(xiàn)高頻數(shù)據(jù)的快速訪問(wèn),該方法包括:
[0059]訪問(wèn)頻度設(shè)置步驟S1:跳表中的每個(gè)節(jié)點(diǎn)動(dòng)態(tài)設(shè)置一個(gè)訪問(wèn)頻度;
[0060]數(shù)據(jù)節(jié)點(diǎn)高度調(diào)整步驟S2:通過(guò)動(dòng)態(tài)設(shè)置的訪問(wèn)頻度調(diào)整每個(gè)節(jié)點(diǎn)高度,實(shí)現(xiàn)訪問(wèn)頻率高的數(shù)據(jù)增加節(jié)點(diǎn)高度,訪問(wèn)頻率低的數(shù)據(jù)降低節(jié)點(diǎn)高度。
[0061]其中,訪問(wèn)頻度設(shè)置步驟SI還包括:
[0062]初始化步驟Sll:將鍵值對(duì)插入跳表,作為跳表的一個(gè)節(jié)點(diǎn),初始化鍵值對(duì)的上一周期內(nèi)節(jié)點(diǎn)訪問(wèn)次數(shù)π和鍵值對(duì)當(dāng)前周期內(nèi)節(jié)點(diǎn)訪問(wèn)次數(shù)f2 ;
[0063]訪問(wèn)頻度計(jì)算步驟S12:對(duì)鍵值對(duì)每訪問(wèn)一次,則將鍵值對(duì)的當(dāng)前周期內(nèi)節(jié)點(diǎn)訪問(wèn)次數(shù)f2增加,在一段時(shí)間后,計(jì)算fl和所述f2的比值,以進(jìn)行節(jié)點(diǎn)高度的調(diào)整。
[0064]其中,數(shù)據(jù)節(jié)點(diǎn)高度調(diào)整步驟S2還包括:
[0065]單個(gè)數(shù)據(jù)節(jié)點(diǎn)高度調(diào)整步驟S21:根據(jù)Π和f2的比值,對(duì)單個(gè)鍵值對(duì)的節(jié)點(diǎn)高度進(jìn)行調(diào)整;
[0066]所有數(shù)據(jù)節(jié)點(diǎn)高度調(diào)整步驟S22:根據(jù)所有數(shù)據(jù)節(jié)點(diǎn)平均高度與所有節(jié)點(diǎn)最大高度進(jìn)行比較判斷,調(diào)整所有數(shù)據(jù)節(jié)點(diǎn)平均高度。
[0067]圖2為本發(fā)明單個(gè)數(shù)據(jù)節(jié)點(diǎn)高度調(diào)整步驟的流程示意圖,如圖2所示,其中,單個(gè)數(shù)據(jù)節(jié)點(diǎn)高度調(diào)整步驟S21還包括:
[0068]判斷步驟S211:判斷如果f I為0,則將f2的值賦值給f 1,并將f2置為0,若f I不為0,則計(jì)算f2與fl的比值;
[0069]節(jié)點(diǎn)高度增加步驟S212:如果f2與fl的比值大于等于K,K大于I,并且鍵值對(duì)的節(jié)點(diǎn)高度沒(méi)有達(dá)到跳表的最大值,則將鍵值對(duì)的節(jié)點(diǎn)高度增加,如果鍵值對(duì)的節(jié)點(diǎn)高度已經(jīng)達(dá)到跳表的最大值,則保持鍵值對(duì)的節(jié)點(diǎn)高度不變;
[0070]節(jié)點(diǎn)高度降低步驟S213:如果f2與f I的比值小于等于M,M小于I并且大于0,并且鍵值對(duì)的節(jié)點(diǎn)高度沒(méi)有達(dá)到跳表的最小值,則將鍵值對(duì)的節(jié)點(diǎn)高度降低,如果鍵值對(duì)的節(jié)點(diǎn)高度已經(jīng)達(dá)到跳表的最小值,則保持鍵值對(duì)的節(jié)點(diǎn)高度不變;
[0071]節(jié)點(diǎn)高度保持步驟S214:如果f2與fl的比值大于M,并且小于K,則保持鍵值對(duì)的節(jié)點(diǎn)高度不變。
[0072]圖3為本發(fā)明所有數(shù)據(jù)節(jié)點(diǎn)高度調(diào)整步驟的流程示意圖,如圖3所示,其中,所有數(shù)據(jù)節(jié)點(diǎn)高度調(diào)整步驟S22還包括:
[0073]數(shù)據(jù)節(jié)點(diǎn)平均高度計(jì)算步驟S221:在一段時(shí)間后,計(jì)算所有數(shù)據(jù)節(jié)點(diǎn)平均高度,如果節(jié)點(diǎn)平均高度大于Q*所有節(jié)點(diǎn)最大高度,或小于P*所有節(jié)點(diǎn)最大高度,其中,Q和P為大于0,小于1,并且Q大于P,則計(jì)算每個(gè)節(jié)點(diǎn)f I占所有節(jié)點(diǎn)總訪問(wèn)次數(shù)的百分比R,將節(jié)點(diǎn)平均高度設(shè)置為R*所有節(jié)點(diǎn)最大高度。
[0074]以下結(jié)合圖示說(shuō)明本發(fā)明具體實(shí)施例的步驟,圖4為本發(fā)明鍵值存儲(chǔ)的數(shù)據(jù)訪問(wèn)方法一實(shí)施例步驟示意圖,如圖4所示,本發(fā)明的一具體實(shí)施例操作步驟,說(shuō)明數(shù)據(jù)訪問(wèn)過(guò)程。
[0075]假設(shè)跳表中有N個(gè)節(jié)點(diǎn),節(jié)點(diǎn)高度調(diào)整的時(shí)間周期為Ts和Tg,其中Ts為單個(gè)節(jié)點(diǎn)高度調(diào)整的周期,Tg為跳表中所有節(jié)點(diǎn)調(diào)整的周期。每個(gè)節(jié)點(diǎn)插入跳表時(shí)的高度均設(shè)置為隨機(jī)數(shù)。假設(shè)每個(gè)節(jié)點(diǎn)均在跳表中節(jié)點(diǎn)高度調(diào)整時(shí)插入跳表。記每個(gè)節(jié)點(diǎn)插入跳表時(shí)的時(shí)間為τ=0,此后每個(gè)時(shí)間周期分別標(biāo)記為Τ0,Tl, Τ2,....,Tm。在每個(gè)節(jié)點(diǎn)上增加兩個(gè)記錄節(jié)點(diǎn)訪問(wèn)頻率的字段fl和f2,其中fl用來(lái)保存上一個(gè)周期內(nèi)節(jié)點(diǎn)的訪問(wèn)次數(shù),f2用來(lái)記錄當(dāng)前周期內(nèi)節(jié)點(diǎn)已被訪問(wèn)的次數(shù)。其中,T可隨節(jié)點(diǎn)高度調(diào)整的頻率確定。節(jié)點(diǎn)高度調(diào)整的頻率越高,T越?。还?jié)點(diǎn)高度調(diào)整的頻率越低,T越大。本發(fā)明設(shè)置T=30秒。
[0076]具體實(shí)施步驟如下:
[0077]步驟SlOl:將鍵為Ki的鍵值對(duì)插入跳表,作為跳表的一個(gè)節(jié)點(diǎn)。將鍵為Ki的節(jié)點(diǎn)的fl設(shè)置為0,f2設(shè)置為O。
[0078]步驟S102:對(duì)鍵為Ki的鍵值對(duì)每訪問(wèn)一次,將f2的值加I。
[0079]步驟S103:當(dāng)Tj=j*Ts時(shí),其中0〈=j〈=m,判斷f2與fl的比值。
[0080]步驟S1031:如果f 1=0,則將f2賦值給fl,并將f2重置為O
[0081]步驟S1032:如果Π!=0,則判斷f2/fl的值。
[0082]步驟S1033:如果f2/fl大于等于1.2,即鍵為Ki的節(jié)點(diǎn)在周期Tj內(nèi)較周期Tj-1內(nèi)的訪問(wèn)次數(shù)增加20%,此時(shí)如果鍵為Ki的節(jié)點(diǎn)的高度已經(jīng)達(dá)到跳表高度的最大值MAX_HIGHT,則保持該節(jié)點(diǎn)高度不變,否則如果鍵為Ki的節(jié)點(diǎn)的高度小于跳表高度的最大值MAX_HIGHT,則將鍵為Ki的節(jié)點(diǎn)的高度增加I。
[0083]步驟S1034:如果f2/fl小于等于0.8,即鍵為Ki的節(jié)點(diǎn)在周期Tj內(nèi)較周期Tj-1內(nèi)的訪問(wèn)次數(shù)降低20%,此時(shí)如果鍵為Ki的節(jié)點(diǎn)的高度已經(jīng)達(dá)到最小值I,則保持該節(jié)點(diǎn)高度不變,否則如果將鍵為Ki的節(jié)點(diǎn)的高度大于1,則將鍵位Ki的節(jié)點(diǎn)的高度減去I。
[0084]步驟S1035:如果f2/fl大于0.8且小于1.2,即鍵為Ki的節(jié)點(diǎn)在周期Tj內(nèi)較周期Tj-1內(nèi)的訪問(wèn)次數(shù)變化幅度較小,此時(shí)保持該節(jié)點(diǎn)高度不變。[0085]步驟S104:當(dāng)Ty=y*Tg時(shí),其中0〈=g〈=m,判斷跳表中所有節(jié)點(diǎn)的平均高度Ta。
[0086]步驟S1041:如果Ta大于(50%+20%) *最大高度,或小于(50%_20%)*最大高度,則計(jì)算每個(gè)節(jié)點(diǎn)在前一個(gè)時(shí)間周期內(nèi)的訪問(wèn)次數(shù)占所有節(jié)點(diǎn)總的訪問(wèn)次數(shù)的百分比R,并將節(jié)點(diǎn)的高度重置為R*最大高度。
[0087]本發(fā)明還提供了一種鍵值存儲(chǔ)的數(shù)據(jù)訪問(wèn)系統(tǒng),圖5為本發(fā)明鍵值存儲(chǔ)的數(shù)據(jù)訪問(wèn)系統(tǒng)結(jié)構(gòu)示意圖,如圖5所示,該系統(tǒng)包括:
[0088]訪問(wèn)頻度設(shè)置模塊1:為跳表中的每個(gè)節(jié)點(diǎn)動(dòng)態(tài)設(shè)置一個(gè)訪問(wèn)頻度;
[0089]數(shù)據(jù)節(jié)點(diǎn)高度調(diào)整模塊2:通過(guò)動(dòng)態(tài)設(shè)置的訪問(wèn)頻度調(diào)整每個(gè)節(jié)點(diǎn)高度,實(shí)現(xiàn)訪問(wèn)頻率高的數(shù)據(jù)增加節(jié)點(diǎn)高度,訪問(wèn)頻率低的數(shù)據(jù)降低節(jié)點(diǎn)高度。
[0090]其中,訪問(wèn)頻度設(shè)置模塊I還包括:
[0091]初始化模塊11:將鍵值對(duì)插入跳表,作為跳表的一個(gè)節(jié)點(diǎn),初始化鍵值對(duì)的上一周期內(nèi)節(jié)點(diǎn)訪問(wèn)次數(shù)π和鍵值對(duì)當(dāng)前周期內(nèi)節(jié)點(diǎn)訪問(wèn)次數(shù)f2 ;
[0092]訪問(wèn)頻度計(jì)算模塊12:對(duì)鍵值對(duì)每訪問(wèn)一次,則鍵值對(duì)的當(dāng)前周期內(nèi)節(jié)點(diǎn)訪問(wèn)次數(shù)f2增加,在一段時(shí)間后,計(jì)算fl和f2的比值,以進(jìn)行節(jié)點(diǎn)高度的調(diào)整。
[0093]其中,數(shù)據(jù)節(jié)點(diǎn)高度調(diào)整模塊2還包括:
[0094]單個(gè)數(shù)據(jù)節(jié)點(diǎn)高度調(diào)整模塊21:根據(jù)Π和f2的比值,對(duì)單個(gè)鍵值對(duì)的節(jié)點(diǎn)高度進(jìn)行調(diào)整;
[0095]所有數(shù)據(jù)節(jié)點(diǎn)高度調(diào)整模塊22:根據(jù)所有數(shù)據(jù)節(jié)點(diǎn)平均高度與所有節(jié)點(diǎn)最大高度進(jìn)行比較判斷,調(diào)整所有數(shù)據(jù)節(jié)點(diǎn)平均高度。
[0096]圖6為本發(fā)明單個(gè)數(shù)據(jù)節(jié)點(diǎn)高度調(diào)整模塊的結(jié)構(gòu)示意圖,如圖6所示,其中,單個(gè)數(shù)據(jù)節(jié)點(diǎn)高度調(diào)整模塊21還包括:
[0097]判斷模塊211:判斷如果fl為0,則將f2的值賦值給fl,并將f2置為0,若fl不為0,則計(jì)算f2與fl的比值;
[0098]節(jié)點(diǎn)高度增加模塊212:如果f2與fl的比值大于等于K,K大于1,并且鍵值對(duì)的節(jié)點(diǎn)高度沒(méi)有達(dá)到跳表的最大值,則將鍵值對(duì)的節(jié)點(diǎn)高度增加,如果鍵值對(duì)的節(jié)點(diǎn)高度已經(jīng)達(dá)到跳表的最大值,則保持鍵值對(duì)的節(jié)點(diǎn)高度不變;
[0099]節(jié)點(diǎn)高度降低模塊213:如果f2與fl的比值小于等于M,M小于I并且大于0,并且鍵值對(duì)的節(jié)點(diǎn)高度沒(méi)有達(dá)到跳表的最小值,則將鍵值對(duì)的節(jié)點(diǎn)高度降低,如果鍵值對(duì)的節(jié)點(diǎn)高度已經(jīng)達(dá)到跳表的最小值,則保持鍵值對(duì)的節(jié)點(diǎn)高度不變;
[0100]節(jié)點(diǎn)高度保持模塊214:如果f2與Π的比值大于M,并且小于K,則保持鍵值對(duì)的節(jié)點(diǎn)高度不變。
[0101]圖7為本發(fā)明所有數(shù)據(jù)節(jié)點(diǎn)高度調(diào)整模塊的結(jié)構(gòu)示意圖,如圖7所示,其中,所有數(shù)據(jù)節(jié)點(diǎn)高度調(diào)整模塊22還包括:
[0102]數(shù)據(jù)節(jié)點(diǎn)平均高度計(jì)算模塊221:在一段時(shí)間后,計(jì)算所有數(shù)據(jù)節(jié)點(diǎn)平均高度,如果節(jié)點(diǎn)平均高度大于Q*所有節(jié)點(diǎn)最大高度,或小于P*所有節(jié)點(diǎn)最大高度,其中,Q和P為大于O并且小于1,并且Q大于P,則計(jì)算每個(gè)節(jié)點(diǎn)所述fI占所有節(jié)點(diǎn)總訪問(wèn)次數(shù)的百分比R,將節(jié)點(diǎn)平均高度設(shè)置為R*所有節(jié)點(diǎn)最大高度。
[0103]當(dāng)然,本發(fā)明還可有其它多種實(shí)施例,在不背離本發(fā)明精神及其實(shí)質(zhì)的情況下,熟悉本領(lǐng)域的技術(shù)人員當(dāng)可根據(jù)本發(fā)明做出各種相應(yīng)的改變和變形,但這些相應(yīng)的改變和變形都應(yīng)屬于本發(fā)明所附的權(quán)利要求的保護(hù)范圍。
【權(quán)利要求】
1.一種鍵值存儲(chǔ)的數(shù)據(jù)訪問(wèn)方法,其特征在于,所述方法根據(jù)跳表中每個(gè)數(shù)據(jù)節(jié)點(diǎn)的數(shù)據(jù)訪問(wèn)頻率,動(dòng)態(tài)調(diào)整所述每個(gè)數(shù)據(jù)節(jié)點(diǎn)高度,以實(shí)現(xiàn)高頻數(shù)據(jù)的快速訪問(wèn),所述方法包括: 訪問(wèn)頻度設(shè)置步驟:所述跳表中的每個(gè)節(jié)點(diǎn)動(dòng)態(tài)設(shè)置一個(gè)訪問(wèn)頻度; 數(shù)據(jù)節(jié)點(diǎn)高度調(diào)整步驟:通過(guò)動(dòng)態(tài)設(shè)置的所述訪問(wèn)頻度調(diào)整所述每個(gè)節(jié)點(diǎn)高度,實(shí)現(xiàn)訪問(wèn)頻率高的數(shù)據(jù)增加所述節(jié)點(diǎn)高度,訪問(wèn)頻率低的數(shù)據(jù)降低所述節(jié)點(diǎn)高度。
2.根據(jù)權(quán)利要求1所述鍵值存儲(chǔ)的數(shù)據(jù)訪問(wèn)方法,其特征在于,所述訪問(wèn)頻度設(shè)置步驟還包括: 初始化步驟:將鍵值對(duì)插入所述跳表,作為所述跳表的一個(gè)節(jié)點(diǎn),初始化所述鍵值對(duì)的上一周期內(nèi)節(jié)點(diǎn)訪問(wèn)次數(shù)π和所述鍵值對(duì)當(dāng)前周期內(nèi)節(jié)點(diǎn)訪問(wèn)次數(shù)f2 ; 訪問(wèn)頻度計(jì)算步驟:對(duì)所述鍵值對(duì)每訪問(wèn)一次,則將所述鍵值對(duì)的當(dāng)前周期內(nèi)節(jié)點(diǎn)訪問(wèn)次數(shù)f2增加,在一段時(shí)間后,計(jì)算所述fl和所述f2的比值,以進(jìn)行所述節(jié)點(diǎn)高度的調(diào)難iF.0
3.根據(jù)權(quán)利要求1或2所述鍵值存儲(chǔ)的數(shù)據(jù)訪問(wèn)方法,其特征在于,所述數(shù)據(jù)節(jié)點(diǎn)高度調(diào)整步驟還包括: 單個(gè)數(shù)據(jù)節(jié)點(diǎn)高度調(diào)整步驟:根據(jù)所述Π和所述f2的比值,對(duì)單個(gè)所述鍵值對(duì)的節(jié)點(diǎn)高度進(jìn)行調(diào)整; 所有數(shù)據(jù)節(jié)點(diǎn)高度調(diào)整步驟:根據(jù)所`有數(shù)據(jù)節(jié)點(diǎn)平均高度與所有節(jié)點(diǎn)最大高度進(jìn)行比較判斷,調(diào)整所有數(shù)據(jù)節(jié)點(diǎn)平均高度。
4.根據(jù)權(quán)利要求3所述鍵值存儲(chǔ)的數(shù)據(jù)訪問(wèn)方法,其特征在于,所述單個(gè)數(shù)據(jù)節(jié)點(diǎn)高度調(diào)整步驟還包括: 判斷步驟:判斷如果所述Π為O,則將所述f2的值賦值給所述Π,并將所述f2置為O,若所述fl不為O,則計(jì)算f2與fl的比值; 節(jié)點(diǎn)高度增加步驟:如果所述f2與Π的比值大于等于K,所述K大于I,并且所述鍵值對(duì)的節(jié)點(diǎn)高度沒(méi)有達(dá)到所述跳表的最大值,則將所述鍵值對(duì)的節(jié)點(diǎn)高度增加,如果所述鍵值對(duì)的節(jié)點(diǎn)高度已經(jīng)達(dá)到所述跳表的最大值,則保持所述鍵值對(duì)的節(jié)點(diǎn)高度不變; 節(jié)點(diǎn)高度降低步驟:如果所述f2與Π的比值小于等于M,所述M小于I并且大于O,并且所述鍵值對(duì)的節(jié)點(diǎn)高度沒(méi)有達(dá)到所述跳表的最小值,則將所述鍵值對(duì)的節(jié)點(diǎn)高度降低,如果所述鍵值對(duì)的節(jié)點(diǎn)高度已經(jīng)達(dá)到所述跳表的最小值,則保持所述鍵值對(duì)的節(jié)點(diǎn)高度不變; 節(jié)點(diǎn)高度保持步驟:如果所述f2與Π的比值大于所述M,并且小于所述K,則保持所述鍵值對(duì)的節(jié)點(diǎn)高度不變。
5.根據(jù)權(quán)利要求3所述鍵值存儲(chǔ)的數(shù)據(jù)訪問(wèn)方法,其特征在于,所述所有數(shù)據(jù)節(jié)點(diǎn)高度調(diào)整步驟還包括: 數(shù)據(jù)節(jié)點(diǎn)平均高度計(jì)算步驟:在一段時(shí)間后,計(jì)算所有數(shù)據(jù)節(jié)點(diǎn)平均高度,如果所述節(jié)點(diǎn)平均高度大于Q*所有節(jié)點(diǎn)最大高度,或小于P*所有節(jié)點(diǎn)最大高度,其中,Q和P為大于O并且小于1,并且Q大于P,則計(jì)算所述每個(gè)節(jié)點(diǎn)所述fI占所有節(jié)點(diǎn)總訪問(wèn)次數(shù)的百分比R,將所述節(jié)點(diǎn)平均高度設(shè)置為R*所有節(jié)點(diǎn)最大高度。
6.一種鍵值存儲(chǔ)的數(shù)據(jù)訪問(wèn)系統(tǒng),采用如權(quán)利要求1-5中任一項(xiàng)所述的鍵值存儲(chǔ)的數(shù)據(jù)訪問(wèn)方法,其特征在于,所述系統(tǒng)包括: 訪問(wèn)頻度設(shè)置模塊:為所述跳表中的每個(gè)節(jié)點(diǎn)動(dòng)態(tài)設(shè)置一個(gè)訪問(wèn)頻度; 數(shù)據(jù)節(jié)點(diǎn)高度調(diào)整模塊:通過(guò)動(dòng)態(tài)設(shè)置的所述訪問(wèn)頻度調(diào)整所述每個(gè)節(jié)點(diǎn)高度,實(shí)現(xiàn)訪問(wèn)頻率高的數(shù)據(jù)增加所述節(jié)點(diǎn)高度,訪問(wèn)頻率低的數(shù)據(jù)降低所述節(jié)點(diǎn)高度。
7.根據(jù)權(quán)利要求6所述鍵值存儲(chǔ)的數(shù)據(jù)訪問(wèn)系統(tǒng),其特征在于,所述訪問(wèn)頻度設(shè)置模塊還包括: 初始化模塊:將鍵值對(duì)插入所述跳表,作為所述跳表的一個(gè)節(jié)點(diǎn),初始化所述鍵值對(duì)的上一周期內(nèi)節(jié)點(diǎn)訪問(wèn)次數(shù)Π和所述鍵值對(duì)當(dāng)前周期內(nèi)節(jié)點(diǎn)訪問(wèn)次數(shù)f2 ; 訪問(wèn)頻度計(jì)算模塊:對(duì)所述鍵值對(duì)每訪問(wèn)一次,則所述鍵值對(duì)的當(dāng)前周期內(nèi)節(jié)點(diǎn)訪問(wèn)次數(shù)f2增加,在一段時(shí)間后,計(jì)算所述fl和所述f2的比值,以進(jìn)行所述節(jié)點(diǎn)高度的調(diào)整。
8.根據(jù)權(quán)利要求6或7所述鍵值存儲(chǔ)的數(shù)據(jù)訪問(wèn)系統(tǒng),其特征在于,所述數(shù)據(jù)節(jié)點(diǎn)高度調(diào)整模塊還包括: 單個(gè)數(shù)據(jù)節(jié)點(diǎn)高度調(diào)整模塊:根據(jù)所述Π和所述f2的比值,對(duì)單個(gè)所述鍵值對(duì)的節(jié)點(diǎn)高度進(jìn)行調(diào)整; 所有數(shù)據(jù)節(jié)點(diǎn)高度調(diào)整模塊:根據(jù)所有數(shù)據(jù)節(jié)點(diǎn)平均高度與所有節(jié)點(diǎn)最大高度進(jìn)行比較判斷,調(diào)整所有數(shù)據(jù)節(jié)點(diǎn)平均高度。
9.根據(jù)權(quán)利要求8所 述鍵值存儲(chǔ)的數(shù)據(jù)訪問(wèn)系統(tǒng),其特征在于,所述單個(gè)數(shù)據(jù)節(jié)點(diǎn)高度調(diào)整模塊還包括: 判斷模塊:判斷如果所述Π為O,則將所述f2的值賦值給所述Π,并將所述f2置為O,若所述fl不為O,則計(jì)算f2與fl的比值; 節(jié)點(diǎn)高度增加模塊:如果所述f2與Π的比值大于等于K,所述K大于I,并且所述鍵值對(duì)的節(jié)點(diǎn)高度沒(méi)有達(dá)到所述跳表的最大值,則將所述鍵值對(duì)的節(jié)點(diǎn)高度增加,如果所述鍵值對(duì)的節(jié)點(diǎn)高度已經(jīng)達(dá)到所述跳表的最大值,則保持所述鍵值對(duì)的節(jié)點(diǎn)高度不變; 節(jié)點(diǎn)高度降低模塊:如果所述f2與Π的比值小于等于M,所述M小于I并且大于O,并且所述鍵值對(duì)的節(jié)點(diǎn)高度沒(méi)有達(dá)到所述跳表的最小值,則將所述鍵值對(duì)的節(jié)點(diǎn)高度降低,如果所述鍵值對(duì)的節(jié)點(diǎn)高度已經(jīng)達(dá)到所述跳表的最小值,則保持所述鍵值對(duì)的節(jié)點(diǎn)高度不變; 節(jié)點(diǎn)高度保持模塊:如果所述f2與Π的比值大于所述M,并且小于所述K,則保持所述鍵值對(duì)的節(jié)點(diǎn)高度不變。
10.根據(jù)權(quán)利要求8所述鍵值存儲(chǔ)的數(shù)據(jù)訪問(wèn)系統(tǒng),其特征在于,所述所有數(shù)據(jù)節(jié)點(diǎn)高度調(diào)整模塊還包括: 數(shù)據(jù)節(jié)點(diǎn)平均高度計(jì)算模塊:在一段時(shí)間后,計(jì)算所有數(shù)據(jù)節(jié)點(diǎn)平均高度,如果所述節(jié)點(diǎn)平均高度大于Q*所有節(jié)點(diǎn)最大高度,或小于P*所有節(jié)點(diǎn)最大高度,其中,Q和P為大于O并且小于1,并且Q大于P,則計(jì)算所述每個(gè)節(jié)點(diǎn)所述fI占所有節(jié)點(diǎn)總訪問(wèn)次數(shù)的百分比R,將所述節(jié)點(diǎn)平均高度設(shè)置為R*所有節(jié)點(diǎn)最大高度。
【文檔編號(hào)】H04L29/08GK103780692SQ201410027157
【公開(kāi)日】2014年5月7日 申請(qǐng)日期:2014年1月13日 優(yōu)先權(quán)日:2014年1月13日
【發(fā)明者】岳銀亮, 熊勁, 陳明宇 申請(qǐng)人:中國(guó)科學(xué)院計(jì)算技術(shù)研究所