本發(fā)明涉及緩存技術(shù),尤其涉及改善緩存命中率的預(yù)取數(shù)據(jù)局部性組織方法。
背景技術(shù):緩存是多級(jí)存儲(chǔ)系統(tǒng)中非常重要的組成部分,緩存預(yù)取是一項(xiàng)重要的提高緩存效率的技術(shù)。訪問(wèn)數(shù)據(jù)記錄pij時(shí)首先查找其訪問(wèn)位置(索引查找或元數(shù)據(jù)查找等),當(dāng)未能在緩存中命中時(shí),緩存預(yù)取通過(guò)一次存儲(chǔ)訪問(wèn)將pij所在低級(jí)存儲(chǔ)層次中的預(yù)取數(shù)據(jù)記錄集合Pi:{pi1,...,pin}預(yù)取到緩存中,并將pi1pin的訪問(wèn)位置修改為緩存中對(duì)應(yīng)的位置,期望其后出現(xiàn)較多對(duì)pi1~pin的訪問(wèn)。其中,稱(chēng)Pi為pi1,...,pin的預(yù)取入口,pij為此次預(yù)取的預(yù)取首記錄。所訪問(wèn)的數(shù)據(jù)記錄可以是定長(zhǎng)數(shù)據(jù)記錄,也可以是變長(zhǎng)數(shù)據(jù)記錄。緩存預(yù)取數(shù)據(jù)內(nèi)的空間局部性決定了預(yù)取機(jī)制是否有效:具有較好空間局部性的緩存預(yù)取數(shù)據(jù)能夠使一次預(yù)取帶來(lái)較多的緩存命中,減少低層次存儲(chǔ)的訪問(wèn),而空間局部性較差的緩存預(yù)取數(shù)據(jù)使預(yù)取機(jī)制得不到收益。為了使預(yù)取機(jī)制發(fā)揮更大的作用,需要改善預(yù)取數(shù)據(jù)的空間局部性。
技術(shù)實(shí)現(xiàn)要素:因此,本發(fā)明的目的在于克服上述現(xiàn)有技術(shù)的缺陷,提供一種改善緩存預(yù)取數(shù)據(jù)局部性的方法。本發(fā)明的目的是通過(guò)以下技術(shù)方案實(shí)現(xiàn)的:一方面,本發(fā)明提供了一種改善緩存預(yù)取數(shù)據(jù)局部性的方法,所述方法包括:統(tǒng)計(jì)緩存中每個(gè)預(yù)取數(shù)據(jù)記錄集合的預(yù)取命中次數(shù),所述預(yù)取命中次數(shù)為該集合中被訪問(wèn)的數(shù)據(jù)記錄的總數(shù);對(duì)于其預(yù)取命中次數(shù)小于設(shè)定的命中閾值的預(yù)取數(shù)據(jù)記錄集合,在將該集合換出緩存時(shí),將該集合中被訪問(wèn)的數(shù)據(jù)記錄寫(xiě)入到新的存儲(chǔ)區(qū)域,與該存儲(chǔ)區(qū)域中的其他數(shù)據(jù)形成新的預(yù)取數(shù)據(jù)記錄集合。上述方法中,還可包括:對(duì)于緩存中每個(gè)預(yù)取數(shù)據(jù)記錄集合:將該集合中首次被訪問(wèn)的數(shù)據(jù)記錄標(biāo)記為特殊記錄;計(jì)算該集合中當(dāng)前被訪問(wèn)的數(shù)據(jù)記錄與上次被訪問(wèn)的數(shù)據(jù)記錄之間的訪問(wèn)間隔,如果該訪問(wèn)間隔大于設(shè)定的間隔閾值,則將當(dāng)前被訪問(wèn)的數(shù)據(jù)記錄標(biāo)記為特殊記錄;對(duì)于其預(yù)取命中次數(shù)小于命中閾值的預(yù)取數(shù)據(jù)記錄集合,在將該集合換出緩存時(shí),將被標(biāo)記為特殊記錄的數(shù)據(jù)記錄的預(yù)取入口修改為所述新的預(yù)取數(shù)據(jù)記錄集合。上述方法中,所述訪問(wèn)間隔可為時(shí)間間隔、訪問(wèn)次數(shù)間隔、自定義的邏輯間隔或者上述間隔的組合。上述方法中,還可包括對(duì)于其預(yù)取命中次數(shù)小于命中閾值的預(yù)取數(shù)據(jù)記錄集合,在將該集合換出緩存時(shí),將該集合中被訪問(wèn)的數(shù)據(jù)記錄預(yù)取入口都修改為所述新的預(yù)取數(shù)據(jù)記錄集合。又一方面,本發(fā)明還提供了一種改善緩存預(yù)取數(shù)據(jù)局部性的系統(tǒng),所述系統(tǒng)包括:用于統(tǒng)計(jì)緩存中每個(gè)預(yù)取數(shù)據(jù)記錄集合的預(yù)取命中次數(shù)的裝置,所述預(yù)取命中次數(shù)為該集合中被訪問(wèn)的數(shù)據(jù)記錄的總數(shù);用于對(duì)于其預(yù)取命中次數(shù)小于設(shè)定的命中閾值的預(yù)取數(shù)據(jù)記錄集合,在將該集合換出緩存時(shí),將該集合中被訪問(wèn)的數(shù)據(jù)記錄寫(xiě)入到新的存儲(chǔ)區(qū)域,與該存儲(chǔ)區(qū)域中的其他數(shù)據(jù)形成新的預(yù)取數(shù)據(jù)記錄集合的裝置。上述系統(tǒng)中,還可包括標(biāo)記裝置和修改裝置,所述標(biāo)記裝置可用于對(duì)于緩存中每個(gè)預(yù)取數(shù)據(jù)記錄集合:將該集合中首次被訪問(wèn)的數(shù)據(jù)記錄標(biāo)記為特殊記錄;計(jì)算該集合中當(dāng)前被訪問(wèn)的數(shù)據(jù)記錄與上次被訪問(wèn)的數(shù)據(jù)記錄之間的訪問(wèn)間隔,如果該訪問(wèn)間隔大于設(shè)定的間隔閾值,則將當(dāng)前被訪問(wèn)的數(shù)據(jù)記錄標(biāo)記為特殊記錄;所述修改裝置可用于對(duì)于其預(yù)取命中次數(shù)小于命中閾值的預(yù)取數(shù)據(jù)記錄集合,在將該集合換出緩存時(shí),將被標(biāo)記為特殊記錄的數(shù)據(jù)記錄的預(yù)取入口修改為所述新的預(yù)取數(shù)據(jù)記錄集合。在又一方面,本發(fā)明還提供了一種緩存訪問(wèn)方法,該方法包括:對(duì)于待訪問(wèn)的數(shù)據(jù)記錄,如果緩存命中,則將緩存中包含該待訪問(wèn)的數(shù)據(jù)記錄的預(yù)取數(shù)據(jù)記錄集合的預(yù)取命中次數(shù)增加1;如果緩存未命中且有空的緩存項(xiàng),則將包含該待訪問(wèn)的數(shù)據(jù)記錄的預(yù)取數(shù)據(jù)記錄集合預(yù)取到該緩存項(xiàng)中,并將該預(yù)取數(shù)據(jù)記錄集合的預(yù)取命中次數(shù)增加1;如果緩存未命中且沒(méi)有空的緩存項(xiàng),則執(zhí)行:判斷選定的緩存項(xiàng)中預(yù)取數(shù)據(jù)記錄集合的預(yù)取命中次數(shù)是否小于設(shè)定的命中閾值,如果小于,則將該集合中被訪問(wèn)的數(shù)據(jù)記錄寫(xiě)入到新的存儲(chǔ)區(qū)域,與該存儲(chǔ)區(qū)域中的其他數(shù)據(jù)形成新的預(yù)取數(shù)據(jù)記錄集合;以及將包含該待訪問(wèn)的數(shù)據(jù)記錄的預(yù)取數(shù)據(jù)記錄集合預(yù)取到該選定的緩存項(xiàng)中,并將該預(yù)取數(shù)據(jù)記錄集合的預(yù)取命中次數(shù)增加1。上述緩存訪問(wèn)方法中,還可包括:對(duì)于緩存中每個(gè)預(yù)取數(shù)據(jù)記錄集合:將該集合中首次被訪問(wèn)的數(shù)據(jù)記錄標(biāo)記為特殊記錄;計(jì)算該集合中當(dāng)前被訪問(wèn)的數(shù)據(jù)記錄與上次被訪問(wèn)的數(shù)據(jù)記錄之間的訪問(wèn)間隔,如果該訪問(wèn)間隔大于設(shè)定的間隔閾值,則將當(dāng)前被訪問(wèn)的數(shù)據(jù)記錄標(biāo)記為特殊記錄;在將其預(yù)取命中次數(shù)小于命中閾值的預(yù)取數(shù)據(jù)記錄集合換出緩存時(shí),將被標(biāo)記為特殊記錄的數(shù)據(jù)記錄的預(yù)取入口修改為所述新的預(yù)取數(shù)據(jù)記錄集合。上述緩存訪問(wèn)方法中,還可包括在將其預(yù)取命中次數(shù)小于命中閾值的預(yù)取數(shù)據(jù)記錄集合換出緩存時(shí),將該集合中被訪問(wèn)的數(shù)據(jù)記錄預(yù)取入口都修改為所述新的預(yù)取數(shù)據(jù)記錄集合。上述緩存訪問(wèn)方法,還可包括:當(dāng)所述新的預(yù)取數(shù)據(jù)記錄集合中的數(shù)據(jù)記錄個(gè)數(shù)達(dá)到設(shè)定的閾值時(shí),對(duì)于緩存中其預(yù)取命中次數(shù)小于設(shè)定的命中閾值的每個(gè)預(yù)取數(shù)據(jù)記錄集合,將該集合中被訪問(wèn)的數(shù)據(jù)記錄寫(xiě)入到該新的預(yù)取數(shù)據(jù)記錄集合中;停止對(duì)該新的預(yù)取數(shù)據(jù)記錄集合的寫(xiě)入,獲取空閑的緩存空間用于存儲(chǔ)另一個(gè)新的預(yù)取數(shù)據(jù)記錄集合。與現(xiàn)有技術(shù)相比,本發(fā)明提供的改善緩存預(yù)取數(shù)據(jù)局部性的方法能有效降低預(yù)取次數(shù),提高緩存命中率。附圖說(shuō)明以下參照附圖對(duì)本發(fā)明實(shí)施例作進(jìn)一步說(shuō)明,其中:圖1為根據(jù)本發(fā)明實(shí)施例的改善緩存預(yù)取數(shù)據(jù)局部性的方法的流程示意圖;圖2為根據(jù)本發(fā)明實(shí)施例的緩存訪問(wèn)方法的流程示意圖。具體實(shí)施方式為了使本發(fā)明的目的,技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖通過(guò)具體實(shí)施例對(duì)本發(fā)明進(jìn)一步詳細(xì)說(shuō)明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。要改善緩存預(yù)取數(shù)據(jù)局部性需要解決兩個(gè)問(wèn)題:確定哪些緩存預(yù)取數(shù)據(jù)的局部性較差,需要對(duì)其進(jìn)行改善;以及如何改善這些緩存預(yù)取數(shù)據(jù)的局部性。從某個(gè)預(yù)取數(shù)據(jù)記錄集合(例如,Pi)被預(yù)取到緩存中,到其被換出緩存之前,該集合中將會(huì)有若干個(gè)數(shù)據(jù)記錄被訪問(wèn),這些被訪問(wèn)的數(shù)據(jù)記錄的集合(例如,Hi:{pij1,...,pijm},)可稱(chēng)為此次預(yù)取的預(yù)取命中數(shù)據(jù),這些被訪問(wèn)的數(shù)據(jù)記錄的個(gè)數(shù)(例如,m)可以被稱(chēng)為此次預(yù)取的預(yù)取命中次數(shù)。例如,在將預(yù)取數(shù)據(jù)記錄集合Pi預(yù)取到緩存中后,期望此次預(yù)取的預(yù)取命中次數(shù)較快地超過(guò)一個(gè)閾值,如果未達(dá)到此要求,則說(shuō)明預(yù)取Pi沒(méi)有發(fā)揮作用或者發(fā)揮了較少的作用,稱(chēng)此種情況為未達(dá)到預(yù)取效果,表明此次預(yù)取數(shù)據(jù)內(nèi)部的空間局部性較差,應(yīng)當(dāng)對(duì)這些預(yù)取數(shù)據(jù)進(jìn)行適當(dāng)?shù)闹匦虏季謴亩纳凭植啃?。圖1給出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的改善緩存預(yù)取數(shù)據(jù)局部性的方法的流程示意圖。該方法統(tǒng)計(jì)緩存中每個(gè)預(yù)取數(shù)據(jù)記錄集合的預(yù)取命中次數(shù),對(duì)于其預(yù)取命中次數(shù)小于設(shè)定的命中閾值的預(yù)取數(shù)據(jù)記錄集合(例如Pi),在將該集合換出緩存時(shí),將該集合中被訪問(wèn)的數(shù)據(jù)記錄(即預(yù)取命中數(shù)據(jù),例如Hi)冗余寫(xiě)入到新的存儲(chǔ)區(qū)域,與該存儲(chǔ)區(qū)域中的其他數(shù)據(jù)形成新的預(yù)取數(shù)據(jù)記錄集合(例如為P)。其中,所述命中閾值可以根據(jù)實(shí)際系統(tǒng)環(huán)境或用戶需求來(lái)進(jìn)行設(shè)置,可以為靜態(tài)閾值,也可以是動(dòng)態(tài)閾值,例如可以將命中閾值設(shè)定為某個(gè)預(yù)定的整數(shù)值,也可以將命中閾值設(shè)置為預(yù)取數(shù)據(jù)記錄集合中元素個(gè)數(shù)的百分比,例如10%×|Pi|,20%×|Pi|,30%×|Pi|等。所述預(yù)取命中次數(shù)為該集合中被訪問(wèn)的數(shù)據(jù)記錄的總數(shù)。在其他實(shí)施例中,所述預(yù)取命中次數(shù)也可以是對(duì)該預(yù)取數(shù)據(jù)記錄集合的訪問(wèn)次數(shù)。通過(guò)上述方法被冗余寫(xiě)入到該新的預(yù)取數(shù)據(jù)記錄集合中的預(yù)取命中數(shù)據(jù)與該集合中其他數(shù)據(jù)記錄形成一批新的空間局部性較好的預(yù)取數(shù)據(jù);該集合中的其他數(shù)據(jù)記錄可以是通過(guò)同樣的方法寫(xiě)入的冗余數(shù)據(jù),也可以是寫(xiě)入的新產(chǎn)生的數(shù)據(jù)記錄,該集合中可以存在重復(fù)的數(shù)據(jù)記錄,也可以通過(guò)某種方法去除重復(fù)的數(shù)據(jù)記錄。在其他實(shí)施例中,可以同時(shí)存在一個(gè)或多個(gè)這樣的新的預(yù)取數(shù)據(jù)記錄集合。當(dāng)存在多個(gè)時(shí),將所確定的要改善局部性的預(yù)取數(shù)據(jù)記錄集合中被訪問(wèn)的數(shù)據(jù)記錄按照某種分類(lèi)寫(xiě)入到其中一個(gè)集合中。另外,不限定所形成的新的預(yù)取數(shù)據(jù)記錄集合所在的存儲(chǔ)介質(zhì),可以在寫(xiě)緩存中,也可以在其他層次的存儲(chǔ)介質(zhì)中,還可以從寫(xiě)緩存轉(zhuǎn)入到其他層次的存儲(chǔ)介質(zhì)中;當(dāng)訪問(wèn)存在多個(gè)副本的數(shù)據(jù)記錄時(shí)優(yōu)先從緩存中訪問(wèn),如不在緩存中,則通過(guò)預(yù)取方式進(jìn)入到緩存中后訪問(wèn)。在冗余寫(xiě)入這些預(yù)取命中數(shù)據(jù)(例如Hi)之后,同一條數(shù)據(jù)記錄可能存在于多個(gè)預(yù)取數(shù)據(jù)記錄集合中,此時(shí)被冗余的預(yù)取命中數(shù)據(jù)中每一條數(shù)據(jù)記錄的預(yù)取入口有多種選擇,可以不做更改(例如,仍然為Pi),也可以定位到新的預(yù)取位置(例如P),還可以根據(jù)訪問(wèn)的情況做出選擇,不同的預(yù)取入口定位策略所適用的環(huán)境不同。在本發(fā)明的一個(gè)優(yōu)選實(shí)施例中,該方法還包括下列步驟:對(duì)于緩存中每個(gè)預(yù)取數(shù)據(jù)記錄集合:將該集合中首次被訪問(wèn)的數(shù)據(jù)記錄標(biāo)記為特殊記錄;以及計(jì)算該集合中當(dāng)前被訪問(wèn)的數(shù)據(jù)記錄與上次被訪問(wèn)的數(shù)據(jù)記錄之間的訪問(wèn)間隔,如果該訪問(wèn)間隔大于設(shè)定的間隔閾值,則將當(dāng)前被訪問(wèn)的數(shù)據(jù)記錄標(biāo)記為特殊記錄。這樣,對(duì)于其預(yù)取命中次數(shù)小于命中閾值的預(yù)取數(shù)據(jù)記錄集合,在將該集合換出緩存時(shí),將該集合中被訪問(wèn)的數(shù)據(jù)記錄冗余寫(xiě)入到新的存儲(chǔ)區(qū)域,與該存儲(chǔ)區(qū)域中的其他數(shù)據(jù)形成新的預(yù)取數(shù)據(jù)記錄集合,同時(shí)還可以將該集合中被標(biāo)記為特殊記錄的數(shù)據(jù)記錄的預(yù)取入口修改為所述新的預(yù)取數(shù)據(jù)記錄集合。其中,訪問(wèn)間隔可以是時(shí)間間隔、訪問(wèn)次數(shù)間隔以及自定義的某種邏輯間隔中的一種,也可以是多種間隔類(lèi)型組合(其中一種間隔過(guò)長(zhǎng)即可標(biāo)記為特殊記錄)。間隔閾值可以根據(jù)訪問(wèn)間隔的類(lèi)型來(lái)設(shè)置。在其他實(shí)施例中,也可以將進(jìn)行上述冗余寫(xiě)入的所有數(shù)據(jù)記錄的預(yù)取入口都修改為所述新的預(yù)取數(shù)據(jù)記錄集合?;蛘咭部梢匀坎恍薷?。從上文所述可以看出,該改善緩存預(yù)取數(shù)據(jù)局部性的方法可以伴隨緩存訪問(wèn)和緩存替換過(guò)程而運(yùn)行。在本發(fā)明的又一個(gè)實(shí)施例中,還提供了一種結(jié)合上述改善緩存預(yù)取數(shù)據(jù)局部性方法的緩存訪問(wèn)方法。該緩存訪問(wèn)方法執(zhí)行過(guò)程如下:當(dāng)訪問(wèn)某個(gè)數(shù)據(jù)記錄(假設(shè)為pij)時(shí),分三種情況進(jìn)行處理:(1)當(dāng)訪問(wèn)未能在緩存中命中時(shí)(即該數(shù)據(jù)記錄pij不在緩存中),如果存在空的緩存項(xiàng),例如緩存項(xiàng)Ck,則將pij所在預(yù)取數(shù)據(jù)記錄集合Pi:{pi1,...,pin}預(yù)取到緩存項(xiàng)Ck中,此時(shí)在預(yù)取完成后將pij加入到Hk中,遞增hk,并標(biāo)記pij為特殊記錄;其中,Hk是與緩存項(xiàng)Ck對(duì)應(yīng)的記錄預(yù)取命中數(shù)據(jù)的集合,其數(shù)據(jù)結(jié)構(gòu)可以例如為隊(duì)列,位圖等,hk用于記錄預(yù)取命中次數(shù)計(jì)數(shù)。如果沒(méi)有空的緩存項(xiàng),則執(zhí)行緩存替換步驟(將在下文中介紹),用Pi替換所選的緩存項(xiàng)Ck中的原有內(nèi)容。(2)訪問(wèn)在緩存中命中(例如,Pi已經(jīng)被預(yù)取到緩存項(xiàng)Ck中)且hk<Ti時(shí),此時(shí)如果pij還未在Hk中,則將其加入到Hk中,遞增hk,并計(jì)算上次訪問(wèn)Pi中的元素和當(dāng)前訪問(wèn)的間隔I,如果I>TI,則標(biāo)記pij為特殊記錄;其中,Ti為命中閾值,TI為間隔閾值,其可根據(jù)訪問(wèn)間隔類(lèi)型來(lái)確定,兩者可以是靜態(tài)閾值,也可以是動(dòng)態(tài)閾值。(3)訪問(wèn)在緩存中命中且預(yù)取命中次數(shù)hk≥Ti時(shí),此時(shí)遞增hk。其中,將pij加入到Hk中例如可以指將pij在緩存中的邏輯或物理指針保存到記錄Hk的數(shù)據(jù)結(jié)構(gòu)中(加入之前判斷pij是否已經(jīng)Hk中存在,不存在時(shí)加入)。當(dāng)要將緩存項(xiàng)Ck的內(nèi)容將要從Pi替換為Pl時(shí)(例如,要訪問(wèn)的數(shù)據(jù)記錄在Pl中,需要將Pl預(yù)取到緩存項(xiàng)Ck中),分兩種情況處理:(1)如果hk<Ti,則將Hk中的數(shù)據(jù)記錄寫(xiě)入到冗余數(shù)據(jù)記錄集合Pw中,同時(shí)更改Hk中標(biāo)記為特殊記錄的預(yù)取入口為Pw,然后清空Hk并置hk為0;(2)如果hk≥Ti,則清空Hk并置hk為0。其中,Pw的存儲(chǔ)位置可以在緩存中(例如,寫(xiě)緩存),也可以在其他層次的存儲(chǔ)介質(zhì)中,還可以從寫(xiě)緩存轉(zhuǎn)入到其他層次的存儲(chǔ)介質(zhì)中。Pw中除按上述方法冗余寫(xiě)入的數(shù)據(jù)記錄外,還可以寫(xiě)入新產(chǎn)生的數(shù)據(jù)記錄;此時(shí),冗余寫(xiě)入的數(shù)據(jù)記錄可能存在兩個(gè)副本(Pi和Pw中各一),訪問(wèn)存在多個(gè)副本的數(shù)據(jù)記錄時(shí)優(yōu)先從緩存中訪問(wèn),如不在緩存中,則通過(guò)預(yù)取方式進(jìn)入到緩存中后訪問(wèn)。當(dāng)冗余數(shù)據(jù)記錄集合Pw中的存儲(chǔ)空間耗盡或者其中的數(shù)據(jù)記錄個(gè)數(shù)達(dá)到上限要求,此時(shí)掃描所有緩存項(xiàng)C1~Cn,當(dāng)掃描緩存項(xiàng)Ck(其中緩存集合為Pi)時(shí),分兩種情況處理:(1)如果hk<Ti,則將Hk中的數(shù)據(jù)記錄寫(xiě)入到Pw中,同時(shí)更改Hk中標(biāo)記為特殊記錄的預(yù)取入口為Pw,最后清空Hk并置hk為0;(2)如果hk≥Ti,則不執(zhí)行動(dòng)作。然后,停止向Pw中寫(xiě)入新的數(shù)據(jù)記錄,繼續(xù)獲取空閑緩存存儲(chǔ)空間使其成為新的冗余數(shù)據(jù)記錄集合Pw′。為更好地理解上述的緩存訪問(wèn)方法,參照?qǐng)D2對(duì)該緩存訪問(wèn)方法的執(zhí)行過(guò)程進(jìn)行舉例說(shuō)明。在該示例中假設(shè)緩存項(xiàng)個(gè)數(shù)為4,所用緩存替換算法為最近最少使用(LRU)算法,用j作為pij在緩存項(xiàng)Ck中的邏輯指針(通過(guò)記錄數(shù)字j即可實(shí)現(xiàn)將pij加入到集合Hk中),令命中閾值Ti=10%×|Pi|,設(shè)定間隔閾值TI的值為4,可以寫(xiě)入的新的預(yù)取記錄集合中記錄個(gè)數(shù)上限要求為10,該新的預(yù)取記錄集合的存儲(chǔ)空間位于寫(xiě)緩存中。初始狀態(tài)時(shí),緩存全部為空,預(yù)取命中數(shù)據(jù)集合全部為空,預(yù)取命中次數(shù)為0。假設(shè)當(dāng)前系統(tǒng)中,已存在6個(gè)如表1所示預(yù)取數(shù)據(jù)記錄集合P1-P6。表2給出了該示例中要進(jìn)行的訪問(wèn)序列1-20,其中訪問(wèn)序列1-7,12-20為讀訪問(wèn);訪問(wèn)序列8-11為寫(xiě)訪問(wèn)。訪問(wèn)序列1表示讀數(shù)據(jù)記錄p1,2,訪問(wèn)序列8表示寫(xiě)數(shù)據(jù)記錄p7,1,以此類(lèi)推。表1P1P2P3P4P5P6p1,1~p1,22p2,1~p2,18p3,1~p3,15p4,1~p4,12p5,1~p5,25p6,1~p6,21表2序號(hào)12345678910類(lèi)型讀讀讀讀讀讀讀寫(xiě)寫(xiě)寫(xiě)記錄p1,2p2,5p3,1p4,9p2,6p2,7p1,3p7,1p7,2p7,3序號(hào)11121314151617181920類(lèi)型寫(xiě)讀讀讀讀讀讀讀讀讀記錄p7,4p5,10p5,11p5,10p1,2p6,3p1,4p3,2p3,11p4,12繼續(xù)參考圖2,訪問(wèn)上述序列1-20的具體過(guò)程為:1)執(zhí)行步驟101,判斷所訪問(wèn)數(shù)據(jù)p1,2是否在緩存中;例如,緩存系統(tǒng)可通過(guò)查找操作確定所訪問(wèn)數(shù)據(jù)記錄是否在緩存中。如果p1,2不在緩存中,那么需要將p1,2所在的預(yù)取數(shù)據(jù)記錄集合P1預(yù)期到緩存中。假設(shè)系統(tǒng)選擇將P1預(yù)期到緩存項(xiàng)C1中,轉(zhuǎn)至步驟104繼續(xù)執(zhí)行。2)執(zhí)行步驟104,判斷緩存項(xiàng)C1中是否為空;也就是說(shuō),緩存系統(tǒng)在將P1預(yù)取到緩存項(xiàng)C1之前,要判斷C1中是否有數(shù)據(jù)。如果緩存項(xiàng)C1為空,則轉(zhuǎn)到步驟110繼續(xù)執(zhí)行。3)執(zhí)行步驟110,將P1預(yù)取到緩存項(xiàng)C1中;4)執(zhí)行步驟111,將p1,2加入到C1的預(yù)取命中集合H1中;然后返回步驟101,繼續(xù)處理下一個(gè)訪問(wèn)序列。具體地,在C1對(duì)應(yīng)的預(yù)取命中數(shù)據(jù)集合H1中加入p1,2的邏輯指針2,標(biāo)記p1,2為特殊記錄,遞增預(yù)取命中次數(shù)h1。按照與過(guò)程1)~5)相同的方式,處理訪問(wèn)序列2~4,處理完畢后緩存項(xiàng)中存儲(chǔ)的預(yù)取數(shù)據(jù)記錄集合,對(duì)應(yīng)的預(yù)取命中數(shù)據(jù)集合,及對(duì)應(yīng)預(yù)取命中次數(shù)可如下表3所示(下劃線表示特殊記錄標(biāo)記):表3緩存項(xiàng)預(yù)取數(shù)據(jù)記錄集合預(yù)取命中數(shù)據(jù)集合預(yù)取命中次數(shù)C1P121C2P251C3P311C4P491參考圖2以及表2所示的訪問(wèn)序列,下面繼續(xù)處理訪問(wèn)序列5:5)執(zhí)行步驟101,判斷p2,6是否在緩存中;這里p2,6已經(jīng)在緩存中,則轉(zhuǎn)至步驟102繼續(xù)執(zhí)行。6)執(zhí)行步驟102,判斷預(yù)取命中次數(shù)h2是否小于命中閾值;如果小于,則轉(zhuǎn)至步驟103繼續(xù)執(zhí)行,否則返回步驟101,處理下一個(gè)訪問(wèn)序列。此時(shí),h2此時(shí)為1,小于閾值T2=10%×|P2|=10%×18。7)執(zhí)行步驟103,將p2,6加入到C2的預(yù)取命中集合H2中;然后返回步驟101,繼續(xù)處理下一個(gè)訪問(wèn)序列。在步驟103,還需要計(jì)算如上文所述的訪問(wèn)間隔I;這里與對(duì)C2的前一次的訪問(wèn)間隔I為3,小于間隔閾值TI,因此在C2對(duì)應(yīng)的預(yù)取命中數(shù)據(jù)集合H2中記錄p2,6的邏輯指針6,遞增預(yù)取命中次數(shù)h2。按照與過(guò)程5)~7)相同的方式,繼續(xù)處理訪問(wèn)序列6~7,不同的是,對(duì)于訪問(wèn)序列6,在執(zhí)行102時(shí)h2已經(jīng)大于命中閾值T2,因此不需執(zhí)行步驟103;對(duì)于訪問(wèn)序列7,在執(zhí)行103時(shí),與對(duì)C1的前一次的訪問(wèn)間隔I為6,大于間隔閾值TI,因此除將p1,3的邏輯指針3加入到H1中并遞增h1以外,還需要將其標(biāo)記為特殊記錄。接著,繼續(xù)處理訪問(wèn)序列8~11。對(duì)于寫(xiě)入序列8~11,緩存系統(tǒng)會(huì)生成一個(gè)新的預(yù)取數(shù)據(jù)記錄集合P7,將p7,1~p7,4寫(xiě)入到P7中(本示例中,假設(shè)P7的存儲(chǔ)位置在寫(xiě)緩存Pw中)。此時(shí),各緩存項(xiàng)中存儲(chǔ)的預(yù)取數(shù)據(jù)記錄集合,對(duì)應(yīng)的預(yù)取命中數(shù)據(jù)集合,及對(duì)應(yīng)的預(yù)取命中次數(shù)如下表4所示(下劃線表示特殊記錄標(biāo)記,連字符表示信息為空):表4接著處理訪問(wèn)序列12,即讀數(shù)據(jù)記錄p5,10:8)執(zhí)行步驟101,判斷p5,10是否在緩存中;這里p5,10不再緩存中,假設(shè)系統(tǒng)選擇p5,10所在的預(yù)取數(shù)據(jù)訪問(wèn)記錄集合P5預(yù)取到緩存項(xiàng)C1中,接著轉(zhuǎn)至步驟104執(zhí)行。9)執(zhí)行步驟104,判斷緩存項(xiàng)C1是否為空;如果緩存項(xiàng)為空,則轉(zhuǎn)至步驟110;如果緩存項(xiàng)不為空,則需要將緩存項(xiàng)C1中的內(nèi)容換出緩存,此時(shí)轉(zhuǎn)至步驟105繼續(xù)執(zhí)行。10)執(zhí)行步驟105,判斷預(yù)取命中次數(shù)h1是否小于或等于命中閾值;如果小于或等于命中閾值,則執(zhí)行步驟106;如果大于命中閾值,則轉(zhuǎn)至步驟110繼續(xù)執(zhí)行。具體地,此時(shí)h1為2,小于命中閾值T1=10%×|P1|=10%×22。這說(shuō)明此時(shí)C1中的預(yù)取數(shù)據(jù)訪問(wèn)記錄集合P1中的數(shù)據(jù)局部性較差,需要進(jìn)行改善。反之,如果大于命中閾值,則說(shuō)明不需要改善這部分?jǐn)?shù)據(jù)的局部性,即不需要對(duì)現(xiàn)在緩存項(xiàng)C1的數(shù)據(jù)進(jìn)行額外處理,直接將P5換入到C1即可。11)執(zhí)行步驟106,將H1中的數(shù)據(jù)記錄寫(xiě)入集合P7中;具體地,從緩存項(xiàng)C1對(duì)應(yīng)的預(yù)取命中數(shù)據(jù)集合H1中依次讀出邏輯指針2和3,并據(jù)此從C1中讀出第2和第3個(gè)記錄p1,2和p1,3,將其寫(xiě)入到P7中(成為P7中的p7,5和p7,6),并更改p1,2和p1,3的預(yù)取入口為P7(本實(shí)施例將這些冗余的數(shù)據(jù)記錄和新產(chǎn)生的記錄寫(xiě)入同一預(yù)取數(shù)據(jù)記錄集合)。此時(shí)p1,2,p1,3和p7,5,p7,6互為副本,由于后者在寫(xiě)緩存Pw中而P1已經(jīng)被換出緩存,所以優(yōu)先訪問(wèn)p7,5,p7,6。12)執(zhí)行步驟107,清空預(yù)取命中集合H1,并置h1為0;13)執(zhí)行步驟108,判斷寫(xiě)入集合P7是否已滿;如果未滿,則轉(zhuǎn)至步驟110繼續(xù)執(zhí)行;如果已滿,則轉(zhuǎn)至步驟109繼續(xù)執(zhí)行。這里,P7中數(shù)據(jù)記錄個(gè)數(shù)為4,小于10,未達(dá)到個(gè)數(shù)上限。14)執(zhí)行步驟110,將P5換入到緩存項(xiàng)C1中;15)執(zhí)行步驟111,將p5,10加入到C1的預(yù)取命中集合H1中;按照與過(guò)程5)~7)相同的方式,處理訪問(wèn)序列13,14,不同的是,對(duì)于訪問(wèn)序列14,執(zhí)行步驟103過(guò)程中向H1中加入p5,10的邏輯指針10時(shí),發(fā)現(xiàn)該數(shù)字已經(jīng)被記錄(與序列12訪問(wèn)相同數(shù)據(jù)記錄),因此,跳過(guò)步驟103中其他操作。處理完成后,各緩存項(xiàng)中存儲(chǔ)的預(yù)取數(shù)據(jù)記錄集合,對(duì)應(yīng)的預(yù)取命中數(shù)據(jù)集合,及對(duì)應(yīng)預(yù)取命中次數(shù)如下表5所示(下劃線表示特殊記錄標(biāo)記,連字符表示信息為空):表5對(duì)于訪問(wèn)序列15,由于p1,2和p1,3在P7中存在副本p7,5和p7,6(通過(guò)緩存查找找到副本),因此訪問(wèn)會(huì)從P7中讀取數(shù)據(jù)記錄p7,5,p7,6,不執(zhí)行其他操作。按照與過(guò)程8)~15)相同的方式,處理訪問(wèn)序列16~18,在處理過(guò)程中,按照LRU緩存替換算法,P3,P4,P2先后被換出緩存,在此過(guò)程中將p3,1,p4,9寫(xiě)入P7,由于p3,1,p4,9被標(biāo)記為特殊記錄其預(yù)取入口修改為P7,換出P2時(shí)由于預(yù)取命中次數(shù)大于閾值T2,其中預(yù)取命中數(shù)據(jù)不寫(xiě)入P7。按照與過(guò)程5)~7)相同的方式,處理訪問(wèn)序列19,在處理過(guò)程中,p3,11在緩存項(xiàng)C2中命中,在C2對(duì)應(yīng)的預(yù)取命中數(shù)據(jù)集合H2中加入p3,11的邏輯指針11,遞增預(yù)取命中次數(shù)h2。按照與過(guò)程8)~15)相同的方式,處理訪問(wèn)序列20,在處理過(guò)程中,按照LRU緩存替換算法,P5被換出緩存,在此過(guò)程中將p5,10,p5,11寫(xiě)入P7,由于p5,10被標(biāo)記為特殊記錄其預(yù)取入口修改為P7。不同的是,在執(zhí)行步驟108時(shí),P7中的數(shù)據(jù)記錄個(gè)數(shù)為10,達(dá)到了個(gè)數(shù)上限,需要執(zhí)行步驟109,具體地,掃描緩存項(xiàng)C1~C4,發(fā)現(xiàn)h1,h3,h4不滿足閾值要求,因此將p6,3,p1,4,p4,12寫(xiě)入P7(h2滿足閾值要求,因此p3,2,p3,11不寫(xiě)入),由于p6,3,p1,4,p4,12被標(biāo)記為特殊記錄,其預(yù)取入口修改為P7,最后清空C1,C3,C4對(duì)應(yīng)的預(yù)取命中數(shù)據(jù)集合H,H3,H4,并置h1,h3,h4為0。步驟109執(zhí)行完畢之后,新的預(yù)取數(shù)據(jù)記錄集合P7:{p7,1,...,p7,13}中包含13個(gè)數(shù)據(jù)記錄,其中四個(gè)為新寫(xiě)入記錄,九個(gè)為副本記錄。此時(shí)將停止對(duì)P7的寫(xiě)入操作,當(dāng)后續(xù)有新的數(shù)據(jù)產(chǎn)生或如上文所述需要冗余寫(xiě)入部分?jǐn)?shù)據(jù)記錄時(shí),從新空閑緩存存儲(chǔ)空間分配新的存儲(chǔ)區(qū)域,使其用于存儲(chǔ)新的冗余數(shù)據(jù)記錄集合P8等。處理完表2給出的所有訪問(wèn)序列之后,各緩存項(xiàng)中存儲(chǔ)的預(yù)取數(shù)據(jù)記錄集合,對(duì)應(yīng)的預(yù)取命中數(shù)據(jù)集合,及對(duì)應(yīng)預(yù)取命中次數(shù)如下表6所示(下劃線表示特殊記錄標(biāo)記,連字符表示信息為空,在P7被換出寫(xiě)緩存之前將其持久化到磁盤(pán)中):表6發(fā)明人還在內(nèi)容尋找存儲(chǔ)中的索引系統(tǒng)中,利用真實(shí)環(huán)境下的備份負(fù)載對(duì)上述的方法進(jìn)行了測(cè)試。測(cè)試結(jié)果表明,該方法減少了17.8%~56%的索引預(yù)取次數(shù),提升了8%~24%的讀取帶寬和2%~6%的寫(xiě)入帶寬;在同樣的索引系統(tǒng)中,利用為期兩周的數(shù)據(jù)同步負(fù)載的測(cè)試結(jié)果表明,預(yù)取次數(shù)下降了96%。雖然本發(fā)明已經(jīng)通過(guò)優(yōu)選實(shí)施例進(jìn)行了描述,然而本發(fā)明并非局限于這里所描述的實(shí)施例,在不脫離本發(fā)明范圍的情況下還包括所作出的各種改變以及變化。