一種數(shù)據(jù)寫入控制方法及裝置制造方法
【專利摘要】本發(fā)明公開了一種數(shù)據(jù)寫入控制方法及裝置。一種數(shù)據(jù)寫入控制方法包括:接收到對目標數(shù)據(jù)更新請求后,將更新結(jié)果寫入緩存;監(jiān)測所述目標數(shù)據(jù)上一次寫入持久化存儲介質(zhì)后,在緩存中的寫入次數(shù);如果寫入次數(shù)達到預(yù)設(shè)的第一閾值,則將緩存中的目標數(shù)據(jù)更新結(jié)果寫入持久化存儲介質(zhì)。應(yīng)用本發(fā)明實施例提供的技術(shù)方案,根據(jù)用戶訪問量的實際變化,相應(yīng)調(diào)整持久化存儲的頻率,不會出現(xiàn)持久化操作過于頻繁或者過于稀疏的情況。另外,應(yīng)用本發(fā)明技術(shù)方案,能夠在一定程度上對系統(tǒng)的風(fēng)險進行控制,即便系統(tǒng)出現(xiàn)故障,也能夠?qū)G失數(shù)據(jù)的數(shù)量估計在一個相對準確的范圍內(nèi)。
【專利說明】一種數(shù)據(jù)寫入控制方法及裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)存儲【技術(shù)領(lǐng)域】,特別是涉及一種數(shù)據(jù)寫入控制方法及裝置。
【背景技術(shù)】
[0002]隨著互聯(lián)網(wǎng)的發(fā)展,網(wǎng)絡(luò)上的資源類型和數(shù)量也不斷豐富,越來越多的的用戶到網(wǎng)站獲取自己感興趣的信息。對于網(wǎng)站而言,需要記錄用戶瀏覽網(wǎng)站時的各種行為,而高頻率的用戶行為必然對系統(tǒng)的存儲性能提出較高的要求。
[0003]以統(tǒng)計“頁面訪客數(shù)量”為例,對于網(wǎng)站的統(tǒng)計系統(tǒng)而言,用戶的每一次瀏覽行為就代表著一次訪問,需要對相應(yīng)的“頁面訪客數(shù)量”數(shù)據(jù)進行更新,如果用戶的瀏覽量較小,可以在每次數(shù)據(jù)更新時直接將更新數(shù)據(jù)寫入數(shù)據(jù)庫,但是,如果用戶的瀏覽頻率很高,那么需要頻繁地向數(shù)據(jù)庫寫入數(shù)據(jù),這種負荷是系統(tǒng)難以承受的。
[0004]為解決上述問題,現(xiàn)有技術(shù)采用的一種方案是:在每次數(shù)據(jù)更新時,將更新數(shù)據(jù)寫入高速緩存,由于緩存采用的是易失性存儲介質(zhì),一旦系統(tǒng)意外關(guān)機,緩存中未寫入持久化存儲介質(zhì)的數(shù)據(jù)都會丟失,因此,還需要周期性地將緩存內(nèi)的數(shù)據(jù)轉(zhuǎn)存寫入數(shù)據(jù)庫。這種方式能夠避免對數(shù)據(jù)庫進行頻繁的寫入操作,而且可以有效利用高速緩存的速度優(yōu)勢,提高寫入響應(yīng)速度。但是在實際應(yīng)用中,由于用戶的訪問量并不是維持不變的,因此對數(shù)據(jù)進行轉(zhuǎn)存的周期設(shè)置難以把握,如果周期設(shè)置過短,對數(shù)據(jù)庫壓力的緩解程度有限;如果周期過長,則會增加丟失數(shù)據(jù)的風(fēng)險,而且在此期間丟失的數(shù)據(jù)數(shù)量難以估算。
【發(fā)明內(nèi)容】
[0005]為解決上述技術(shù)問題,本發(fā)明實施例提供一種數(shù)據(jù)寫入控制方法及裝置,技術(shù)方案如下:
[0006]本發(fā)明實施例提供一種數(shù)據(jù)寫入控制方法,該方法包括:
[0007]接收到對目標數(shù)據(jù)更新請求后,將更新結(jié)果寫入緩存;
[0008]監(jiān)測所述目標數(shù)據(jù)上一次寫入持久化存儲介質(zhì)后,在緩存中的寫入次數(shù);
[0009]如果寫入次數(shù)達到預(yù)設(shè)的第一閾值,則將緩存中的目標數(shù)據(jù)更新結(jié)果寫入持久化存儲介質(zhì)。
[0010]根據(jù)本發(fā)明的一種【具體實施方式】,該方法還包括:
[0011]在將更新結(jié)果寫入緩存后,記錄寫入時刻;
[0012]監(jiān)測所述目標數(shù)據(jù)上一次寫入緩存后的經(jīng)過時間;
[0013]如果經(jīng)過時間達到預(yù)設(shè)的第二閾值,則將緩存中的目標數(shù)據(jù)更新結(jié)果寫入持久化存儲介質(zhì)。
[0014]根據(jù)本發(fā)明的一種【具體實施方式】,該方法還包括:
[0015]在緩存中記錄所述寫入次數(shù),并且在將緩存中的目標數(shù)據(jù)更新結(jié)果寫入持久化存儲介質(zhì)后,將緩存中記錄的寫入次數(shù)初始化。
[0016]根據(jù)本發(fā)明的一種【具體實施方式】,所述監(jiān)測所述目標數(shù)據(jù)上一次寫入持久化存儲介質(zhì)后,在緩存中的寫入次數(shù),包括:
[0017]監(jiān)測所述目標數(shù)據(jù)在緩存中的當(dāng)前寫入次數(shù)。
[0018]根據(jù)本發(fā)明的一種【具體實施方式】,所述第一閾值,根據(jù)系統(tǒng)對數(shù)據(jù)丟失量的允許范圍設(shè)置:
[0019]第一閾值=最大允許丟失量+1。
[0020]根據(jù)本發(fā)明的一種【具體實施方式】,該方法還包括:
[0021]如果緩存中的數(shù)據(jù)丟失,根據(jù)所述第一閾值對丟失的數(shù)據(jù)量進行估計:
[0022]數(shù)據(jù)丟失量<第一閾值-1。
[0023]本發(fā)明實施例還提供一種數(shù)據(jù)寫入控制裝置,該裝置包括:
[0024]緩存單元,用于接收到對目標數(shù)據(jù)更新請求后,將更新結(jié)果寫入緩存;
[0025]監(jiān)測單元,用于監(jiān)測所述目標數(shù)據(jù)上一次寫入持久化存儲介質(zhì)后,在緩存中的寫入次數(shù);
[0026]持久化存儲單元,用于在寫入次數(shù)達到預(yù)設(shè)的第一閾值的情況下,將緩存中的目標數(shù)據(jù)更新結(jié)果寫入持久化存儲介質(zhì)。
[0027]根據(jù)本發(fā)明的一種【具體實施方式】,
[0028]所述緩存單元,還用于在將更新結(jié)果寫入緩存后,記錄寫入時刻;
[0029]所述監(jiān)測單元,還用于監(jiān)測所述目標數(shù)據(jù)上一次寫入緩存后的經(jīng)過時間;
[0030]持久化存儲單元,還用于在經(jīng)過時間達到預(yù)設(shè)的第二閾值的情況下,將緩存中的目標數(shù)據(jù)更新結(jié)果寫入持久化存儲介質(zhì)。
[0031]根據(jù)本發(fā)明的一種【具體實施方式】,該裝置還包括:
[0032]計數(shù)單元,用于在緩存中記錄所述寫入次數(shù),并且在將緩存中的目標數(shù)據(jù)更新結(jié)果寫入持久化存儲介質(zhì)后,將緩存中記錄的寫入次數(shù)初始化。
[0033]根據(jù)本發(fā)明的一種【具體實施方式】,所述監(jiān)測單元,具體用于:
[0034]監(jiān)測所述目標數(shù)據(jù)在緩存中的當(dāng)前寫入次數(shù)。
[0035]根據(jù)本發(fā)明的一種【具體實施方式】,所述第一閾值,根據(jù)系統(tǒng)對數(shù)據(jù)丟失量的允許范圍設(shè)置:
[0036]第一閾值=最大允許丟失量+1。
[0037]根據(jù)本發(fā)明的一種【具體實施方式】,該裝置還包括:
[0038]錯誤估計單元,用于在緩存中數(shù)據(jù)丟失的情況下,根據(jù)所述第一閾值對丟失的數(shù)據(jù)量進行估計:
[0039]數(shù)據(jù)丟失量<第一閾值-1。
[0040]應(yīng)用本發(fā)明實施例提供的技術(shù)方案,在目標數(shù)據(jù)更新時,將更新數(shù)據(jù)寫入高速緩存,然后根據(jù)目標數(shù)據(jù)的實際更新情況,將緩存中的數(shù)據(jù)寫入持久化存儲介質(zhì)。與現(xiàn)有技術(shù)相比,本發(fā)明并不是根據(jù)絕對的周期對數(shù)據(jù)進行持久化存儲,而是根據(jù)目標數(shù)據(jù)的實際更新情況,動態(tài)地觸發(fā)數(shù)據(jù)持久化存儲操作,這樣,根據(jù)數(shù)據(jù)更新頻率的實際變化,持久化存儲的頻率也會相應(yīng)自動調(diào)整,不會出現(xiàn)持久化存儲操作過于頻繁或者過于稀疏的情況。另一方面,應(yīng)用本發(fā)明技術(shù)方案,能夠在一定程度上對系統(tǒng)的風(fēng)險進行控制,即便系統(tǒng)出現(xiàn)故障,也能夠?qū)G失數(shù)據(jù)的數(shù)量估計在一個相對準確的范圍內(nèi)。【專利附圖】
【附圖說明】
[0041]為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明中記載的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,還可以根據(jù)這些附圖獲得其他的附圖。
[0042]圖1為本發(fā)明實施例數(shù)據(jù)寫入控制方法的一種流程圖;
[0043]圖2為本發(fā)明實施例數(shù)據(jù)寫入控制方法的第二種流程圖;
[0044]圖3為本發(fā)明實施例數(shù)據(jù)寫入控制裝置的一種結(jié)構(gòu)示意圖;
[0045]圖4為本發(fā)明實施例數(shù)據(jù)寫入控制裝置的第二種結(jié)構(gòu)示意圖;
[0046]圖5為本發(fā)明實施例數(shù)據(jù)寫入控制裝置的第三種結(jié)構(gòu)示意圖。
【具體實施方式】
[0047]對于數(shù)據(jù)需要頻繁更新的應(yīng)用場景,為了減輕數(shù)據(jù)庫負荷,可以在每次數(shù)據(jù)更新時,將更新數(shù)據(jù)寫入高速緩存,從而避免對數(shù)據(jù)庫進行頻繁的寫入操作,而且可以有效利用高速緩存的速度優(yōu)勢。另一方面,由于緩存中的數(shù)據(jù)在斷電后就會消失,因此還需要定期將緩存中的數(shù)據(jù)轉(zhuǎn)存到持久化的存儲介質(zhì)(例如硬盤)中。但是,如果系統(tǒng)意外斷電,那么在最后一次持久化存儲之后的數(shù)據(jù)仍然會丟失??梢姡绻麑⑥D(zhuǎn)存周期設(shè)置過大,那么一旦出現(xiàn)意外,數(shù)據(jù)損失量也會比較大。設(shè)置較小的轉(zhuǎn)存周期可以降低數(shù)據(jù)損失,但是也會降低高速緩存的使用效率。
[0048]另外,在實際應(yīng)用中發(fā)現(xiàn),對于網(wǎng)站而言,一些數(shù)據(jù)的更新頻率并不一定總是維持在比較固定的范圍,而且在很多情況下并無規(guī)律可循。以統(tǒng)計“頁面訪客數(shù)量”為例,根據(jù)用戶的瀏覽習(xí)慣,該數(shù)據(jù)在每天不同的時段的更新頻率不同,例如在深夜至凌晨時段,數(shù)據(jù)更新頻率會比較低。如果出現(xiàn)某熱門事件,那么該數(shù)據(jù)的更新頻率可能突然上升。這就進一步增加了設(shè)置轉(zhuǎn)存周期的難度。
[0049]針對上述問題,為了解決系統(tǒng)效率和安全性之間的矛盾,本發(fā)明提供一種寫入控制方法,該方法包括:
[0050]接收到對目標數(shù)據(jù)更新請求后,將更新結(jié)果寫入緩存;
[0051]監(jiān)測所述目標數(shù)據(jù)上一次寫入持久化存儲介質(zhì)后,在緩存中的寫入次數(shù);
[0052]如果寫入次數(shù)達到預(yù)設(shè)的第一閾值,則將緩存中的目標數(shù)據(jù)更新結(jié)果寫入持久化存儲介質(zhì)。
[0053]應(yīng)用本發(fā)明實施例提供的技術(shù)方案,在目標數(shù)據(jù)更新時,仍然將更新數(shù)據(jù)寫入高速緩存。與現(xiàn)有技術(shù)的區(qū)別在于,本發(fā)明并不是根據(jù)絕對的周期對數(shù)據(jù)進行持久化存儲,而是根據(jù)目標數(shù)據(jù)的實際更新情況,動態(tài)地觸發(fā)數(shù)據(jù)持久化存儲操作,這樣,根據(jù)用戶訪問量的實際變化,持久化存儲的頻率也會相應(yīng)調(diào)整,不會出現(xiàn)持久化存儲操作過于頻繁或者過于稀疏的情況。
[0054]本發(fā)明所提供的技術(shù)方案,可以適用于一些不要求百分之百數(shù)據(jù)精確的情況,例如頁面訪客數(shù)量統(tǒng)計、網(wǎng)站流量統(tǒng)計、剩余商品數(shù)量計算、網(wǎng)絡(luò)投票等等。對于這類應(yīng)用,記錄相應(yīng)的數(shù)據(jù)是必要的,但是細微的誤差又不會影響整體效果,應(yīng)用本發(fā)明方案,假如第一閾值為N,那么如果意外斷電,可以保證丟失的記錄條數(shù)不超過N-1,這樣,可以預(yù)先根據(jù)實際應(yīng)用允許出現(xiàn)的誤差范圍設(shè)置N值,從而實現(xiàn)風(fēng)險控制。
[0055]為了使本領(lǐng)域技術(shù)人員更好地理解本發(fā)明中的技術(shù)方案,下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行詳細地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例。基于本發(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員所獲得的所有其他實施例,都應(yīng)當(dāng)屬于本發(fā)明保護的范圍。
[0056]圖1所示,為本發(fā)明實施例一種寫入控制方法的流程圖,該方法可以包括以下步驟:
[0057]S101,接收到對目標數(shù)據(jù)更新請求后,將更新結(jié)果寫入緩存;
[0058]S102,監(jiān)測所述目標數(shù)據(jù)上一次寫入持久化存儲介質(zhì)后,在緩存中的寫入次數(shù);
[0059]S103,如果寫入次數(shù)達到預(yù)設(shè)的第一閾值,則將緩存中的目標數(shù)據(jù)更新結(jié)果寫入持久化存儲介質(zhì)。
[0060]根據(jù)本實施例方案,在SlOl為了降低數(shù)據(jù)庫的讀寫負荷,當(dāng)目標數(shù)據(jù)更新時,并不將更新結(jié)果直接寫入數(shù)據(jù)庫,而是先將更新結(jié)果寫入緩存。例如,對于網(wǎng)站統(tǒng)計“頁面訪客數(shù)量”的應(yīng)用,首先在緩存中初始化該數(shù)據(jù)的存儲位,之后,每監(jiān)測到一次用戶的瀏覽行為,就在緩存中將該存儲位的數(shù)據(jù)加I。
[0061]另一方面,在S102中,對目標數(shù)據(jù)的寫入次數(shù)進行實時監(jiān)測,具體而言,是監(jiān)測目標數(shù)據(jù)距離上一次寫入持久化存儲介質(zhì)后在緩存中的寫入次數(shù)。如果次數(shù)達到預(yù)設(shè)的第一閾值N,則在S103中將緩存中 的目標數(shù)據(jù)更新結(jié)果寫入持久化存儲介質(zhì)。
[0062]仍以網(wǎng)站統(tǒng)計“頁面訪客數(shù)量”的應(yīng)用進行說明,假設(shè)預(yù)設(shè)的第一閾值N為10,并且該值的初始數(shù)據(jù)為0,那么,當(dāng)監(jiān)測到緩存中該值達到10時,將緩存中中的數(shù)據(jù)“ 10”進行持久化存儲,即將數(shù)據(jù)庫中的相應(yīng)位置數(shù)據(jù)更新為“10”。后續(xù),當(dāng)監(jiān)測到緩存中該數(shù)據(jù)值分別達到20、30、40……時,分別對數(shù)據(jù)庫中的相應(yīng)位置數(shù)據(jù)進行更新。與每次數(shù)據(jù)更新都寫入數(shù)據(jù)庫的方法相比,將數(shù)據(jù)庫的寫入壓力降低為原先的1/N。在本發(fā)明的一種實施方式中,N值可以根據(jù)后臺的持久化寫性能和產(chǎn)品策略來考慮,譬如說統(tǒng)計一個blog系統(tǒng)的瀏覽量時,整個系統(tǒng)的寫入頻率約為10000次/秒,而后端數(shù)據(jù)庫可承受的寫入壓力大概在200次/秒,這樣就可以設(shè)置N=l,即約定更新量大于50才寫數(shù)據(jù)庫,這樣就能很大程度避免數(shù)據(jù)庫的寫壓力。
[0063]在本發(fā)明的一種【具體實施方式】中,可以在緩存中專門設(shè)置一個臨時存儲位,用于記錄“目標數(shù)據(jù)上一次寫入持久化存儲介質(zhì)后在緩存中的寫入次數(shù)”,并且,當(dāng)對緩存中的數(shù)據(jù)進行持久化存儲之后,將該臨時存儲位做初始化處理,也就是說,正常情況下,該臨時存儲位的數(shù)值按照:
[0064]0、1、2、…N
[0065]0、1、2、…N
[0066]0、1、2、…N......的規(guī)律變化,每當(dāng)監(jiān)測到該值變?yōu)镹,則對緩存中的數(shù)據(jù)進
行持久化存儲,然后將N值清零,重新計數(shù),如此一直循環(huán)。
[0067]如果系統(tǒng)意外故障斷電,緩存中還未進行持久化存儲的數(shù)據(jù)會丟失,根據(jù)本發(fā)明方案,在最理想的情況下,出現(xiàn)故障時剛剛進行過持久化存儲,此時數(shù)據(jù)丟失量為0,而在最糟糕的情況下,數(shù)據(jù)丟失量為N-1。這樣,通過對第一閾值N進行設(shè)置,就可以保證將每次故障的數(shù)據(jù)丟失量控制在一定的范圍(N-1)內(nèi)。而且,在需要的時候,可以根據(jù)N值以及丟失數(shù)據(jù)的總量的進行估計,例如,網(wǎng)站發(fā)起某種投票活動,活動結(jié)束要對投票總數(shù)進行統(tǒng)計,假設(shè)設(shè)置N=10,并且在活動期間總共出現(xiàn)了 3次故障(實際不會有這么頻繁,這里僅用于示意性說明),那么可以估算出,漏統(tǒng)計的票數(shù)在0-27之間。
[0068]圖2所示,為本發(fā)明實施例另一種寫入控制方法的流程圖,該方法可以包括以下步驟:
[0069]S201,接收到對目標數(shù)據(jù)更新請求后,將更新結(jié)果寫入緩存、記錄寫入時刻;
[0070]S202,監(jiān)測所述目標數(shù)據(jù)上一次寫入持久化存儲介質(zhì)后,在緩存中的寫入次數(shù);
[0071]S203,如果寫入次數(shù)達到預(yù)設(shè)的第一閾值,則將緩存中的目標數(shù)據(jù)更新結(jié)果寫入持久化存儲介質(zhì)。
[0072]S204,監(jiān)測所述目標數(shù)據(jù)上一次寫入緩存后的經(jīng)過時間;
[0073]S205,如果經(jīng)過時間達到預(yù)設(shè)的第二閾值,則將緩存中的目標數(shù)據(jù)更新結(jié)果寫入持久化存儲介質(zhì)。
[0074]與前一實施例相比,本實施例的步驟S201-S203與S101-S103基本一致。區(qū)別在于:在S201,將更新結(jié)果寫入緩存后,記錄該條記錄寫入緩存的時刻。
[0075]后續(xù)在S204中,對目標數(shù)據(jù)寫入緩存后的經(jīng)過時間進行實時監(jiān)測,如果監(jiān)測到該經(jīng)過時間達到預(yù)設(shè)的第二閾值M,則在S205中將緩存中的目標數(shù)據(jù)更新結(jié)果寫入持久化存儲介質(zhì)。
[0076]在前一實施例中,觸發(fā)持久化存儲的條件是緩存中的數(shù)據(jù)更新達到了一定的次數(shù)。在此基礎(chǔ)上,本實施增加了另外一種基于時間的觸發(fā)條件,這樣,即便對于緩存中更新次數(shù)沒有達到N的數(shù)據(jù),在最后一次更新之后如果時間足夠長,也會轉(zhuǎn)存至數(shù)據(jù)庫,避免這些數(shù)據(jù)意外丟失。
[0077]可以理解的是,在本實施例中,如果在緩存中專門設(shè)置了臨時存儲位,用于記錄“目標數(shù)據(jù)上一次寫入持久化存儲介質(zhì)后在緩存中的寫入次數(shù)”,那么,如果是通過S205觸發(fā)的持久化存儲,那么該臨時存儲位的數(shù)值可能在任何情況下初始化,而并不需要達到N才進行初始化。換言之,應(yīng)用本實施例方案,雖然在出現(xiàn)意外故障時,最糟糕的情況下,數(shù)據(jù)丟失量為仍然為N-1,但是由于進一步增加了基于時間持久化存儲觸發(fā)機制,因此使得數(shù)據(jù)的實際丟失量變?yōu)?min{ (N-l),M時間段內(nèi)的更新量},在在整體上進一步減小,一般都不會達到最糟糕的N-1。
[0078]下面結(jié)合一個具體的應(yīng)用實例,對本發(fā)明的方案進行說明:
[0079]以空間的最近訪客統(tǒng)計為例,整個系統(tǒng)的更新頻率比較高,這里把N設(shè)為8,M設(shè)為I小時,即N=8,M=3600s,假設(shè)要記錄用戶空間A的最近訪客信息,如果用戶B訪問了 A的空間,此時會觸發(fā)如下操作:
[0080]1)在緩存里面把B加入到A的最近訪客列表中,由于是在緩存里面操作,這個過程很快;
[0081]2)系統(tǒng)判別A的最近訪客里面的更新次數(shù),如果大于8,則將該記錄寫到數(shù)據(jù)庫,此時會將A的最近訪客信息持久化存儲;同時在緩存里面將A的最近訪客更新次數(shù)重新標記為O ;
[0082]3)如果步驟2不滿足的話,系統(tǒng)判別A最近訪客列表上次寫數(shù)據(jù)庫的時刻,假設(shè)該時刻為tl,而當(dāng)前時刻為t2,則如果(t2-tl) > 3600s,則將改記錄寫入數(shù)據(jù)庫,同時更新記錄的寫數(shù)據(jù)庫時刻為t2
[0083]可見,即便I小時內(nèi)A的記錄更新次數(shù)沒有超過8次條件而寫數(shù)據(jù)庫,也必然會觸發(fā)步驟3的條件(即距離上次寫數(shù)據(jù)庫的時間超過I小時),從而寫數(shù)據(jù)庫。這樣整個系統(tǒng)如果突然崩潰,丟失的更新量也就是min {7,I小時內(nèi)的更新量}。
[0084]相應(yīng)于上面的方法實施例,本發(fā)明還提供一種數(shù)據(jù)寫入控制裝置,參見圖3所示,該裝置可以包括:
[0085]緩存單元110,用于接收到對目標數(shù)據(jù)更新請求后,將更新結(jié)果寫入緩存;
[0086]監(jiān)測單元120,用于監(jiān)測所述目標數(shù)據(jù)上一次寫入持久化存儲介質(zhì)后,在緩存中的寫入次數(shù);
[0087]持久化存儲單元130,用于在寫入次數(shù)達到預(yù)設(shè)的第一閾值的情況下,將緩存中的目標數(shù)據(jù)更新結(jié)果寫入持久化存儲介質(zhì)。
[0088]根據(jù)本實施例方案,為了降低數(shù)據(jù)庫的讀寫負荷,緩存單元110當(dāng)目標數(shù)據(jù)更新時,并不將更新結(jié)果直接寫入數(shù)據(jù)庫,而是先將更新結(jié)果寫入緩存。例如,對于網(wǎng)站統(tǒng)計“頁面訪客數(shù)量”的應(yīng)用,首先在緩存中初始化該數(shù)據(jù)的存儲位,之后,每監(jiān)測到一次用戶的瀏覽行為,就在緩存中將該存儲位的數(shù)據(jù)加I。
[0089]另一方面, 在監(jiān)測單元120,對目標數(shù)據(jù)的寫入次數(shù)進行實時監(jiān)測,具體而言,是監(jiān)測目標數(shù)據(jù)距離上一次寫入持久化存儲介質(zhì)后在緩存中的寫入次數(shù)。如果次數(shù)達到預(yù)設(shè)的第一閾值N,則在持久化存儲單元130將緩存中的目標數(shù)據(jù)更新結(jié)果寫入持久化存儲介質(zhì)。
[0090]仍以網(wǎng)站統(tǒng)計“頁面訪客數(shù)量”的應(yīng)用進行說明,假設(shè)預(yù)設(shè)的第一閾值N為10,并且該值的初始數(shù)據(jù)為0,那么,當(dāng)監(jiān)測到緩存中該值達到10時,將緩存中中的數(shù)據(jù)“ 10”進行持久化存儲,即將數(shù)據(jù)庫中的相應(yīng)位置數(shù)據(jù)更新為“10”。后續(xù),當(dāng)監(jiān)測到緩存中該數(shù)據(jù)值分別達到20、30、40……時,分別對數(shù)據(jù)庫中的相應(yīng)位置數(shù)據(jù)進行更新。與每次數(shù)據(jù)更新都寫入數(shù)據(jù)庫的方法相比,將數(shù)據(jù)庫的寫入壓力降低為原先的1/N。在本發(fā)明的一種實施方式中,N值可以根據(jù)后臺的持久化寫性能和產(chǎn)品策略來考慮,譬如說統(tǒng)計一個blog系統(tǒng)的瀏覽量時,整個系統(tǒng)的寫入頻率約為10000次/秒,而后端數(shù)據(jù)庫可承受的寫入壓力大概在200次/秒,這樣就可以設(shè)置N=l,即約定更新量大于50才寫數(shù)據(jù)庫,這樣就能很大程度避免數(shù)據(jù)庫的寫壓力。
[0091]參見圖4所示,在本發(fā)明的一種【具體實施方式】中,所述數(shù)據(jù)寫入控制裝置還包括計數(shù)單元140,用于在緩存中記錄所述寫入次數(shù),并且在將緩存中的目標數(shù)據(jù)更新結(jié)果寫入持久化存儲介質(zhì)后,將緩存中記錄的寫入次數(shù)初始化。
[0092]計數(shù)單元140在緩存中專門設(shè)置一個臨時存儲位,用于記錄“目標數(shù)據(jù)上一次寫入持久化存儲介質(zhì)后在緩存中的寫入次數(shù)”,并且,當(dāng)對緩存中的數(shù)據(jù)進行持久化存儲之后,將該臨時存儲位做初始化處理,也就是說,正常情況下,該臨時存儲位的數(shù)值按照:
[0093]0、1、2、…N
[0094]0、1、2、…N
[0095]0、1、2、...N......[0096]的規(guī)律變化,每當(dāng)監(jiān)測到該值變?yōu)镹,則對緩存中的數(shù)據(jù)進行持久化存儲,然后將N值清零,重新計數(shù),如此一直循環(huán)。
[0097]如果系統(tǒng)意外故障斷電,緩存中還未進行持久化存儲的數(shù)據(jù)會丟失,根據(jù)本發(fā)明方案,在最理想的情況下,出現(xiàn)故障時剛剛進行過持久化存儲,此時數(shù)據(jù)丟失量為O,而在最糟糕的情況下,數(shù)據(jù)丟失量為N-1。這樣,通過對第一閾值N進行設(shè)置,就可以保證將每次故障的數(shù)據(jù)丟失量控制在一定的范圍(N-1)內(nèi)。而且,在需要的時候,可以根據(jù)N值以及丟失數(shù)據(jù)的總量的進行估計。
[0098]參見圖5所示,在本發(fā)明的一種【具體實施方式】中,所述數(shù)據(jù)寫入控制裝置還包括錯誤估計單元150,用于在緩存中數(shù)據(jù)丟失的情況下,根據(jù)所述第一閾值對丟失的數(shù)據(jù)量進行估計,具體的估計方法為:數(shù)據(jù)丟失量<第一閾值-1。
[0099]例如,網(wǎng)站發(fā)起某種投票活動,活動結(jié)束要對投票總數(shù)進行統(tǒng)計,假設(shè)設(shè)置N=10,并且在活動期間總共出現(xiàn)了 3次故障(實際不會有這么頻繁,這里僅用于示意性說明),那么可以估算出,漏統(tǒng)計的票數(shù)在0-27之間。
[0100]在本發(fā)明的另一種實施方式中:
[0101]所述緩存單元110,還用于在將更新結(jié)果寫入緩存后,記錄寫入時刻;
[0102]所述監(jiān)測單元120,還用于監(jiān)測所述目標數(shù)據(jù)上一次寫入緩存后的經(jīng)過時間;
[0103]持久化存儲單元130,還用于在經(jīng)過時間達到預(yù)設(shè)的第二閾值的情況下,將緩存中的目標數(shù)據(jù)更新結(jié)果寫入持久化存儲介質(zhì)。
[0104]與前一實施例相比,本實施例中的緩存單元110,在將更新結(jié)果寫入緩存后,記錄該條記錄寫入緩存的時刻。
[0105]監(jiān)測單元120,對目標數(shù)據(jù)寫入緩存后的經(jīng)過時間進行實時監(jiān)測,如果監(jiān)測到該經(jīng)過時間達到預(yù)設(shè)的第二閾值M,則在持久化存儲單元130將緩存中的目標數(shù)據(jù)更新結(jié)果寫入持久化存儲介質(zhì)。
[0106]在前一實施例中,觸發(fā)持久化存儲的條件是緩存中的數(shù)據(jù)更新達到了一定的次數(shù)。在此基礎(chǔ)上,本實施增加了另外一種基于時間的觸發(fā)條件,這樣,即便對于緩存中更新次數(shù)沒有達到N的數(shù)據(jù),在最后一次更新之后如果時間足夠長,也會轉(zhuǎn)存至數(shù)據(jù)庫,避免這些數(shù)據(jù)意外丟失。
[0107]可以理解的是,在本實施例中,如果在緩存中專門設(shè)置了臨時存儲位,用于記錄“目標數(shù)據(jù)上一次寫入持久化存儲介質(zhì)后在緩存中的寫入次數(shù)”,那么,如果是通過“經(jīng)過時間”觸發(fā)的持久化存儲,那么該臨時存儲位的數(shù)值可能在任何情況下初始化,而并不需要達到N才進行初始化。換言之,應(yīng)用本實施例方案,雖然在出現(xiàn)意外故障時,最糟糕的情況下,數(shù)據(jù)丟失量為仍然為N-1,但是由于進一步增加了基于時間持久化存儲觸發(fā)機制,因此使得數(shù)據(jù)的實際丟失量變?yōu)?min{ (N-l),M時間段內(nèi)的更新量},在在整體上進一步減小,一般都不會達到最糟糕的N-1。
[0108]為了描述的方便,描述以上裝置時以功能分為各種單元分別描述。當(dāng)然,在實施本發(fā)明時可以把各單元的功能在同一個或多個軟件和/或硬件中實現(xiàn)。
[0109]通過以上的實施方式的描述可知,本領(lǐng)域的技術(shù)人員可以清楚地了解到本發(fā)明可借助軟件加必需的通用硬件平臺的方式來實現(xiàn)。基于這樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品可以存儲在存儲介質(zhì)中,如R0M/RAM、磁碟、光盤等,包括若干指令用以使得一臺計算機設(shè)備(可以是個人計算機,服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個實施例或者實施例的某些部分所述的方法。[0110]本說明書中的各個實施例均采用遞進的方式描述,各個實施例之間相同相似的部分互相參見即可,每個實施例重點說明的都是與其他實施例的不同之處。尤其,對于裝置或系統(tǒng)實施例而言,由于其基本相似于方法實施例,所以描述得比較簡單,相關(guān)之處參見方法實施例的部分說明即可。以上所描述的裝置及系統(tǒng)實施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡(luò)單元上。可以根據(jù)實際的需要選擇其中的部分或者全部模塊來實現(xiàn)本實施例方案的目的。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性勞動的情況下,即可以理解并實施。
[0111]以上所述僅是本發(fā)明的【具體實施方式】,應(yīng)當(dāng)指出,對于本【技術(shù)領(lǐng)域】的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進和潤飾,這些改進和潤飾也應(yīng)視為本發(fā)明的保護范圍。
【權(quán)利要求】
1.一種數(shù)據(jù)寫入控制方法,其特征在于,該方法包括: 接收到對目標數(shù)據(jù)更新請求后,將更新結(jié)果寫入緩存; 監(jiān)測所述目標數(shù)據(jù)上一次寫入持久化存儲介質(zhì)后,在緩存中的寫入次數(shù); 如果寫入次數(shù)達到預(yù)設(shè)的第一閾值,則將緩存中的目標數(shù)據(jù)更新結(jié)果寫入持久化存儲介質(zhì)。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,該方法還包括: 在將更新結(jié)果寫入緩存后,記錄寫入時刻; 監(jiān)測所述目標數(shù)據(jù)上一次寫入緩存后的經(jīng)過時間; 如果經(jīng)過時間達到預(yù)設(shè)的第二閾值,則將緩存中的目標數(shù)據(jù)更新結(jié)果寫入持久化存儲介質(zhì)。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,該方法還包括: 在緩存中記錄所述寫入次數(shù),并且在將緩存中的目標數(shù)據(jù)更新結(jié)果寫入持久化存儲介質(zhì)后,將緩存中記錄的寫入次數(shù)初始化。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述監(jiān)測所述目標數(shù)據(jù)上一次寫入持久化存儲介質(zhì)后,在緩存中的寫入次數(shù),包括: 監(jiān)測所述目標數(shù)據(jù)在緩存中的當(dāng)前寫入次數(shù)。
5.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述第一閾值,根據(jù)系統(tǒng)對數(shù)據(jù)丟失量的允許范圍設(shè)置: 第一閾值=最大允許丟失量+1。
6.根據(jù)權(quán)利要求1所述的方法,其特征在于,該方法還包括: 如果緩存中的數(shù)據(jù)丟失,根據(jù)所述第一閾值對丟失的數(shù)據(jù)量進行估計: 數(shù)據(jù)丟失量<第一閾值-1。
7.一種數(shù)據(jù)寫入控制裝置,其特征在于,該裝置包括: 緩存單元,用于接收到對目標數(shù)據(jù)更新請求后,將更新結(jié)果寫入緩存; 監(jiān)測單元,用于監(jiān)測所述目標數(shù)據(jù)上一次寫入持久化存儲介質(zhì)后,在緩存中的寫入次數(shù); 持久化存儲單元,用于在寫入次數(shù)達到預(yù)設(shè)的第一閾值的情況下,將緩存中的目標數(shù)據(jù)更新結(jié)果寫入持久化存儲介質(zhì)。
8.根據(jù)權(quán)利要求7所述的裝置,其特征在于, 所述緩存單元,還用于在將更新結(jié)果寫入緩存后,記錄寫入時刻; 所述監(jiān)測單元,還用于監(jiān)測所述目標數(shù)據(jù)上一次寫入緩存后的經(jīng)過時間; 持久化存儲單元,還用于在經(jīng)過時間達到預(yù)設(shè)的第二閾值的情況下,將緩存中的目標數(shù)據(jù)更新結(jié)果寫入持久化存儲介質(zhì)。
9.根據(jù)權(quán)利要求7所述的裝置,其特征在于,該裝置還包括: 計數(shù)單元,用于在緩存中記錄所述寫入次數(shù),并且在將緩存中的目標數(shù)據(jù)更新結(jié)果寫入持久化存儲介質(zhì)后,將緩存中記錄的寫入次數(shù)初始化。
10.根據(jù)權(quán)利要求9所述的裝置,其特征在于,所述監(jiān)測單元,具體用于: 監(jiān)測所述目標數(shù)據(jù)在緩存中的當(dāng)前寫入次數(shù)。
11.根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述第一閾值,根據(jù)系統(tǒng)對數(shù)據(jù)丟失量的允許范圍設(shè)置: 第一閾值=最大允許丟失量+1。
12.根據(jù)權(quán)利要求7所述的裝置,其特征在于,該裝置還包括: 錯誤估計單元,用于在緩存中數(shù)據(jù)丟失的情況下,根據(jù)所述第一閾值對丟失的數(shù)據(jù)量進行估計: 數(shù)據(jù)丟失量<第一閾值-1。
【文檔編號】G06F17/30GK103853671SQ201210524769
【公開日】2014年6月11日 申請日期:2012年12月7日 優(yōu)先權(quán)日:2012年12月7日
【發(fā)明者】陳建森, 李哲 申請人:北京百度網(wǎng)訊科技有限公司