一種處理寫請求的方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計算機(jī)技術(shù)領(lǐng)域,具體涉及一種處理寫請求的方法和裝置。
【背景技術(shù)】
[0002]隨著云存儲系統(tǒng)的迅速發(fā)展,日志機(jī)制作為云存儲系統(tǒng)中用來保證數(shù)據(jù)一致性的常用機(jī)制之一,也得到廣泛的應(yīng)用。在使用日志機(jī)制的云存儲系統(tǒng)中,存在一個被稱為日志的追蹤文件,提交到系統(tǒng)的所有更改操作,都會先記錄到日志中,然后再執(zhí)行實際的更改。在系統(tǒng)遭遇故障并重啟后,可以通過回放日志完成重啟之前尚未完成的操作,避免出現(xiàn)數(shù)據(jù)不一致或不完整的情況。
[0003]然而,日志機(jī)制要求所有的更新操作都必須先記錄日志,再實際執(zhí)行。在處理寫請求時,既將待寫入內(nèi)容記錄到日志,又要將待寫入內(nèi)容寫入到目標(biāo)文件,因此,待寫入內(nèi)容實際上被寫入了兩次,導(dǎo)致系統(tǒng)的寫入帶寬只能達(dá)到物理帶寬的一半,對物理帶寬的使用率較低。
【發(fā)明內(nèi)容】
[0004]本發(fā)明提供了一種處理寫請求的方法和裝置,以解決現(xiàn)有技術(shù)中物理帶寬使用率較低的缺陷。
[0005]本發(fā)明提供了一種處理寫請求的方法,包括以下步驟:
[0006]將與寫請求對應(yīng)的待寫入內(nèi)容寫入到臨時文件;
[0007]在日志中記錄從所述臨時文件到目標(biāo)文件的重命名操作;
[0008]將所述臨時文件重命名為所述目標(biāo)文件。
[0009]可選地,所述將與寫請求對應(yīng)的待寫入內(nèi)容寫入到臨時文件之前,還包括:
[0010]判斷所述寫請求是否為完全寫請求;
[0011]所述將與寫請求對應(yīng)的待寫入內(nèi)容寫入到臨時文件,具體為:
[0012]當(dāng)所述寫請求為完全寫請求時,將與所述寫請求對應(yīng)的待寫入內(nèi)容寫入到臨時文件。
[0013]可選地,判斷所述寫請求是否為完全寫請求,具體為:
[0014]判斷所述寫請求是否滿足以下條件:所述目標(biāo)文件不存在;或者,寫入位置為所述目標(biāo)文件的開頭且寫入長度不小于所述目標(biāo)文件的大?。蝗绻麧M足,則確定所述寫請求為完全寫請求;否則,確定所述寫請求不是完全寫請求。
[0015]可選地,所述將與寫請求對應(yīng)的待寫入內(nèi)容寫入到臨時文件之前,還包括:
[0016]創(chuàng)建所述臨時文件。
[0017]可選地,所述的方法,還包括:
[0018]在系統(tǒng)重啟時,讀取并回放所述日志;
[0019]刪除所述系統(tǒng)中存在的臨時文件。
[0020]本發(fā)明還提供了一種處理寫請求的裝置,包括:
[0021]寫入模塊,用于將與寫請求對應(yīng)的待寫入內(nèi)容寫入到臨時文件;
[0022]記錄模塊,用于在日志中記錄從所述臨時文件到目標(biāo)文件的重命名操作;
[0023]重命名模塊,用于在所述記錄模塊記錄所述重命名操作后,將所述寫入模塊寫入的所述臨時文件重命名為所述目標(biāo)文件。
[0024]可選地,所述的裝置,還包括:
[0025]判斷模塊,用于判斷所述寫請求是否為完全寫請求;
[0026]所述寫入模塊,具體用于在所述判斷模塊判斷出所述寫請求為完全寫請求時,將與所述寫請求對應(yīng)的待寫入內(nèi)容寫入到臨時文件。
[0027]可選地,所述判斷模塊,具體用于判斷所述寫請求是否滿足以下條件:所述目標(biāo)文件不存在;或者,寫入位置為所述目標(biāo)文件的開頭且寫入長度不小于所述目標(biāo)文件的大??;如果滿足,則確定所述寫請求為完全寫請求;否則,確定所述寫請求不是完全寫請求。
[0028]可選地,所述的裝置,還包括:
[0029]創(chuàng)建模塊,用于創(chuàng)建所述臨時文件。
[0030]可選地,所述的裝置,還包括:
[0031]刪除模塊,用于當(dāng)系統(tǒng)重啟時,在回放所述日志后,刪除所述系統(tǒng)中存在的臨時文件。
[0032]本發(fā)明先將待寫入內(nèi)容寫入到臨時文件,再對臨時文件進(jìn)行重命名,只需要對待寫入內(nèi)容執(zhí)行一次寫入,使得系統(tǒng)的寫入帶寬能夠接近或達(dá)到實際的物理帶寬,能夠有效提高物理帶寬的使用率。
【附圖說明】
[0033]圖1為本發(fā)明實施例中的一種處理寫請求的方法流程圖;
[0034]圖2為本發(fā)明實施例中的一種處理寫請求的裝置結(jié)構(gòu)圖。
【具體實施方式】
[0035]下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護(hù)的范圍。
[0036]需要說明的是,如果不沖突,本發(fā)明實施例以及實施例中的各個特征可以相互結(jié)合,均在本發(fā)明的保護(hù)范圍之內(nèi)。另外,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟。
[0037]本發(fā)明實施例提供了一種處理寫請求的方法,如圖1所示,包括以下步驟:
[0038]步驟101,接收寫請求。
[0039]步驟102,判斷寫請求是否為完全寫請求,如果是,則執(zhí)行步驟103 ;否則,執(zhí)行步驟 106。
[0040]具體地,可以判斷寫請求是否滿足以下條件:目標(biāo)文件不存在;或者,寫入位置為目標(biāo)文件的開頭且寫入長度不小于目標(biāo)文件的大小;如果滿足,則確定寫請求為完全寫請求;否則,確定寫請求不是完全寫請求。[0041 ] 其中,完全寫請求為待寫入內(nèi)容能夠完全覆蓋目標(biāo)文件中的原有內(nèi)容的寫請求。
[0042]步驟103,創(chuàng)建臨時文件,將與寫請求對應(yīng)的待寫入內(nèi)容寫入到臨時文件。
[0043]步驟104,在日志中記錄從臨時文件到目標(biāo)文件的重命名操作。
[0044]步驟105,將臨時文件重命名為目標(biāo)文件。
[0045]步驟106,將待寫入內(nèi)容記錄到日志。
[0046]步驟107,將待寫入內(nèi)容寫入到目標(biāo)文件。
[0047]需要說明的是,在系統(tǒng)重啟時,讀取并回放日志,然后刪除系統(tǒng)中存在的臨時文件。
[0048]具體地,系統(tǒng)因為遇到故障而停止運(yùn)行時,有可能已經(jīng)向臨時文件中寫入了部分或全部數(shù)據(jù),但還