數(shù)據(jù)寫入方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及互聯(lián)網(wǎng)技術(shù)領(lǐng)域,尤其涉及一種數(shù)據(jù)寫入方法和裝置。
【背景技術(shù)】
[0002]在高吞吐的存儲系統(tǒng)中,讀寫的壓力往往每秒達(dá)到上萬個請求量,而且請求的數(shù)據(jù)量大小不等。特別是在結(jié)構(gòu)化的存儲引擎中,往往寫請求只是為了修改或者更新有效的幾個短屬性字段,而且更新后要求立即讀可見,以保證會話事務(wù)性。
[0003]同時,越來越多系統(tǒng)采用基于日志的系統(tǒng)設(shè)計(Write Append Logging;以下簡稱:WAL)設(shè)計,盡可能將所有的寫變成順序?qū)?,以減少磁頭的移動并持久化數(shù)據(jù)。由于WAL設(shè)計需要實時將數(shù)據(jù)落盤,這需要調(diào)用操作系統(tǒng)的同步(sync)接口,將會有大量的小數(shù)據(jù)請求需要實時執(zhí)行落盤。
[0004]然而,由于磁盤讀寫磁頭的機械調(diào)度的緣故,常常需要調(diào)度到不同的磁道才能開始進(jìn)行讀寫。在目前的串行高級技術(shù)附件(Serial Advanced Technology Attachment ;以下簡稱:SATA)盤環(huán)境下,由于每次寫入的最小單位是一個扇區(qū),如果數(shù)據(jù)量太小,則扇區(qū)中多余的空間將會被浪費掉。而在驅(qū)動層或者操作系統(tǒng)層,通常寫緩存為一個頁面大小(4K或者8K),因此對于小數(shù)據(jù)量的每次更新或者寫入均調(diào)用一次寫盤操作的話,會增加延時,難以提尚吞吐量。
【發(fā)明內(nèi)容】
[0005]本發(fā)明的目的旨在至少在一定程度上解決相關(guān)技術(shù)中的技術(shù)問題之一。
[0006]為此,本發(fā)明的第一個目的在于提出一種數(shù)據(jù)寫入方法。該方法可以充分發(fā)揮批量讀寫與寫盤操作的并行性,可以在不影響應(yīng)用寫操作語義的前提下最大性能地提高吞吐量。
[0007]本發(fā)明的第二個目的在于提出一種數(shù)據(jù)寫入裝置。
[0008]為了實現(xiàn)上述目的,本發(fā)明第一方面實施例的數(shù)據(jù)寫入方法,包括:接收應(yīng)用發(fā)送的寫操作請求;將所述寫操作請求存入第一緩存;當(dāng)所述寫操作請求的類型為寫立即返回或?qū)懬彝讲僮鲿r,或者當(dāng)所述第一緩存已滿足緩存切換條件時,將保存接收的寫操作請求的緩存由所述第一緩存切換為第二緩存;對所述第一緩存中的寫操作請求執(zhí)行寫入操作。
[0009]本發(fā)明實施例的數(shù)據(jù)寫入方法,接收應(yīng)用發(fā)送的寫操作請求之后,先將接收到的寫操作請求存入第一緩存,當(dāng)上述寫操作請求的類型為寫立即返回或?qū)懬彝讲僮鲿r,或者當(dāng)上述第一緩存已滿足緩存切換條件時,將保存接收的寫操作請求的緩存由第一緩存切換為第二緩存,再對上述第一緩存中的寫操作請求執(zhí)行寫入操作,從而可以充分發(fā)揮批量讀寫與寫盤操作的并行性,進(jìn)而可以在不影響應(yīng)用寫操作語義的前提下最大性能地提高吞吐量。
[0010]為了實現(xiàn)上述目的,本發(fā)明第二方面實施例的數(shù)據(jù)寫入裝置,包括:接收模塊,用于接收應(yīng)用發(fā)送的寫操作請求;存入模塊,用于將所述接收模塊接收的寫操作請求存入第一緩存;切換模塊,用于當(dāng)所述寫操作請求的類型為寫立即返回或?qū)懬彝讲僮鲿r,或者當(dāng)所述第一緩存已滿足緩存切換條件時,將保存接收的寫操作請求的緩存由所述第一緩存切換為第二緩存;寫入模塊,用于對所述第一緩存中的寫操作請求執(zhí)行寫入操作。
[0011]本發(fā)明實施例的數(shù)據(jù)寫入裝置,接收模塊接收應(yīng)用發(fā)送的寫操作請求之后,存入模塊先將接收到的寫操作請求存入第一緩存,當(dāng)上述寫操作請求的類型為寫立即返回或?qū)懬彝讲僮鲿r,或者當(dāng)上述第一緩存已滿足緩存切換條件時,切換模塊將保存接收的寫操作請求的緩存由第一緩存切換為第二緩存,再由寫入模塊對上述第一緩存中的寫操作請求執(zhí)行寫入操作,從而可以充分發(fā)揮批量讀寫與寫盤操作的并行性,進(jìn)而可以在不影響應(yīng)用寫操作語義的前提下最大性能地提高吞吐量。
[0012]本發(fā)明附加的方面和優(yōu)點將在下面的描述中部分給出,部分將從下面的描述中變得明顯,或通過本發(fā)明的實踐了解到。
【附圖說明】
[0013]本發(fā)明上述的和/或附加的方面和優(yōu)點從下面結(jié)合附圖對實施例的描述中將變得明顯和容易理解,其中:
[0014]圖1為本發(fā)明數(shù)據(jù)寫入方法一個實施例的流程圖;
[0015]圖2為本發(fā)明數(shù)據(jù)寫入方法另一個實施例的示意圖;
[0016]圖3為本發(fā)明數(shù)據(jù)寫入裝置一個實施例的結(jié)構(gòu)示意圖;
[0017]圖4為本發(fā)明數(shù)據(jù)寫入裝置另一個實施例的結(jié)構(gòu)示意圖。
【具體實施方式】
[0018]下面詳細(xì)描述本發(fā)明的實施例,所述實施例的示例在附圖中示出,其中自始至終相同或類似的標(biāo)號表示相同或類似的元件或具有相同或類似功能的元件。下面通過參考附圖描述的實施例是示例性的,僅用于解釋本發(fā)明,而不能理解為對本發(fā)明的限制。相反,本發(fā)明的實施例包括落入所附加權(quán)利要求書的精神和內(nèi)涵范圍內(nèi)的所有變化、修改和等同物。
[0019]本發(fā)明提供的數(shù)據(jù)寫入方法基于兩個互為切換的緩存機制,在此基礎(chǔ)上實現(xiàn)sync操作(數(shù)據(jù)刷盤)與寫操作的并行執(zhí)行,從而實現(xiàn)寫入吞吐的提升。
[0020]根據(jù)應(yīng)用的調(diào)用語義,寫操作請求可以分為以下3種類型:寫立即返回、寫不立即返回和寫且同步操作三種。具體地,(I)寫立即返回:注重的是低延時,不要求立即sync到磁盤,但數(shù)據(jù)不可丟失。(2)寫不立即返回:注重的是吞吐,多用于高并發(fā)寫操作,一般不要求立即sync到磁盤,但數(shù)據(jù)也要求持久不可丟失。(3)寫且sync:注重的是持久性,多用于關(guān)鍵數(shù)據(jù)的寫操作(如元數(shù)據(jù)等),要求寫入的數(shù)據(jù)立即刷盤以防止掉電丟失。
[0021]在實際應(yīng)用中,這3種類型的寫操作請求會混合交叉到達(dá),其中(2)類型居多,其次是(I)類型,(3)類型比較少。本發(fā)明提供的數(shù)據(jù)寫入方法對于這3種類型的寫操作請求采用的處理方式如下:
[0022](I)寫立即返回:一旦接受到這種類型的寫操作請求,會觸發(fā)緩存切換,對切換下來的緩存中的寫操作請求執(zhí)行寫入操作。同時判斷是否滿足同步(sync)操作觸發(fā)條件,如果是,則執(zhí)行sync語義刷盤,將執(zhí)行寫入操作所寫入的數(shù)據(jù)存入磁盤,如果這時不滿足sync操作觸發(fā)條件,則返回,繼續(xù)接收寫操作請求。
[0023](2)寫不立即返回:對于這種類型的寫操作請求,直接存入緩存即可,當(dāng)檢查到緩存切換條件被滿足時,觸發(fā)緩存交換,對切換下來的緩存中的寫操作請求執(zhí)行寫入操作,但不會執(zhí)行sync操作。
[0024](3)寫且sync操作:這種類型的寫操作請求一旦到達(dá),不管當(dāng)前緩存是否有請求或者有多少請求,立即觸發(fā)緩存切換并執(zhí)行sync語義刷盤,將執(zhí)行寫入操作所寫入的數(shù)據(jù)存入磁盤。
[0025]圖1為本發(fā)明數(shù)據(jù)寫入方法一個實施例的流程圖,如圖1所示,該數(shù)據(jù)寫入方法可以包括:
[0026]步驟101,接收應(yīng)用發(fā)送的寫操作請求。
[0027]步驟102,將上述寫操作請求存入第一緩存。
[0028]步驟103,當(dāng)上述寫操作請求的類型為寫立即返回或?qū)懬彝?sync)操作時,或者當(dāng)上述第一緩存已滿足緩存切換條件時,將保存接收的寫操作請求的緩存由第一緩存切換為第二緩存。
[0029]具體地,上述寫操作請求的類型可以根據(jù)寫操作請求中攜帶的標(biāo)識確定,例如:當(dāng)上述寫操作請求中攜帶sync標(biāo)識時,可以確定上述寫操作請求的類型為寫且同步操作;當(dāng)上述寫操作請求中攜帶寫立即返回標(biāo)識時,可以確定上述寫操作請求的類型為寫立即返回;當(dāng)上述寫操作請求中攜帶寫不立即返回標(biāo)識時,可以確定上述寫操作請求的類型為寫不立即返回。
[0030]其中,第一緩存已