本發(fā)明涉及緩存技術,特別涉及一種對數(shù)據(jù)源的訪問控制方法。
背景技術:
在學校機房或網(wǎng)吧等公共上網(wǎng)場所,往往部署著數(shù)量龐大的無盤工作站。并且,所有的無盤工作站都可以遠程訪問服務器,以實現(xiàn)由服務器中的硬盤介質為這些無盤工作站提供數(shù)據(jù)的遠程集中存儲。
無盤工作站中通常由系統(tǒng)程序以及應用程序作為數(shù)據(jù)讀寫訪問發(fā)起方,其訪問的內容多為數(shù)據(jù)量較大且讀寫頻繁密集的操作系統(tǒng)或游戲應用等相關數(shù)據(jù),而公共上網(wǎng)場所里往往同時有幾十甚至幾百臺無盤工作站同時并發(fā)訪問單臺服務器。在如此大數(shù)據(jù)量的訪問情況下,無盤工作站對遠程數(shù)據(jù)的訪問性能會極大受到網(wǎng)絡響應速度、以及服務器中的硬盤介質的并發(fā)讀寫性能的限制,使得無盤工作站的用戶上機體驗往往大幅差于常規(guī)的有盤工作站。
為了提高無盤工作站對遠程數(shù)據(jù)的訪問性能,現(xiàn)有技術一直嘗試提高硬件配置。例如,為無盤工作站配置速度更快的cpu或網(wǎng)卡,以提升遠程數(shù)據(jù)訪問的網(wǎng)絡響應速度;再例如,為服務器配置運轉速度更快的硬盤,以提升存儲介質的讀寫性能。
但上述的這些解決方案必然意味著更高的成本。即,上述的這些解決方案必須以成本為代價來換取無盤工作站對遠程數(shù)據(jù)訪問性能的提升。對于對成本較為敏感的學校和網(wǎng)吧來說,這樣的成本提升通常是難以承擔的。
技術實現(xiàn)要素:
有鑒于此,本發(fā)明提供了一種對數(shù)據(jù)源的訪問控制方法,能夠借助堆棧式緩存架構中低成本的緩存資源提升遠程數(shù)據(jù)讀寫訪問的響應速度和性能。
本發(fā)明提供的一種對數(shù)據(jù)源的訪問控制方法,該訪問控制方法基于堆棧式緩存架構實現(xiàn)數(shù)據(jù)源讀寫訪問發(fā)起方對數(shù)據(jù)源的讀寫訪問,其中,堆棧式緩存架構包括臨時緩存層和數(shù)據(jù)源層、以及位于臨時緩存層與數(shù)據(jù)源層之間的預讀緩存層和回寫緩存層;
當數(shù)據(jù)源讀寫訪問發(fā)起方發(fā)起對數(shù)據(jù)源的寫訪問時,該訪問控制方法被觸發(fā)執(zhí)行如下步驟:
a1、判斷當前的寫訪問是否在臨時緩存層命中或能夠數(shù)據(jù)合并,若命中或能夠合并,則執(zhí)行步驟a2,否則觸發(fā)對臨時緩存層的數(shù)據(jù)淘汰、并在數(shù)據(jù)淘汰完成后執(zhí)行步驟a2;
a2、將當前的寫訪問對應的數(shù)據(jù)寫入臨時緩存層、并將寫入臨時緩存層的數(shù)據(jù)標記為臟數(shù)據(jù),然后結束當前的寫訪問;
當數(shù)據(jù)源讀寫訪問發(fā)起方發(fā)起對數(shù)據(jù)源的讀訪問時,該訪問控制方法被觸發(fā)執(zhí)行如下步驟:
b1、判斷當前的讀訪問是否在臨時緩存層命中,若命中,則執(zhí)行步驟b3,否則觸發(fā)對臨時緩存層的數(shù)據(jù)淘汰、并在數(shù)據(jù)淘汰完成后執(zhí)行步驟b2;
b2、在堆棧式緩存架構中向下查找當前的讀訪問對應的數(shù)據(jù),并將查找到的數(shù)據(jù)讀入至臨時緩存層,然后執(zhí)行步驟b3;
b3、從臨時緩存層讀取當前的讀訪問對應的數(shù)據(jù),然后結束當前的讀訪問;
該訪問控制方法還包括用于執(zhí)行臨時緩存層的數(shù)據(jù)淘汰的如下步驟:
c0、判斷臨時緩存層中是否存儲有數(shù)據(jù),若是,則執(zhí)行步驟c1,否則結束臨時緩存層的數(shù)據(jù)淘汰;
c1、判斷臨時緩存層中的數(shù)據(jù)是否被標記為臟數(shù)據(jù),若是,則執(zhí)行步驟c2,否則執(zhí)行步驟c8;
c2、判斷回寫緩存層是否存在足夠的空閑空間,若是,則執(zhí)行步驟c4,否則執(zhí)行步驟c3;
c3、將回寫緩存層中的部分數(shù)據(jù)淘汰至數(shù)據(jù)源層,使回寫緩存層中的空閑空間足以存放臨時緩存層中的數(shù)據(jù),然后執(zhí)行步驟c4;
c4、將臨時緩存層中的數(shù)據(jù)寫入至回寫緩存層,然后執(zhí)行步驟c5;
c5、判斷臨時緩存層中的數(shù)據(jù)是否與預讀緩存層中的數(shù)據(jù)存在交集,若是,則執(zhí)行步驟c6,否則執(zhí)行c7;
c6、將臨時緩存層中的交集數(shù)據(jù)寫入至預讀緩存層,然后執(zhí)行步驟c7;
c7、清除臨時緩存層中表示臟數(shù)據(jù)的標記,然后執(zhí)行步驟c8;
c8、丟棄臨時緩存層中的數(shù)據(jù),然后結束臨時緩存層的數(shù)據(jù)淘汰。
優(yōu)選地,步驟b2按照預讀緩存層、回寫緩存層、以及數(shù)據(jù)源層的優(yōu)先級順序逐層查找。
優(yōu)選地,步驟b2包括:
b21、判斷當前的讀訪問是否在預讀緩存層命中,若命中,則執(zhí)行b23,否則執(zhí)行步驟b22;
b22、利用預讀機制從回寫緩存層和數(shù)據(jù)源層預讀當前的讀訪問對應的數(shù)據(jù)至預讀緩存層,然后執(zhí)行步驟b23;
b23、從預讀緩存層讀取當前的讀訪問對應的數(shù)據(jù)至臨時緩存層,然后執(zhí)行b3。
優(yōu)選地,步驟b22包括:
b221、為當前的讀訪問構造預讀請求,然后執(zhí)行步驟b222;
b222、判斷預讀緩存層是否存在足夠的空閑空間,若是,則執(zhí)行步驟b224,否則執(zhí)行步驟b223;
b223、將預讀緩存層中的部分數(shù)據(jù)丟棄,使預讀緩存層中的空閑空間足以存放預讀請求對應的數(shù)據(jù),然后執(zhí)行步驟b224;
b224、從回寫緩存層讀取預讀請求對應的數(shù)據(jù)至預讀緩存層,然后執(zhí)行步驟b225;
b225、判斷預讀請求對應的數(shù)據(jù)是否在回寫緩存層全部命中,若是,則執(zhí)行步驟b23,否則執(zhí)行b226;
b226、從數(shù)據(jù)源層讀取未在回寫緩存層中命中的剩余數(shù)據(jù)至預讀緩存層,然后執(zhí)行步驟b23。
優(yōu)選地,步驟c3淘汰的部分數(shù)據(jù)為回寫緩存層中處于無訪問狀態(tài)時長最長或被訪問頻率最低的數(shù)據(jù)。
優(yōu)選地,步驟b223丟棄的部分數(shù)據(jù)為預讀緩存層中處于無訪問狀態(tài)時長最長或被訪問頻率最低的數(shù)據(jù)。
優(yōu)選地,臨時緩存層和預讀緩存層設置在數(shù)據(jù)源讀寫訪問發(fā)起方的本地存儲介質中,回寫緩存層設置在數(shù)據(jù)源讀寫訪問發(fā)起方的本地存儲介質或遠程存儲介質中,數(shù)據(jù)源層設置在數(shù)據(jù)源讀寫訪問發(fā)起方的遠程存儲介質中。
優(yōu)選地,數(shù)據(jù)源讀寫訪問發(fā)起方為無盤工作站中運行的系統(tǒng)程序或應用程序,臨時緩存層和預讀緩存層設置在無盤工作站的內存介質中,回寫緩存層設置在無盤工作站的內存介質或服務器的內存介質中,數(shù)據(jù)源層設置在服務器的硬盤介質中。
如上可見,基于本發(fā)明,堆棧式緩存架構中的臨時緩存層優(yōu)先對數(shù)據(jù)源讀寫訪問發(fā)起方的讀寫訪問做出響應,并且,通過臨時緩存層與預讀緩存層和回寫緩存層配合實現(xiàn)的淘汰機制,能夠針對被數(shù)據(jù)源讀寫訪問發(fā)起方反復連續(xù)訪問的數(shù)據(jù)更快速地做出響應。相比于cpu和硬盤的配置升級,引入臨時緩存層以及預讀緩存層和回寫緩存層等緩存資源所需的成本顯然更低,因此,本發(fā)明能夠以相對低的成本即可提升數(shù)據(jù)源讀寫訪問發(fā)起方對遠程數(shù)據(jù)讀寫訪問的響應速度和性能。
而且,對于數(shù)據(jù)源讀寫訪問發(fā)起方(例如部署于無盤工作站)和數(shù)據(jù)源層(例如部署于服務器)異地部署的情況,堆棧式存儲架構中的緩存資源可以全部或部分地設置于數(shù)據(jù)源讀寫訪問發(fā)起方的本地存儲介質中,此時,上述的技術效果更為明顯。即,被數(shù)據(jù)源讀寫訪問發(fā)起方反復連續(xù)訪問的數(shù)據(jù)能夠保留在本地存儲介質中以實現(xiàn)對緩存資源的本地訪問,因而能夠將原本需要對數(shù)據(jù)源層實施的較慢的遠程訪問轉換為對緩存資源的較快的本地訪問。從而,可以減少對數(shù)據(jù)源層的遠程訪問量,提升數(shù)據(jù)源讀寫訪問發(fā)起方的數(shù)據(jù)訪問性能。
附圖說明
圖1為本發(fā)明實施例所基于的堆棧式緩存系統(tǒng)架構的示意圖;
圖2為本發(fā)明實施例中的訪問控制方法的示例性流程示意圖;
圖3為圖2中示出的臨時緩存層的數(shù)據(jù)淘汰的具體流程示意圖;
圖4為圖2按照圖3所示的步驟展開后的示意圖;
圖5為圖2中示出的在堆棧式緩存架構中向下查找數(shù)據(jù)的具體流程示意圖;
圖6為圖5中示出的利用預讀機制讀取數(shù)據(jù)的具體流程示意圖。
具體實施方式
為使本發(fā)明的目的、技術方案及優(yōu)點更加清楚明白,以下參照附圖并舉實施例,對本發(fā)明進一步詳細說明。
請先參見圖1,在本實施例中,提供了一種堆棧式緩存架構,該堆棧式緩存架構包括臨時緩存層101、預讀緩存層102、回寫緩存層103、以及數(shù)據(jù)源層200。本實施例所提供的堆棧式緩存架構可以在整體上被數(shù)據(jù)源讀寫訪問發(fā)起方100視為數(shù)據(jù)源,即,臨時緩存層101、預讀緩存層102、回寫緩存層103、以及數(shù)據(jù)源層200都可以視為數(shù)據(jù)源的一部分。
雖然臨時緩存層101、預讀緩存層102、回寫緩存層103、以及數(shù)據(jù)源層200同作為數(shù)據(jù)源的一部分,但臨時緩存層101可以優(yōu)先于其他層對數(shù)據(jù)源讀寫訪問發(fā)起方100的讀寫做出響應。并且,預讀緩存層102和回寫緩存層103之間既不是單純的同層并列關系、也不是單純的層堆疊關系,即,預讀緩存層102和回寫緩存層103可以認為是以局部堆疊的交錯方式布置在臨時緩存層101與數(shù)據(jù)源層200之間。
對于數(shù)據(jù)源讀寫訪問發(fā)起方100和數(shù)據(jù)源層200異地部署的情況,如圖1所示的堆棧式緩存架構中的臨時緩存層101和預讀緩存層102可以設置在數(shù)據(jù)源讀寫訪問發(fā)起方100的本地存儲介質中,數(shù)據(jù)源層200則可以設置在數(shù)據(jù)源讀寫訪問發(fā)起方100的遠程存儲介質中。例如,在一個應用實例中,數(shù)據(jù)源讀寫訪問發(fā)起方100位于無盤工作站(即數(shù)據(jù)源讀寫訪問發(fā)起方100為無盤工作站中的系統(tǒng)程序或應用程序),此時,臨時緩存層101和預讀緩存層102可以設置在無盤工作站的內存介質中,而數(shù)據(jù)源層200則可以設置在服務器的硬盤介質中。
而對于回寫緩存層103來說,其優(yōu)選地設置在數(shù)據(jù)源讀寫訪問發(fā)起方100的本地存儲介質中,但作為一種替代方案,其也可以設置在數(shù)據(jù)源讀寫訪問發(fā)起方100的遠程存儲介質中。例如,仍參照前述的無盤工作站的應用實例,回寫緩存層103則既可以設置在無盤工作站的內存介質中、也可以設置在服務器的內存介質中。
基于上述如圖1所示的堆棧式緩存架構,本實施例提供了一種對數(shù)據(jù)源的訪問控制方法,該訪問控制方法借助本地存儲介質中設置的臨時緩存層101對數(shù)據(jù)源讀寫訪問發(fā)起方100優(yōu)先響應的特性、以及臨時緩存層101與預讀緩存層102和回寫緩存層103配合實現(xiàn)的淘汰機制,針對被數(shù)據(jù)源讀寫訪問發(fā)起方100反復連續(xù)訪問的數(shù)據(jù)更快速地做出響應。
請參見圖2,當數(shù)據(jù)源讀寫訪問發(fā)起方100發(fā)起對數(shù)據(jù)源的寫訪問時,該訪問控制方法被觸發(fā)執(zhí)行如下步驟:
a1、判斷當前的寫訪問是否在臨時緩存層命中或能夠數(shù)據(jù)合并;
若命中或能夠合并,則執(zhí)行步驟a2;
否則觸發(fā)對臨時緩存層的數(shù)據(jù)淘汰、并在數(shù)據(jù)淘汰完成后執(zhí)行步驟a2。
其中,步驟a1中所述的“命中”,可以是指當前的寫訪問對應的數(shù)據(jù)已經(jīng)存在于臨時緩存層中(即,存在于臨時緩存層中的數(shù)據(jù)能夠被當前寫訪問對應的數(shù)據(jù)所覆蓋更新)、并且臨時緩存層中的數(shù)據(jù)被標記為臟數(shù)據(jù)的情況。若當前的寫訪問對應的數(shù)據(jù)已經(jīng)存在于臨時緩存層中、但臨時緩存層中的數(shù)據(jù)未被標記為臟數(shù)據(jù),這種情況不應被判斷為“命中”,因為這樣會導致已經(jīng)存在于臨時緩存層中的非臟數(shù)據(jù)被標記為臟,這雖然不會影響數(shù)據(jù)源視圖(即堆棧式緩存架構)的數(shù)據(jù)完整性,但會放大當前的寫訪問。
另外,步驟a1中所述的“合并”,可以是指當前的寫訪問在臨時緩存層未命中、但當前的寫訪問所對應的寫入數(shù)據(jù)與臨時緩存層中當前存儲的數(shù)據(jù)是彼此連續(xù)的數(shù)據(jù)的情況,此時,意味著當前的寫訪問所對應的寫入數(shù)據(jù)可以與臨時緩存層中當前存儲的數(shù)據(jù)同時存放在臨時緩存層中,這樣的同時存放即可以看作“合并”。通過合并連續(xù)的寫入數(shù)據(jù),特別是合并連續(xù)的小顆粒度寫入數(shù)據(jù),能顯著降低寫訪問開銷并提升性能。
a2、將當前的寫訪問對應的數(shù)據(jù)寫入臨時緩存層、并將寫入臨時緩存層的數(shù)據(jù)標記為臟數(shù)據(jù),然后結束當前的寫訪問。
其中,步驟a2的執(zhí)行可以是在步驟a1之后立即發(fā)生,也可以是在步驟a1之后進一步等待臨時緩存層的數(shù)據(jù)淘汰完成再發(fā)生。即,步驟a2是寫訪問必經(jīng)的過程,但在本實施例中,為了配合臨時緩存層的淘汰機制,步驟a2所描述的寫訪問的必經(jīng)過程需要在未命中、且不可合并的情況下被延遲執(zhí)行。
仍參見圖2,當數(shù)據(jù)源讀寫訪問發(fā)起方100發(fā)起對數(shù)據(jù)源的讀訪問時,該訪問控制方法被觸發(fā)執(zhí)行如下步驟:
b1、判斷當前的讀訪問是否在臨時緩存層命中;
若命中,則表示當前的讀訪問對應的數(shù)據(jù)已經(jīng)存在于臨時緩存層中,因而執(zhí)行步驟b3;
否則觸發(fā)對臨時緩存層的數(shù)據(jù)淘汰、并在數(shù)據(jù)淘汰完成后執(zhí)行步驟b2。
b2、在堆棧式緩存架構中向下查找當前的讀訪問對應的數(shù)據(jù),并將查找到的數(shù)據(jù)讀入至臨時緩存層,然后執(zhí)行步驟b3。
b3、從臨時緩存層讀取當前的讀訪問對應的數(shù)據(jù),然后結束當前的讀訪問。
其中,步驟b3的執(zhí)行可以是在步驟b1之后立即發(fā)生,也可以是在步驟b1之后進一步等待臨時緩存層的數(shù)據(jù)淘汰完成、并進一步執(zhí)行步驟b2后再發(fā)生。即,步驟b3是讀訪問必經(jīng)的過程,但在本實施例中,為了配合臨時緩存層的淘汰機制,步驟b3所描述的讀訪問的必經(jīng)過程需要在未命中的情況下被延遲執(zhí)行。而且,步驟b2可以看作是臨時緩存層的淘汰機制與讀訪問的必經(jīng)過程之間的銜接或過渡。
在如圖2所示的上述流程中,無論是寫訪問和讀訪問,都可能涉及到對臨時緩存層的數(shù)據(jù)淘汰。該數(shù)據(jù)淘汰的機制旨在將數(shù)據(jù)源讀寫訪問發(fā)起方100反復連續(xù)訪問的數(shù)據(jù)保留在位于堆棧式緩存架構的緩存資源層中,即,使數(shù)據(jù)源讀寫訪問發(fā)起方100反復連續(xù)訪問的數(shù)據(jù)優(yōu)先保存在最先對數(shù)據(jù)源讀寫訪問發(fā)起方100做出響應的臨時緩存層101中,次而暫存于預讀緩存層102和回寫緩存層103中。
請參見圖3并結合圖4,本實施例中的訪問控制方法還包括用于執(zhí)行臨時緩存層的數(shù)據(jù)淘汰的如下步驟:
c0、判斷臨時緩存層中是否存儲有數(shù)據(jù);
若是,則執(zhí)行步驟c1;
否則,意味著臨時緩存層中沒有需要淘汰的數(shù)據(jù),因而直接結束臨時緩存層的數(shù)據(jù)淘汰。
c1、判斷臨時緩存層中的數(shù)據(jù)是否被標記為臟數(shù)據(jù);
若是,則執(zhí)行步驟c2;
否則執(zhí)行步驟c8。
其中,臨時緩存層的數(shù)據(jù)淘汰過程可以認為從步驟c1正式開始,并且,臨時緩存層的數(shù)據(jù)淘汰過程對于臨時緩存層中的數(shù)據(jù)是否為臟數(shù)據(jù)進行了區(qū)別處理。這是因為:如前文所述,通過寫訪問被新寫入至臨時緩存層的數(shù)據(jù)會被標記為臟數(shù)據(jù),這意味著臟數(shù)據(jù)屬于數(shù)據(jù)源中的新數(shù)據(jù),顯然,數(shù)據(jù)源中的新數(shù)據(jù)屬于數(shù)據(jù)源讀寫訪問發(fā)起方在短期內可能反復訪問的數(shù)據(jù),因此,對于標記為臟數(shù)據(jù)的新數(shù)據(jù),本實施例中的訪問控制方法不會直接通過后續(xù)步驟(即,下文中描述的步驟c8)將這樣的新數(shù)據(jù)丟棄、也不急于將這樣的新數(shù)據(jù)直接淘汰至最底層的數(shù)據(jù)源層,而是從先放入回寫緩存層、并利用其更新預讀緩存層(參見下文描述的步驟c2至步驟c7),以備數(shù)據(jù)源讀寫訪問發(fā)起方在短期內再次訪問時使用。
c2、判斷回寫緩存層是否存在足夠的空閑空間;
若是,則意味著回寫緩存層目前可以接收臨時緩存層中存儲的數(shù)據(jù),因而執(zhí)行步驟c4;
否則,意味著回寫緩存層目前無法接收臨時緩存層中存儲的數(shù)據(jù),因而執(zhí)行步驟c3。
c3、將回寫緩存層中的部分數(shù)據(jù)淘汰至數(shù)據(jù)源層,使回寫緩存層中的空閑空間足以存放臨時緩存層中的數(shù)據(jù),然后執(zhí)行步驟c4。
其中,步驟c3淘汰的部分數(shù)據(jù)可以為回寫緩存層中處于無訪問狀態(tài)時長最長的數(shù)據(jù),或者也可以為回寫緩存層中被訪問頻率最低的數(shù)據(jù)。
c4、將臨時緩存層中的數(shù)據(jù)寫入至回寫緩存層,然后執(zhí)行步驟c5。
c5、判斷臨時緩存層中的數(shù)據(jù)是否與預讀緩存層中的數(shù)據(jù)存在交集;
若是,則意味著預讀緩存層中的數(shù)據(jù)不是全部為最新的數(shù)據(jù),或者說,對比當前臨時緩存層中存儲的新數(shù)據(jù),預讀緩存層中存儲有已過時的數(shù)據(jù),因而執(zhí)行步驟c6;
否則執(zhí)行c7。
c6、將臨時緩存層中的交集數(shù)據(jù)寫入至預讀緩存層,以實現(xiàn)對預讀緩存層的數(shù)據(jù)更新,然后執(zhí)行步驟c7。
其中,上述的步驟c3中對數(shù)據(jù)執(zhí)行的動作為“淘汰”,而步驟c4和c6中對于數(shù)據(jù)執(zhí)行的動作為“寫入”。需要說明的是,動作“淘汰”可以是指將數(shù)據(jù)轉移、或遷移,被執(zhí)行“淘汰”的數(shù)據(jù)將不再存在于淘汰之前的原始位置,而僅存在于淘汰之后的新位置;與之不同的是,動作“寫入”可以是指將數(shù)據(jù)復制,被執(zhí)行“寫入”的數(shù)據(jù)既存在于寫入之前的原始位置,同樣也存在于寫入之后的新位置。
c7、清除臨時緩存層中表示臟數(shù)據(jù)的標記,然后執(zhí)行步驟c8。
c8、丟棄臨時緩存層中的數(shù)據(jù),然后結束臨時緩存層的數(shù)據(jù)淘汰。
其中,如前文所述,臨時緩存層中被標記為臟數(shù)據(jù)的數(shù)據(jù)屬于數(shù)據(jù)源中的新數(shù)據(jù),從另一個角度看,這樣的新數(shù)據(jù)是需要被保護的、并應當在被復制轉儲之前保留于臨時緩存層中被免于刪除,因此,上述流程需要先通過步驟c7取消對新數(shù)據(jù)(新數(shù)據(jù)在執(zhí)行步驟c7之前已被復制到回寫緩存層)的保護,然后才允許通過步驟c8執(zhí)行的丟棄動作實施刪除。
此外,基于如圖1所示的堆棧式緩存架構,在本實施例中的訪問控制方法在執(zhí)行步驟b2(如前文所述,該步驟可以看作臨時緩存層的淘汰機制與讀訪問的必經(jīng)過程之間的銜接或過渡)時,可以按照預讀緩存層、回寫緩存層、以及數(shù)據(jù)源層的優(yōu)先級順序逐層查找數(shù)據(jù)。
請參見圖5,步驟b2所實現(xiàn)的上述逐層查找過程可以具體包括:
b21、在圖3和圖4中示出的淘汰完成之后,判斷當前的讀訪問是否在預讀緩存層命中;
若命中,則表示當前的讀訪問對應的數(shù)據(jù)已經(jīng)存在于預讀緩存層中,并相應地執(zhí)行步驟b23;
否則執(zhí)行步驟b22。
b22、利用預讀機制從回寫緩存層和數(shù)據(jù)源層預讀當前的讀訪問對應的數(shù)據(jù)至預讀緩存層,然后執(zhí)行步驟b23。
b23、從預讀緩存層讀取當前的讀訪問對應的數(shù)據(jù)至臨時緩存層,然后執(zhí)行作為讀訪問的必經(jīng)過程的步驟b3,即,步驟b23連接圖2和圖4中示出的步驟b3。
請再參見圖6,上述利用預讀機制的步驟b22可以具體包括:
b221、在判斷出當前的讀訪問在預讀緩存層未命中時,為當前的讀訪問構造預讀請求,然后執(zhí)行步驟b222。
其中,步驟b221中所述的“構造預讀請求”,可以是指基于數(shù)據(jù)源讀寫訪問發(fā)起方當前發(fā)起的讀訪問以及在過往發(fā)起過的讀訪問的規(guī)律特征,構造一個能涵蓋當前的讀訪問、并且有可能被后續(xù)讀訪問命中(在預讀緩存層命中)的讀取請求。通過預讀,特別是對于連續(xù)的小顆粒度數(shù)據(jù)讀訪問的情況,能顯著降低讀訪問開銷并提升性能。
b222、判斷預讀緩存層是否存在足夠的空閑空間;
若是,則意味著預讀緩存層目前可以接收預讀請求對應的數(shù)據(jù),因而執(zhí)行步驟b224;
否則,意味著預讀緩存層目前無法接收預讀請求對應的數(shù)據(jù),因而執(zhí)行步驟b223。
b223、將預讀緩存層中的部分數(shù)據(jù)丟棄,使預讀緩存層中的空閑空間足以存放預讀請求對應的數(shù)據(jù),然后執(zhí)行步驟b224。
其中,步驟b223丟棄的部分數(shù)據(jù)可以為預讀緩存層中處于無訪問狀態(tài)時長最長的數(shù)據(jù),或者也可以為預讀緩存層中被訪問頻率最低的數(shù)據(jù)。
b224、從回寫緩存層讀取預讀請求對應的數(shù)據(jù)至預讀緩存層,然后執(zhí)行步驟b225。
b225、判斷預讀請求對應的數(shù)據(jù)是否在回寫緩存層全部命中;
若是,即預讀請求對應的數(shù)據(jù)能全部從回寫緩存層中讀取,則執(zhí)行步驟b23;
否則執(zhí)行b226。
b226、從數(shù)據(jù)源層讀取未在回寫緩存層中命中的剩余數(shù)據(jù)至預讀緩存層,然后執(zhí)行步驟b23,即,步驟b226連接圖5中示出的步驟b23。
以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內,所做的任何修改、等同替換、改進等,均應包含在本發(fā)明保護的范圍之內。