一種基于裝載因子的緩存數(shù)據(jù)預加載與替換方法
【專利摘要】本發(fā)明公開了一種基于裝載因子的緩存數(shù)據(jù)預加載與替換方法,實現(xiàn)在海量數(shù)據(jù)模式下,對數(shù)據(jù)的快速預加載和替換。裝載因子直觀地說就是在Ri次對數(shù)據(jù)的讀請求中數(shù)據(jù)命中緩存的次數(shù)。該方法基于數(shù)據(jù)的整體分布因子來計算各個數(shù)據(jù)的裝載因子,根據(jù)數(shù)據(jù)的裝載因子來判斷該數(shù)據(jù)是否應該放在緩存中。因為裝載因子是表示數(shù)據(jù)命中緩存的次數(shù),因此當裝載因子占比數(shù)據(jù)讀取次數(shù)Ri超過一定閥值的時候,我們就可以認為該數(shù)據(jù)更適合預先裝載到緩存中,從而在系統(tǒng)初始化的時候采取加載該數(shù)據(jù)的策略。
【專利說明】 一種基于裝載因子的緩存數(shù)據(jù)預加載與替換方法
【技術領域】
[0001]本發(fā)明涉及一種基于海量數(shù)據(jù)環(huán)境的數(shù)據(jù)緩存方法,尤其涉及一種對海量數(shù)據(jù)實現(xiàn)快速緩存預加載和替換的方法。
【背景技術】
[0002]隨著企業(yè)的全球化及海量數(shù)據(jù)處理的需求不斷發(fā)展,證券、銀行等大型金融企業(yè)積累了海量的用戶數(shù)據(jù),數(shù)據(jù)量和用戶數(shù)的劇增,給這些企業(yè)系統(tǒng)帶來了很大的壓力,高速增長的用戶請求以及海量的后臺數(shù)據(jù)給Web系統(tǒng)帶來了很多性能問題,導致整個系統(tǒng)響應緩慢,用戶體驗急劇下降。“要么改進系統(tǒng),要么流失客戶。”正是工業(yè)界很多公司不得不面對的問題,如何有效減少用戶訪問延時,提高系統(tǒng)服務質(zhì)量是一個迫切需要解決的難題。緩存技術被認為是一種有效的解決方案,它能有效緩解Web系統(tǒng)瓶頸、減少網(wǎng)絡數(shù)據(jù)傳輸以及提升系統(tǒng)的擴展性。
[0003]Web緩存技術可以極大的提高系統(tǒng)的響應速度,在近幾年的研究中,提出了很多種緩存方法,它們一般基于數(shù)據(jù)的一些特性,比如最近訪問時間、訪問次數(shù)、數(shù)據(jù)大小,數(shù)據(jù)加載成本以及數(shù)據(jù)修改時間等,通過對這些基礎的數(shù)據(jù)特征分析采用不同的方法來確定緩存策略,試圖盡量減少各種成本度量,從而提高命中率,減少數(shù)據(jù)訪問延時和成本。
[0004]目前對于緩存技術的研究主要分為緩存預取方法和緩存替換方法兩方面,緩存預取是一種主動式的緩存技術。其基本思想是利用先前用戶訪問的模式和先驗知識,把用戶最有可能訪問的內(nèi)容預先加載到緩存中。根據(jù)預取算法使用的用戶行為特征信息不同,可以分為以下兩類:
[0005]一、基于多用戶的行為模式:利用所有或多個用戶的行為模式的特征,不管當前請求的用戶是誰,都預取相同的數(shù)據(jù),一個典型的例子是根據(jù)流行度緩存排在前10的數(shù)據(jù)。
[0006]二、基于單用戶的行為模式:這種模式基于對單個用戶的行為進行分析,并基于用戶的行為模式進行預測,一個典型的例子是利用馬爾可夫模型(Markov modeling),其基本思想是根據(jù)用戶的訪問歷史建立一個馬爾可夫圖,并用該圖來預測用戶下一步的行為。
[0007]然而傳統(tǒng)的緩存方法要么只是著眼于單個用戶的訪問習慣,基于當前用戶的行為模式進行預測,沒有從全盤考慮緩存性能,或者需要加載所有數(shù)據(jù)才能判斷哪些數(shù)據(jù)是需要緩存的,對于海量數(shù)據(jù)來說,加載所有數(shù)據(jù)是不可能的。因此傳統(tǒng)的緩存方法并不適合海量數(shù)據(jù)的應用服務。
【發(fā)明內(nèi)容】
[0008]針對傳統(tǒng)緩存方法存在的問題,本發(fā)明提供了一種基于裝載因子的緩存數(shù)據(jù)預加載與替換方法,實現(xiàn)在海量數(shù)據(jù)模式下,對數(shù)據(jù)的快速預加載和替換。裝載因子直觀地說就是在Ri次對數(shù)據(jù)的讀請求中數(shù)據(jù)命中緩存的次數(shù)。該方法基于數(shù)據(jù)的整體分布因子來計算各個數(shù)據(jù)的裝載因子,根據(jù)數(shù)據(jù)的裝載因子來判斷該數(shù)據(jù)是否應該放在緩存中。因為裝載因子是表示數(shù)據(jù)命中緩存的次數(shù),因此當裝載因子占比數(shù)據(jù)讀取次數(shù)Ri超過一定閥值的時候,我們就可以認為該數(shù)據(jù)更適合預先裝載到緩存中,從而在系統(tǒng)初始化的時候采取加載該數(shù)據(jù)的策略?;谝陨厦枋觯o出數(shù)據(jù)定義如下:
[0009]R1:數(shù)據(jù)對象i的讀請求數(shù);
[0010]P1:在Ri次讀請求中,數(shù)據(jù)對象i命中緩存的次數(shù),即裝載因子;
[0011]λ:系統(tǒng)的數(shù)據(jù)分布因子,反應了系統(tǒng)整體的數(shù)據(jù)分布情況。
[0012]基于以上定義,裝載因子的數(shù)據(jù)預加載和替換方法步驟描述如下:
[0013]一、計算系統(tǒng)的數(shù)據(jù)分布因子λ,λ反應系統(tǒng)整體的數(shù)據(jù)分布,對于符合一定分布模型的系統(tǒng),比如泊松分布的數(shù)據(jù),λ可以從理論上計算得到,對于無法通過理論計算獲得λ,需要用數(shù)據(jù)庫統(tǒng)計算法得到;
[0014]二、數(shù)據(jù)預加載,系統(tǒng)啟動的時候,加載數(shù)據(jù)庫中的數(shù)據(jù),并根據(jù)系統(tǒng)的數(shù)據(jù)分布因子計算該數(shù)據(jù)的裝載因子Pi,根據(jù)數(shù)據(jù)的裝載因子確定該數(shù)據(jù)是否應該預先加載到緩存
中,當I的時候,加載該數(shù)據(jù)到緩存中,否則該數(shù)據(jù)不預加載;
[0015]三、系統(tǒng)預加載后緩存數(shù)據(jù)采用惰性更新的方式,當用戶訪問某個數(shù)據(jù)的時候,重新計算該數(shù)據(jù)的裝載因子,根據(jù)新的裝載因子來判斷該數(shù)據(jù)是放到緩存中還是從緩存中移除;
[0016]四、當?shù)谌接行碌臄?shù)據(jù)需要裝入緩存而緩存數(shù)據(jù)已滿的情況,則采用最近最少使用LRU方法替換緩存中的數(shù)據(jù)。
[0017]五、更新數(shù)據(jù)分布因子λ,當數(shù)據(jù)量比較少的時候,對于海量數(shù)據(jù)系統(tǒng)來說,分布因子λ不會有明顯的變化,但當數(shù)據(jù)累積到一定量后則會影響整個系統(tǒng)的數(shù)據(jù)分布,為了計算的準確性,需要隔一段時間(比如一天一次)重新計算下分布因子λ。然后再循環(huán)采用執(zhí)行第三步~第五步的步驟,保持緩存中數(shù)據(jù)的時效性和命中率。
[0018]本發(fā)明具有如下技術效果:
[0019]1、本發(fā)明通過數(shù)據(jù)裝載因子可以直接通過計算對數(shù)據(jù)做出是否緩存的判斷,而無須等遍歷整個數(shù)據(jù)后再做出是否緩存的策略,從而使整個緩存系統(tǒng)在系統(tǒng)啟動的時候就有很高的命中率。
[0020]2、本發(fā)明采用惰性更新的方式,系統(tǒng)運行過程中緩存替換的開銷很小。
[0021]3、在系統(tǒng)的緩存達到動態(tài)平衡后,該方法也比傳統(tǒng)的緩存替換方法命中率要高,該方法會優(yōu)先緩存“熱點”數(shù)據(jù)。
[0022]4、本發(fā)明更適用于海量的數(shù)據(jù)系統(tǒng),在海量數(shù)據(jù)系統(tǒng)中,很多傳統(tǒng)的方法無法做出緩存決策,因為它們無法加載比對所有的數(shù)據(jù)。
【具體實施方式】
[0023]數(shù)據(jù)定義:
[0024]R1:數(shù)據(jù)對象i的讀請求數(shù),
[0025]S1:數(shù)據(jù)對象i的緩存大小,
[0026]MT1:數(shù)據(jù)對象i從緩存中讀取的時延,
[0027]DT1:數(shù)據(jù)對象i未緩存的讀取時延,
[0028]λ:數(shù)據(jù)的分布特征,[0029]Μ:總的可用緩存的大小,
[0030]η:總的數(shù)據(jù)個數(shù)。
[0031]則上述方法過程中的各參數(shù)計算公式如下:
【權利要求】
1.一種基于裝載因子對緩存數(shù)據(jù)進行預加載和替換的方法,其特征在于,包括如下步驟: (1)計算系統(tǒng)的數(shù)據(jù)的分布情況,對于符合一定分布模型的系統(tǒng),可以使用統(tǒng)計模型計算得到分布情況,對于無法找到合適的分布模型的數(shù)據(jù),則通過使用數(shù)據(jù)庫統(tǒng)計算法得到; (2)在系統(tǒng)啟動時,根據(jù)數(shù)據(jù)的分布情況,計算需要加載的數(shù)據(jù)的裝載因子,一旦裝載因子(即緩存命中次數(shù))占數(shù)據(jù)訪問次數(shù)比例超過閥值,則將其加載到緩存,否則不預加載; (3)系統(tǒng)運行過程中采用惰性更新方法,當用戶訪問某個數(shù)據(jù)時,重新計算該數(shù)據(jù)的裝載因子,根據(jù)新的裝載因子決定是否需要將數(shù)據(jù)放到緩存中或是否需要從緩存中移除; (4)在第三步中有新的數(shù)據(jù)需要更新時,替換緩存中的數(shù)據(jù); (5)對于數(shù)據(jù)量較少的系統(tǒng)不更新分布因子,但是在數(shù)據(jù)量增長后隔一定間隔更新一次裝載因子之后循環(huán)采用第三到第五步的策略,保持緩存中數(shù)據(jù)的時效性和命中率。
【文檔編號】G06F17/30GK103942315SQ201410166680
【公開日】2014年7月23日 申請日期:2014年4月22日 優(yōu)先權日:2014年4月22日
【發(fā)明者】王新根, 王新宇 申請人:杭州邦盛金融信息技術有限公司