本發(fā)明涉及一種緩存機制,特別是一種實時數(shù)據(jù)緩存機制。
背景技術(shù):
實時數(shù)據(jù)庫其底層文件頁淘汰算法依賴于程序局部性原理以及實時數(shù)據(jù)的相關(guān)特性,各種緩存淘汰算法的主要不同在于如何量化局部性。常見的有FIFO算法,LRU算法,這兩種算法的缺點是沒有使用緩存訪問次數(shù)的信息,使得對于空間局限性較弱的場景效率很低,極端情況下可能完全無法命中緩存。LIRS(Low Inter-reference Recency Set)算法,有效的避免了上述算法的缺點,并且具有較高的性能。眾所周知,緩存替換算法的高效性對于I/O系統(tǒng)整體性能有著非常重要的影響,常見的緩存替換算法有如下缺陷:
1、緩存污染問題:大量并發(fā)的對冷塊進(jìn)行訪問會對熱塊進(jìn)行不明智的替換,這在序列掃描中非常普遍。
2、循環(huán)性質(zhì)訪問問題:假如需要對一個文件進(jìn)行循環(huán)性質(zhì)的訪問,并且文件的大小略微大于緩存的大小,那么就會出現(xiàn)即將被訪問的快被當(dāng)作冷塊替換出去,一個明智的策略應(yīng)盡量保證緩存的失效率近似于緩存空間不足的比例。
3、不關(guān)注訪問的概率性特征:在多用戶訪問數(shù)據(jù)庫場景中,每條記錄的訪問都涉及B樹,即需要先訪問索引再訪問數(shù)據(jù)。
4、通用緩存替換算法沒有考慮到實時數(shù)據(jù)的特點,即時效性,數(shù)據(jù)離當(dāng)前時間越近時效性越高。
傳統(tǒng)LRU,F(xiàn)IFO算法沒有充分考慮數(shù)據(jù)的歷史訪問信息,訪問概率等信息,只是簡單的將最近訪問的數(shù)據(jù)緩存起來,這會導(dǎo)致緩存效率底下在極端情況下緩存每次訪問都不會命中,LIRS算法改進(jìn)了LRU和FIFO算法的缺點,但是沒有充分考慮到緩存數(shù)據(jù)的信息,在實時數(shù)據(jù)中越與當(dāng)前時間靠近的數(shù)據(jù)塊訪問的概率越大。
技術(shù)實現(xiàn)要素:
本發(fā)明所要解決的技術(shù)問題是提供一種實時數(shù)據(jù)緩存機制,其提高了緩存的命中率。
為解決上述技術(shù)問題,本發(fā)明所采用的技術(shù)方案是:
一種實時數(shù)據(jù)緩存機制,其特征在于:IRR表示一個頁面最近兩次訪問的距離,R表示上次訪問到至今訪問了多少其他頁,T表示頁面的時間因子,緩存首先將IRR較大者替換出緩存,如果IRR相等,則將R在[Rmax,Rmax-S]之間的T最大的頁面替換出去,Rmax為IRR相等的頁面中R最大值,Rmax-S為最大值減去S的值。
進(jìn)一步地,若一個頁面首次訪問則其IRR為無窮大,R為0,T為Tcurr-Tmax,Tmax為數(shù)據(jù)最大時間。
進(jìn)一步地,所述一種實時數(shù)據(jù)緩存機制采用的數(shù)據(jù)結(jié)構(gòu)由兩個塊單元信息數(shù)據(jù)結(jié)構(gòu)集合構(gòu)成,其中低IRR塊保存IRR值低的塊信息,高IRR塊保存高IRR塊的信息。
進(jìn)一步地,所述IRR值低的塊信息和高IRR塊的信息為鏈表或者樹。
進(jìn)一步地,所述兩個塊單元信息數(shù)據(jù)結(jié)構(gòu)對應(yīng)的物理緩存由兩部分組成,低IRR塊是局部性最高的塊需要常駐內(nèi)存內(nèi)存,高IRR塊并不是所有的塊都需要常駐內(nèi)存,只需緩存一部分,其塊的歷史信息保留為算法調(diào)度提供參考;物理緩存的長度分為低IRR塊長度Llirr和高IRR塊緩存長度Lhirr1的和。
進(jìn)一步地,所述S的值為5。
本發(fā)明與現(xiàn)有技術(shù)相比,具有以下優(yōu)點和效果:解決了一般緩存替換算法緩存污染,循環(huán)性質(zhì)訪問,不關(guān)注訪問的概率性特征,沒有考慮到實時數(shù)據(jù)的特點等問題,算法同時考慮了頁面歷史訪問信息,最近訪問頻率,以及所緩存的數(shù)據(jù)的特征,有效的提高了緩存的命中率。
附圖說明
圖1是本發(fā)明的數(shù)據(jù)結(jié)構(gòu)示意圖。
圖2是本發(fā)明的實施例time9時刻狀態(tài)示意圖。
圖3是本發(fā)明的實施例time11時刻狀態(tài)示意圖。
圖4是本發(fā)明的頻次排名示意圖。
圖5是本發(fā)明的算法命中率對比示意圖。
具體實施方式
下面通過附圖并結(jié)合實施例對本發(fā)明作進(jìn)一步的詳細(xì)說明,以下實施例是對本發(fā)明的解釋而本發(fā)明并不局限于以下實施例。
本發(fā)明的一種實時數(shù)據(jù)緩存機制,使用IRR表示一個頁面最近兩次訪問的距離,R表示上次訪問到至今訪問了多少其他頁,T表示頁面的時間因子(頁面所存數(shù)據(jù)結(jié)束時間到當(dāng)前時間的長度)。若一個頁面首次訪問則其IRR為無窮大,R為0,T為Tcurr-Tmax,Tmax為數(shù)據(jù)最大時間,算法使用一個頁面的新近訪問時間和數(shù)據(jù)時效性去量化這個頁面的局部性。因為實時數(shù)據(jù)總是越靠近當(dāng)前時間時效性越高越有可能最近被訪問。為了將最近訪問頁面的歷史訪問信息和其緩存的數(shù)據(jù)時效性考慮進(jìn)去,算法首先考慮將IRR較大者替換出緩存,如果IRR相等,則將R在[Rmax,Rmax-S]之間的T最大的頁面替換出去,Rmax為IRR相等的頁面中R最大值,Rmax-S為最大值減去S的值,S一般可以設(shè)置為5。
如圖1所示,為整個算法的使用的數(shù)據(jù)結(jié)構(gòu),由兩個塊元信息數(shù)據(jù)結(jié)構(gòu)集合組成,低IRR塊保存IRR值低的塊信息,高IRR塊保存高IRR塊的信息,這兩個信息可以是鏈表或者樹。對應(yīng)的物理緩存也由兩部分組成,低IRR塊是局部性最高的塊需要常駐內(nèi)存內(nèi)存,高IRR塊并不是所有的塊都需要常駐內(nèi)存,只需緩存一部分即可,但是其塊的歷史信息應(yīng)該保留為算法調(diào)度提供參考。物理緩存的長度分為低IRR塊長度Llirr和高IRR塊緩存長度Lhirr1的和。
實施例:
假定共有A,B,C,D,E五塊其最大時間Tmaxa=1,Tmaxb=2,Tmaxc=3,Tmaxd=4,Tmaxe=5,S=1。
如圖2所示,為time9時刻狀態(tài),A最近一次訪問是在time8,顧此時A的R值為1,然而塊A在time6和time8時刻時為倒數(shù)第二次訪問和倒數(shù)第一次訪問,兩個時間范圍內(nèi)只有塊D被訪問,所以塊A的IRR為1,塊A的T=Tcurr-Tmaxa=9-1=8。塊B最近一次訪問是在time5時刻,而time6和time8時刻訪問塊A,time7時刻訪問D,time9時刻訪問E,所以塊B的R為3(兩次訪問A只能做一次計數(shù)),IRR的值為1(time3和time5訪問B,time4訪問C),塊B的T=Tcurr-Tmaxb=9-2=7。塊C只有在time4時被訪問,所以R為4,IRR為無窮大,塊C的T=Tcurr-Tmaxc=9-3=6。塊D,E是同樣的道理。
此時假設(shè)物理緩存大小為L=Llirr+Lhirr1,Llirr=2,Lhirr1=2,即在該紋理緩存中只能存放兩個IRR值低的塊,兩個IRR值高的塊,那么低IRR塊元數(shù)據(jù)信息集合為{A,B},高IRR塊元信息集合為{C,D,E},此時在C,D,E三塊中由于其塊D,E的R值比C低故而將會常駐內(nèi)存。保留D,E而不是C是為了保留最近訪問的塊,這些塊最可能下次被訪問。A,B由于其在IRR低集合中所以A,B也常駐內(nèi)存,所以在內(nèi)存中的塊為{A,B,D,E}。
如果在time10時間內(nèi)訪問C,那么我們該如何對緩存塊進(jìn)行淘汰,從上面的分析可以知道塊C的IRR值較高,然而此時IRR較高的塊有D,E常駐內(nèi)存,則此時是把塊D和塊E中哪塊替換出內(nèi)存需要比較他們的各個參考值,由于E的IRR為無窮大所以直接換出E塊,調(diào)入D塊,在D塊進(jìn)入緩存后需要對兩個元信息集合做跟新,以確定D該屬于哪個集合。
如圖3所示,為time10時訪問塊D,然后time11時刻訪問塊E的狀態(tài),根據(jù)圖1時的計算方法可以得出塊A的R值為2,IRR值為1,T為10;塊B的R值為3,IRR值為1,T為9;塊C的R值為4,IRR值為無窮大,T為8;塊D的R值為1,IRR值為2,T值為7;塊E的R值為0,IRR值為1,T值為6。此時塊A,塊B,塊E的IRR值均為1,而低IRR緩存的大小為2,所以A,B,E中只有兩塊能在低IRR緩存中,此時只能比較R值在[Rmax-S,Rmax]即[2,3],A,B兩塊在比較范圍內(nèi),而此時Ta=10,Tb=9,所以Ta>Tb所以塊A被移除低IRR塊到高IRR塊中,塊E進(jìn)入第IRR塊中。此時低IRR塊元信息集合中有{B,E},高IRR塊元信息集合中有{D,B}。
此時我們給出一個通用的定義,一個緩存算法的優(yōu)劣主要體現(xiàn)在查詢命中率上:H=Rqcache/Rq,緩存命中率H為命中緩存的請求次數(shù)Rqcache和總請求次數(shù)Rq的商。則每次查詢的響應(yīng)時間為TRq=Tcache*H+Tdb*(1-H),其中Tcache為查詢緩存的請求響應(yīng)時間,Tdb為數(shù)據(jù)庫服務(wù)其他查詢操作和數(shù)據(jù)傳輸?shù)臅r間。由于Tdb遠(yuǎn)大于Tcache,因此提高查詢命中率就可以大幅度提高查詢響應(yīng)時間。
通過分析大量的實時數(shù)據(jù)庫查詢?nèi)罩究梢缘贸鲈L問最頻繁的數(shù)據(jù)總是在最近幾個小時內(nèi)產(chǎn)生的數(shù)據(jù),因此在空間適當(dāng)?shù)臄?shù)據(jù)庫中如果查詢緩存不出現(xiàn)大比例的緩存數(shù)據(jù)失效替換,則能保證數(shù)據(jù)庫查詢的效能。分析還發(fā)現(xiàn)查詢頻率最高的20%占據(jù)了80%的請求量如圖4所示。查詢時間局部性表現(xiàn)為,對于查詢請求序列(Q1,Q2,Q3,…Qn),Qi(1≤i≤n)表示第i次查詢請求,當(dāng)i≤j時若Qi=Qj,在間隔d=|i-j|內(nèi)產(chǎn)生的非重復(fù)查詢次數(shù)為IRqi,在第n次查詢時產(chǎn)生的非重復(fù)查詢次數(shù)為Rqn,對于一個頁面P則從當(dāng)前時刻n開始最近兩次訪問的非重復(fù)查詢次數(shù)為IRp,距當(dāng)前時刻非重復(fù)查詢次數(shù)為RP,頁面時間戳為Tp。經(jīng)過以上分析可以通過相關(guān)特征參數(shù)進(jìn)行建模,表示某個頁面的查詢熱值度函數(shù):
fhot(p)=IRp+RP+(1-Hp)*(Tn-Tp)
Hp為第n時刻頁面P的命中率,Tn為第n時刻的時間值。于是對于頁面p其熱值函數(shù)fhot(p)的值月大說明這個頁面的局部性越差,訪問的可能性越低。如圖5所示為本算法的命中率和LRU算法的命中率比較,在緩存較小區(qū)間隨著緩存空間的增高架緩存命中率提升很快,從圖中可以看出本文提出的算法比LRU算法在最優(yōu)緩存空間(查詢總量20%)下命中率有顯著提升。
本說明書中所描述的以上內(nèi)容僅僅是對本發(fā)明所作的舉例說明。本發(fā)明所屬技術(shù)領(lǐng)域的技術(shù)人員可以對所描述的具體實施例做各種各樣的修改或補充或采用類似的方式替代,只要不偏離本發(fā)明說明書的內(nèi)容或者超越本權(quán)利要求書所定義的范圍,均應(yīng)屬于本發(fā)明的保護范圍。