專利名稱:寫緩存方法、緩存同步方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明實施例涉及計算機技術(shù),尤其涉及一種寫緩存方法、緩存同步方法和裝置。
背景技術(shù):
目前的新型存儲設(shè)備,具有訪問速度快的優(yōu)勢,甚至具備非易失特性-即斷電之后數(shù)據(jù)不會丟失的特性。以基于flash的SSD為例,它的特點是價格和訪問速度介于內(nèi)存和普通磁盤之間,還有非易失特性,適合做內(nèi)存和磁盤之間的緩存。使用此類存儲設(shè)備作為數(shù)據(jù)庫系統(tǒng)的內(nèi)存和磁盤之間的緩存設(shè)備時,內(nèi)存中同一個數(shù)據(jù)塊有可能會經(jīng)過多次修改,在順序?qū)懢彺娌僮髦?,在緩存設(shè)備上就會存在同一個數(shù)據(jù)塊的多個副本(版本)。如何有效管理這些多版本的數(shù)據(jù)塊和高效利用緩存空間,為目前緩存數(shù)據(jù)組織管理方法的主要研究內(nèi)容。為了滿足順序?qū)懘疟P要求,將緩存設(shè)備劃分為固定大小的數(shù)據(jù)塊(緩存設(shè)備上固定大小的數(shù)據(jù)塊稱為BLOCK或緩存塊)。并組織為循環(huán)鏈表來使用。寫緩存操作從前向后順序?qū)態(tài)LOCK。之后使用一個同步緩存模塊,以順序循環(huán)訪問BLOCK的方式將寫過的BLOCK 中的臟數(shù)據(jù)同步到磁盤,同步之后的BLOCK可以在下次寫緩存時再次使用。另外,需要在內(nèi)存中開辟一塊單獨的空間保存緩存設(shè)備上BLOCK數(shù)據(jù)的信息,例如指示哪些BLOCK是最新的,指示哪些BLOCK是已經(jīng)被同步到磁盤的,下次需要同步操作的是哪些BLOCK,下次寫緩存要寫到哪些BLOCK等。由于目前順序?qū)懢彺娣椒?,需要按照BLOCK的排序?qū)?nèi)存中數(shù)據(jù)寫入緩存設(shè)備的 BLOCK,不能將內(nèi)存中數(shù)據(jù)并發(fā)寫入緩存設(shè)備,寫緩存效率低,緩存設(shè)備的空間利用率較低。 另外,由于緩存設(shè)備中有可能存在多個磁盤地址相同的數(shù)據(jù),在順序?qū)懘疟P時,最新版本的數(shù)據(jù)寫入磁盤時要等待較長時間,從而導致一些BLOCK中數(shù)據(jù)不能及時寫入磁盤。
發(fā)明內(nèi)容
本發(fā)明實施例提供一種寫緩存方法、緩存同步方法和裝置,用以解決現(xiàn)有技術(shù)中寫緩存效率低的缺陷和緩存設(shè)備中數(shù)據(jù)不能及時寫入磁盤的缺陷,提高了緩存設(shè)備的空間利用率。本發(fā)明實施例提供一種寫緩存方法,包括若緩存設(shè)備中緩存有與待緩存數(shù)據(jù)的磁盤地址相同的舊數(shù)據(jù),更新所述待緩存數(shù)據(jù)的版本號使所述待緩存數(shù)據(jù)的版本號表示所述待緩存數(shù)據(jù)晚于舊數(shù)據(jù)寫入緩存設(shè)備,并將所述舊數(shù)據(jù)的緩存地址作為所述待緩存數(shù)據(jù)的前一個版本的緩存地址,其中所述舊數(shù)據(jù)為與所述待緩存數(shù)據(jù)的磁盤地址相同的舊數(shù)據(jù);將各所述待緩存數(shù)據(jù)的版本號、磁盤地址和前一個版本的緩存地址以及所述待緩存數(shù)據(jù)寫入到內(nèi)存塊;在所述內(nèi)存塊的所有頁面寫入數(shù)據(jù)后將所述內(nèi)存塊中數(shù)據(jù)寫入所述緩存設(shè)備上的緩存塊中;所述待緩存數(shù)據(jù)的版本號、磁盤地址和前一個版本的緩存地址為所述待緩存數(shù)據(jù)所在頁面的頁面描述符。本發(fā)明實施例提供一種寫緩存裝置,包括更新模塊,用于若緩存設(shè)備中緩存有與待緩存數(shù)據(jù)的磁盤地址相同的舊數(shù)據(jù),更新所述待緩存數(shù)據(jù)的版本號使所述待緩存數(shù)據(jù)的版本號表示所述待緩存數(shù)據(jù)晚于舊數(shù)據(jù)寫入緩存設(shè)備,并將所述舊數(shù)據(jù)的緩存地址作為所述待緩存數(shù)據(jù)的前一個版本的緩存地址,其中所述舊數(shù)據(jù)為與所述待緩存數(shù)據(jù)的磁盤地址相同的舊數(shù)據(jù);寫內(nèi)存塊模塊,用于將各所述待緩存數(shù)據(jù)的版本號、磁盤地址和前一個版本的緩存地址以及所述待緩存數(shù)據(jù)寫入到內(nèi)存塊;寫緩存塊模塊,用于在所述內(nèi)存塊的頁面寫入數(shù)據(jù)后將所述內(nèi)存塊中數(shù)據(jù)寫入所述緩存設(shè)備上的緩存塊中;所述待緩存數(shù)據(jù)的版本號、磁盤地址和前一個版本的緩存地址為所述待緩存數(shù)據(jù)所在頁面的頁面描述符。本發(fā)明實施例提供的寫緩存方法和裝置,如果待緩存數(shù)據(jù)在緩存設(shè)備上有磁盤地址而版本號不相同的舊數(shù)據(jù),將待緩存數(shù)據(jù)寫入緩存塊后,在緩存塊中記錄緩存數(shù)據(jù)所在頁面的前一版本的緩存地址和緩存數(shù)據(jù)的版本號。通過緩存塊中記錄的緩存數(shù)據(jù)所在頁面的前一版本的緩存地址和緩存數(shù)據(jù)的版本號,可體現(xiàn)緩存數(shù)據(jù)寫入緩存的時間順序,而不需要通過緩存塊地址的順序來體現(xiàn)緩存塊中緩存數(shù)據(jù)寫入緩存的時間順序。因而不需要按緩存設(shè)備上緩存塊的排序?qū)?nèi)存塊中數(shù)據(jù)寫入緩存塊,可并發(fā)寫緩存設(shè)備上的緩存塊, 也提高了緩存設(shè)備的空間利用率。本發(fā)明實施例提供一種緩存同步方法,包括根據(jù)待同步的緩存塊中各頁面緩存的數(shù)據(jù)的前一個版本的緩存地址,對緩存設(shè)備中待同步的各緩存塊按照寫入緩存的先后順序進行排序;將待同步的各緩存塊按照與寫入緩存的先后順序從緩存設(shè)備寫入磁盤中;其中,對于一個待同步的緩存塊中的一個頁面,若所述緩存塊中記錄的所述頁面的版本號低于所述頁面的最新版本號,丟棄所述頁面中數(shù)據(jù);若所述緩存塊中記錄的所述頁面的版本號等于所述頁面的最新版本號,將所述頁面中數(shù)據(jù)寫入所述磁盤。本發(fā)明實施例提供一種緩存同步裝置,包括排序模塊,用于根據(jù)待同步的緩存塊中各頁面緩存的數(shù)據(jù)的前一個版本的緩存地址,對緩存設(shè)備中待同步的各緩存塊按照寫入緩存的先后順序進行排序;寫磁盤模塊,用于將待同步的各緩存塊按照與寫入緩存的先后順序從緩存設(shè)備寫入磁盤中;其中,對于一個待同步的緩存塊中的一個頁面,若所述緩存塊中記錄的所述頁面的版本號低于所述頁面的最新版本號,丟棄所述頁面中數(shù)據(jù);若所述緩存塊中記錄的所述頁面的版本號等于所述頁面的最新版本號,將所述頁面中數(shù)據(jù)寫入所述磁盤。本發(fā)明實施例提供的緩存同步方法和裝置,將緩存設(shè)備上緩存塊同步到磁盤之前,先根據(jù)各緩存塊中記錄的各頁面中數(shù)據(jù)的前一版本的緩存地址,各緩存塊進行排序,以確定各緩存塊寫入緩存設(shè)備的先后順序。在緩存塊按序?qū)懭氪疟P時,對于緩存塊中一個頁面,如果該緩存塊中記錄的該頁面的版本號低于該頁面的最新版本號,則直接丟棄該頁面中數(shù)據(jù),而不需要將該頁面寫入磁盤;只有在該緩存塊中記錄的該頁面的版本號等于該頁面的最新版本號時,才將該頁面寫入磁盤。因此,縮短了寫磁盤的等待時間。
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作一簡單地介紹,顯而易見地,下面描述中的附圖是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1為本發(fā)明提供的一種寫緩存方法實施例流程圖;圖2A為本發(fā)明實施例提供的另一種寫緩存方法流程圖;圖2B為本發(fā)明實施例提供的一種緩存管理模式圖;圖3為本發(fā)明實施例提供的恢復緩存管理表方法流程圖;圖4為本發(fā)明實施例提供的一種緩存同步方法流程圖;圖5A為本發(fā)明實施例提供的緩存同步方法中對緩存塊進行排序的方法流程圖;圖5B為本發(fā)明實施例提供的緩存數(shù)據(jù)分布示意圖;圖5C為本發(fā)明實施例提供的各BLOCK寫入緩存的順序關(guān)系樹示意圖;圖5D為對圖5C調(diào)整后各BLOCK寫入緩存的順序關(guān)系樹示意圖;圖6為本發(fā)明實施例提供的緩存同步方法中同步一個緩存塊的方法流程圖;圖7A為本發(fā)明實施例提供的一種寫緩存裝置結(jié)構(gòu)示意圖;圖7B為本發(fā)明實施例提供的另一種寫緩存裝置結(jié)構(gòu)示意圖;圖7C為本發(fā)明實施例提供的又一種寫緩存裝置結(jié)構(gòu)示意圖;圖7D為本發(fā)明實施例提供的再一種寫緩存裝置結(jié)構(gòu)示意圖;圖8為本發(fā)明實施例提供的一種緩存同步裝置結(jié)構(gòu)示意圖。
具體實施例方式圖1為本發(fā)明提供的一種寫緩存方法實施例流程圖。如圖1所示,本實施例提供的將內(nèi)存中數(shù)據(jù)寫入緩存設(shè)備的方法包括步驟11 若緩存設(shè)備中緩存有與待緩存數(shù)據(jù)的磁盤地址相同的舊數(shù)據(jù),更新待緩存數(shù)據(jù)的版本號使待緩存數(shù)據(jù)的版本號表示待緩存數(shù)據(jù)晚于舊數(shù)據(jù)寫入緩存設(shè)備,并將舊數(shù)據(jù)的緩存地址作為待緩存數(shù)據(jù)的前一個版本的緩存地址,其中舊數(shù)據(jù)為與待緩存數(shù)據(jù)的磁盤地址相同的舊數(shù)據(jù)。在緩存設(shè)備中寫入待緩存數(shù)據(jù)之前,先判斷緩存設(shè)備中是否緩存有與待緩存數(shù)據(jù)的磁盤地址相同的舊數(shù)據(jù),如果緩存設(shè)備中緩存有與待緩存數(shù)據(jù)的磁盤地址相同的舊數(shù)據(jù),更新待緩存數(shù)據(jù)的版本號使待緩存數(shù)據(jù)的版本號表示待緩存數(shù)據(jù)晚于舊數(shù)據(jù)寫入緩存設(shè)備,并將舊數(shù)據(jù)的緩存地址確定為待緩存數(shù)據(jù)的前一個版本的緩存地址,以便后續(xù)將待緩存數(shù)據(jù)的版本號和待緩存數(shù)據(jù)的前一個版本的緩存地址與待緩存數(shù)據(jù)一起寫入緩存設(shè)備。進一步,如果緩存設(shè)備中沒有緩存有與待緩存數(shù)據(jù)的磁盤地址相同的舊數(shù)據(jù),則需要為待緩存數(shù)據(jù)設(shè)置版本號和前一個版本的緩存地址。將待緩存數(shù)據(jù)的版本號設(shè)置為初始值,以表示在待緩存數(shù)據(jù)寫入緩存設(shè)備之前緩存設(shè)備中沒有磁盤地址與待寫入數(shù)據(jù)的磁盤地址相同的數(shù)據(jù)。將無效緩存地址設(shè)置為待緩存數(shù)據(jù)的前一個版本的緩存地址。步驟12 將各待緩存數(shù)據(jù)的版本號、磁盤地址和前一個版本的緩存地址以及待緩存數(shù)據(jù)寫入到內(nèi)存塊。每個待緩存數(shù)據(jù)占用內(nèi)存塊的一個頁面,在內(nèi)存塊中寫入待緩存數(shù)據(jù)時,同時將待緩存數(shù)據(jù)和待緩存數(shù)據(jù)的頁面描述符一起寫入內(nèi)存塊的一個頁面。步驟13 在內(nèi)存塊的所有頁面寫入數(shù)據(jù)后將內(nèi)存塊中數(shù)據(jù)寫入緩存設(shè)備上的緩存塊中;待緩存數(shù)據(jù)的版本號、磁盤地址和前一個版本的緩存地址為待緩存數(shù)據(jù)所在頁面的頁面描述符。在寫緩存時,以內(nèi)存塊為單位待緩存數(shù)據(jù)寫入緩存設(shè)備上的一個空閑緩存塊中。 在寫緩存塊時,只要將內(nèi)存塊寫入到任意一個空閑塊中即可,通過緩存塊中記錄的緩存數(shù)據(jù)的版本號,可體現(xiàn)緩存數(shù)據(jù)寫入緩存的時間順序,而不需要等待當前緩存塊寫完后,按照緩存塊的排序?qū)斍皟?nèi)存塊寫入當前緩存塊的下一個緩存塊,因此,本發(fā)明實施例提供的寫緩存方法可以并發(fā)寫緩存。本發(fā)明實施例提供的寫緩存方法,如果待緩存數(shù)據(jù)在緩存設(shè)備上有磁盤地址而版本號不相同的舊數(shù)據(jù),將待緩存數(shù)據(jù)寫入緩存塊后,在緩存塊中記錄緩存數(shù)據(jù)所在頁面的前一版本的緩存地址和緩存數(shù)據(jù)的版本號。通過緩存塊中記錄的緩存數(shù)據(jù)所在頁面的前一版本的緩存地址和緩存數(shù)據(jù)的版本號,可體現(xiàn)緩存數(shù)據(jù)寫入緩存的時間順序,而不需要通過緩存塊地址的順序來體現(xiàn)緩存塊中緩存數(shù)據(jù)寫入緩存的時間順序。因而不需要按緩存設(shè)備上緩存塊的排序?qū)?nèi)存塊中數(shù)據(jù)寫入緩存塊,可并發(fā)寫緩存設(shè)備上的緩存塊,也提高了緩存設(shè)備的空間利用率。圖2A為本發(fā)明實施例提供的另一種寫緩存方法流程圖,圖2B為本發(fā)明實施例提供的一種緩存管理模式圖。本實施例提供的寫緩存方法用于將內(nèi)存中數(shù)據(jù)寫入緩存設(shè)備。 如圖2A所示,本實施例提供的寫緩存方法包括步驟21 根據(jù)待緩存數(shù)據(jù)的磁盤地址和緩存數(shù)據(jù)管理表,確定緩存設(shè)備中是否緩存有與待緩存數(shù)據(jù)的磁盤地址相同的舊數(shù)據(jù)。若是執(zhí)行步驟22,否則執(zhí)行步驟23。如圖2B所示,本發(fā)明實施例提供的緩存方案中,將緩存設(shè)備劃分為m個大小一致的BL0CK,BL0CK在本發(fā)明實施例中也稱為緩存塊。BLOCK大小的具體值根據(jù)緩存設(shè)備自身的特性來設(shè)置,通常是內(nèi)存頁面PAGE大小的整數(shù)倍,可以將每一個BLOCK劃分為η個大小相同的PAGE空間。內(nèi)存中的每一個內(nèi)存塊占用的空間大小與緩存設(shè)備上一個緩存塊占用的空間大小相同,每個內(nèi)存塊的大小也是內(nèi)存頁面PAGE大小的整數(shù)倍。表1為緩存數(shù)據(jù)管理表
磁盤地址版本號緩存地址K0V0緩存塊號、頁面號在內(nèi)存中建立緩存數(shù)據(jù)管理表,用于管理已緩存設(shè)備上寫入緩存且版本最新的數(shù)據(jù)所在的緩存頁面。由于不同緩存頁面中可能會包含磁盤地址相同而版本號不同的數(shù)據(jù)。 如表1所示,緩存數(shù)據(jù)管理表中不同表項中的磁盤地址互不相同。緩存數(shù)據(jù)管理表包括已寫入緩存頁面且版本最新的數(shù)據(jù)的磁盤地址、緩存地址和版本號。其中,版本號表示磁盤地址相同的多個數(shù)據(jù)寫入緩存設(shè)備的時間順序。具體地,緩存管理表可采用哈希表結(jié)構(gòu)實現(xiàn)。在緩存設(shè)備中寫入待緩存數(shù)據(jù)之前,查找緩存管理表中是否包含與待緩存數(shù)據(jù)的磁盤地址相同的表項,從而確定緩存設(shè)備中是否緩存有與待緩存數(shù)據(jù)的磁盤地址相同的舊數(shù)據(jù)。如果緩存管理表中包含有與待緩存數(shù)據(jù)的磁盤地址相同的表項,則確定緩存設(shè)備上已有緩存頁面緩存有與待緩存數(shù)據(jù)的磁盤地址相同的舊數(shù)據(jù)。步驟22 若所述緩存設(shè)備中緩存有與待緩存數(shù)據(jù)的磁盤地址相同的舊數(shù)據(jù),更新所述待緩存數(shù)據(jù)的版本號使所述待緩存數(shù)據(jù)的版本號表示所述待緩存數(shù)據(jù)晚于所述舊數(shù)據(jù)寫入緩存設(shè)備,并將所述緩存數(shù)據(jù)管理表中記錄的所述舊數(shù)據(jù)的緩存地址作為所述待緩存數(shù)據(jù)的前一個版本的緩存地址。步驟23 若所述緩存設(shè)備中沒有緩存有與待緩存數(shù)據(jù)的磁盤地址相同的舊數(shù)據(jù), 將所述待緩存數(shù)據(jù)的版本號設(shè)置為初始值,并將無效緩存地址作為所述待緩存數(shù)據(jù)的前一個版本的緩存地址;所述初始值表示在待緩存數(shù)據(jù)寫入所述緩存設(shè)備之前所述緩存設(shè)備中沒有磁盤地址與所述待寫入數(shù)據(jù)的磁盤地址相同的數(shù)據(jù)。如果緩存設(shè)備中緩存有與待緩存數(shù)據(jù)的磁盤地址相同的舊數(shù)據(jù),確定該數(shù)據(jù)是待緩存數(shù)據(jù)的前一個版本,因此需要更新所述待緩存數(shù)據(jù)的版本號,使所述待緩存數(shù)據(jù)的版本號高于所述舊數(shù)據(jù)的版本號;另外,還要將所述緩存數(shù)據(jù)管理表中記錄的該舊數(shù)據(jù)的緩存地址作為所述待緩存數(shù)據(jù)的前一個版本的緩存地址,以便在將待緩存數(shù)據(jù)寫入緩存設(shè)備后,在緩存管理表中更新待緩存數(shù)據(jù)的磁盤地址對應(yīng)的表項中版本號和緩存地址。如果緩存設(shè)備中沒有緩存有與待緩存數(shù)據(jù)的磁盤地址相同的舊數(shù)據(jù),則需要為待緩存數(shù)據(jù)設(shè)置版本號和前一個版本的緩存地址。將待緩存數(shù)據(jù)的版本號設(shè)置為初始值,以表示在待緩存數(shù)據(jù)寫入所述緩存設(shè)備之前所述緩存設(shè)備中沒有磁盤地址與所述待寫入數(shù)據(jù)的磁盤地址相同的數(shù)據(jù)。將無效緩存地址設(shè)置為待緩存數(shù)據(jù)的前一個版本的緩存地址。步驟M 將各所述待緩存數(shù)據(jù)的版本號、磁盤地址和前一個版本的緩存地址以及所述待緩存數(shù)據(jù)寫入到內(nèi)存塊;在該內(nèi)存塊的所有頁面寫入數(shù)據(jù)后,將所述內(nèi)存塊中數(shù)據(jù)寫入所述緩存設(shè)備上的緩存塊中;所述待緩存數(shù)據(jù)的版本號、磁盤地址和前一個版本的緩存地址為所述待緩存數(shù)據(jù)所在頁面的頁面描述符。每個待緩存數(shù)據(jù)占用內(nèi)存塊的一個頁面,在內(nèi)存塊中寫入待緩存數(shù)據(jù)時,同時將待緩存數(shù)據(jù)和待緩存數(shù)據(jù)的頁面描述符一起寫入內(nèi)存塊的一個頁面。在寫緩存時,以內(nèi)存塊為單位待緩存數(shù)據(jù)寫入緩存設(shè)備上的緩存塊中。步驟25 在所述緩存數(shù)據(jù)管理表中記錄所述緩存塊中版本號為初始值的數(shù)據(jù)的磁盤地址、緩存地址和版本號;在所述緩存數(shù)據(jù)管理表中更新所述緩存塊中版本號不是初始值的數(shù)據(jù)的緩存地址和版本號。由于緩存塊中版本號為初始值的數(shù)據(jù),在緩存管理表中還沒有記錄該數(shù)據(jù)的磁盤地址、緩存地址和版本號。因此需要在緩存管理表中記錄該數(shù)據(jù)的磁盤地址、緩存地址和版本號。緩存塊中版本號為不是初始值的數(shù)據(jù),在緩存管理表中已記錄該數(shù)據(jù)舊版本的緩存地址和版本號,需要在緩存管理表中更新為最新版本數(shù)據(jù)的緩存地址和版本號。以上對緩存管理表的修改,使緩存管理表中記錄已寫入緩存且版本最新的數(shù)據(jù)所在頁面的信息,從而為可后續(xù)寫緩存提供依據(jù)。進一步,每個待緩存數(shù)據(jù)占用內(nèi)存塊的一個頁面,可以將待寫入數(shù)據(jù)的頁面描述符寫入到所述內(nèi)存塊的第一個頁面,將所述待寫入數(shù)據(jù)寫入到所述內(nèi)存塊中除第一個頁面之外的其它空閑頁面,從而每個待緩存數(shù)據(jù)的頁面描述符都寫在內(nèi)存塊的第一個頁面,內(nèi)存塊的其它頁面按順序?qū)懭氪彺鏀?shù)據(jù)。在內(nèi)存塊除第一頁面外,其它每個頁面寫入待緩存數(shù)據(jù)的磁盤地址互不相同。在該內(nèi)存塊的所有頁面寫入數(shù)據(jù)后,將該內(nèi)存塊中數(shù)據(jù)寫入所述緩存設(shè)備上的一個緩存塊中。如圖2B所示,本發(fā)明提供的一種緩存方案中,緩存設(shè)備上每個BLOCK中的第一個頁面(PAGE)空間存儲了后續(xù)n_l個PAGE的頁面描述符(PAGE_ Descriptor) :PAGE_ID、緩存數(shù)據(jù)的磁盤地址、頁面版本號和緩存數(shù)據(jù)的前一個版本的緩存地址。其中,PAGE_ID :表示每個BLOCK中n個PAGE數(shù)據(jù)頁對應(yīng)的編號,也可以直接用描述符的數(shù)組下標來表示;頁面對應(yīng)的磁盤地址即緩存數(shù)據(jù)的磁盤地址,指向該頁面最終要同步到磁盤的磁盤地址;頁面版本號,表示緩存數(shù)據(jù)的版本號。進一步,每個BLOCK中的第一個頁面(PAGE)空間存儲了還可存儲該BLOCK的描述信息,例如,BL0CK_ID、I/O狀態(tài)和臟數(shù)據(jù)標識。其中,BL0CK_ID :表示緩存設(shè)備劃分為m個BLOCK數(shù)據(jù)塊之后每個塊的編號;1/0 狀態(tài)表示當前BLOCK是正在寫緩存、正在同步磁盤還是空閑;臟數(shù)據(jù)標識表示該BLOCK 中是否包含需要同步到磁盤的臟數(shù)據(jù),可以區(qū)分是否作過同步磁盤操作。本發(fā)明實施例提供的寫緩存方法,在內(nèi)存中建立了緩存管理表用于保存已寫入緩存且版本最新的數(shù)據(jù)的磁盤地址、版本號和緩存地址。在將待緩存數(shù)據(jù)寫入緩存設(shè)備之前,通過緩存管理表可確定待緩存數(shù)據(jù)在緩存設(shè)備上是否有磁盤地址而版本號不相同的舊數(shù)據(jù),從而在寫入緩存后,可在緩存塊中記錄緩存數(shù)據(jù)所在頁面的前一版本的緩存地址和緩存數(shù)據(jù)的版本號。通過緩存塊中記錄的緩存數(shù)據(jù)所在頁面的前一版本的緩存地址和緩存數(shù)據(jù)的版本號,可體現(xiàn)緩存數(shù)據(jù)寫入緩存的時間順序,而不需要通過緩存塊的排序來體現(xiàn)緩存塊中緩存數(shù)據(jù)寫入緩存的時間順序。因而不需要按緩存設(shè)備上緩存塊的排序?qū)?nèi)存塊中數(shù)據(jù)寫入緩存塊,可并發(fā)寫緩存設(shè)備上的緩存塊,也提高了緩存設(shè)備的空間利用率。圖3為本發(fā)明實施例提供的恢復緩存管理表方法流程圖。由于斷電或故障等原因?qū)е聝?nèi)存中緩存管理表中數(shù)據(jù)丟失后,在內(nèi)存重新啟動后,可根據(jù)各所述緩存塊中記錄的各頁面的頁面描述符,恢復所述緩存數(shù)據(jù)管理表。如圖3所示,基于圖2B提供的緩存方案具體的恢復緩存管理表方法包括步驟31 :內(nèi)存重啟動后,創(chuàng)建新的緩存數(shù)據(jù)管理表。步驟32 :從第一個緩存塊開始掃描循環(huán)掃描緩存設(shè)備上所有緩存塊的第一個頁面。步驟33 :判斷是否已處理完當前緩存塊中記錄的所有頁面的頁面描述符。如果是已處理完當前緩存塊中所有頁面的頁面描述符,返回步驟32掃描下一個緩存塊,否則執(zhí)行步驟34。步驟34 :獲取當前緩存塊中記錄的一個頁面的頁面描述符。步驟35 :查找緩存數(shù)據(jù)管理表中是否存在磁盤地址為當前頁面描述符中的磁盤地址的緩存記錄。若存在執(zhí)行步驟36,否則執(zhí)行步驟37。步驟36 :若存在所述緩存記錄且所述緩存記錄中的版本號低于當前頁面描述符中的版本號,將所述緩存記錄中的版本號和緩存地址替換為當前頁面描述符中的版本號和緩存地址。之后,返回步驟33繼續(xù)執(zhí)行。若存在所述緩存記錄且所述緩存記錄中的版本號高于所述頁面描述符中的版本號,則不需要修改已有的緩存記錄,直接返回步驟33繼續(xù)執(zhí)行。步驟37 :若不存所述緩存記錄,將所述頁面描述符中的磁盤地址、版本號和緩存地址寫入所述緩存數(shù)據(jù)管理表中。之后,直接返回步驟33繼續(xù)執(zhí)行。通過本實施例提供的方法,可快速恢復內(nèi)存中的緩存管理表。實現(xiàn)了對系統(tǒng)崩潰之前緩存數(shù)據(jù)的重復使用,加速了系統(tǒng)預熱速度。圖4為本發(fā)明實施例提供的一種緩存同步方法流程圖。如圖4所示,將緩存設(shè)備中數(shù)據(jù)同步到磁盤的方法包括步驟41 :根據(jù)待同步的緩存塊中各頁面緩存的數(shù)據(jù)的前一個版本的緩存地址,對緩存設(shè)備中待同步的各緩存塊按照寫入緩存的先后順序進行排序。根據(jù)待同步的緩存塊中各頁面緩存的數(shù)據(jù)的前一個版本的緩存地址,通過遞歸算法對緩存設(shè)備中待同步的各緩存塊按照寫入緩存的順序進行排序;其中,比較兩個待同步的緩存塊寫入緩存的先后順序的方法具體為若第一緩存塊中有一個頁面緩存的數(shù)據(jù)的前一個版本的緩存地址為第二緩存塊的緩存塊號,確定所述第二緩存塊先于所述第二緩存塊寫入緩存設(shè)備。步驟42 :將待同步的各緩存塊按照與寫入緩存的先后順序從緩存設(shè)備寫入磁盤中;其中,對于一個待同步的緩存塊中的一個頁面,若所述緩存塊中記錄的該頁面的版本號低于該頁面的最新版本號,丟棄該頁面中數(shù)據(jù);若所述緩存塊中記錄的該頁面的版本號等于該頁面的最新版本號,將該頁面中數(shù)據(jù)寫入所述磁盤中該頁面的磁盤地址對應(yīng)空間中。緩存塊中記錄有每個頁面的緩存地址、版本號和前一個版本的緩存地址。在磁盤中寫入頁面時,根據(jù)緩存塊中記錄的該頁面的磁盤地址,將該頁面寫入磁盤。若所述緩存塊中記錄的該頁面的版本號低于該頁面的最新版本號,確定該頁面數(shù)據(jù)不是最新版本,為避免對同一磁盤地址重復寫不同版本的舊數(shù)據(jù),只需要將同一磁盤地址的最新版本的數(shù)據(jù)寫入磁盤,縮短了寫磁盤的等待時間,提高寫磁盤的效率,從而可使最新版本的數(shù)據(jù)可及時寫到磁盤。進一步,緩存塊中每個頁面的最新版本號和最新版本的緩存地址和磁盤地址可通過緩存管理表來記錄。將一個頁面寫入磁盤后,在緩存管理表中刪除該頁面的磁盤地址對應(yīng)的記錄。從而可確保緩存管理表的一項記錄,只有在磁盤地址為該記錄中磁盤地址且是最新版本的數(shù)據(jù)被同步到磁盤后才被刪除。進一步,也可以按照寫入緩存的先后順序的相反順序,對緩存設(shè)備中待同步的各緩存塊進行排序。在寫磁盤時,按照寫入緩存的先后順序,將待同步的各緩存塊從緩存設(shè)備寫入磁盤中。本發(fā)明實施例提供的緩存同步方法,將緩存設(shè)備上緩存塊同步到磁盤之前,先根據(jù)各緩存塊中記錄的各頁面中數(shù)據(jù)的前一版本的緩存地址,各緩存塊進行排序,以確定各緩存塊寫入緩存設(shè)備的先后順序。在緩存塊按序?qū)懭氪疟P時,對于緩存塊中一個頁面,如果該緩存塊中記錄的該頁面的版本號低于該頁面的最新版本號,則直接丟棄該頁面中數(shù)據(jù), 而不需要將該頁面寫入磁盤;只有在該緩存塊中記錄的該頁面的版本號等于該頁面的最新版本號時,才將該頁面寫入磁盤。因此,縮短了寫磁盤的等待時間。圖5A為本發(fā)明實施例提供的緩存同步方法中對緩存塊進行排序的方法流程圖, 圖5B為本發(fā)明實施例提供的緩存數(shù)據(jù)分布示意圖,圖5C為本發(fā)明實施例提供的各BLOCK 與入緩存的順序關(guān)系樹不意圖,圖5D為對圖5C調(diào)整后各BLOCK與入緩存的順序關(guān)系樹不意圖。本實施例提供的方法用于將緩存設(shè)備上緩存塊同步到磁盤之前如何對各緩存塊進行排序以確定各緩存塊寫入磁盤的先后順序。步驟51 :將 BL0CK_ID 記錄到一個數(shù)組 Block_Sync_Array [m]中。步驟52 :讀取該BLOCK的第一個頁面中記錄的各頁面的頁面描述符(PAGE_ Descriptor)。步驟53 :將該BLOCK各頁面中數(shù)據(jù)的前一個版本的緩存塊號,記錄到Bl0ck_Sync_ Array[m]中。從各頁面的頁面描述符中獲取各頁面中數(shù)據(jù)的前一個版本的緩存地址。緩存地址包括緩存塊號和頁面號。步驟54 :遞歸查找比數(shù)組Block_Sync_Array [m]中記錄的BL0CK_ID版本號更低的BL0CK_ID,直至找不到版本更低的BL0CK_ID為止,將這些BL0CK_ID按照版本從高到低順序保存到數(shù)組Block_Sync_Array [m]中。數(shù)組Block_Sync_Array[m]中記錄的BL0CK_ID的倒序,即為寫入緩存的順序。 Block_Sync_Array [m]的元素按照如圖5C所示關(guān)系樹的寬度遍歷順序排列。步驟55 :從低版本到高版本的順序訪問Block_Sync_Array[m]中記錄的BL0CK_ ID,對每個BLOCK做同步磁盤操作,直到同步完Block_Sync_Array [m]中所有BLOCK。如圖5B所示,緩存設(shè)備上各BLOCK中的箭頭代表了 PAGE前一個版本的緩存地址, 它從新版本PAGE指向舊版本的PAGE。因為寫緩存是以BLOCK為單位,一個BLOCK中的所有頁面中數(shù)據(jù)是在同一時刻寫入的,所以圖5B所示的箭頭不會出現(xiàn)BL0CK_A指向BL0CK_ B、而BL0CK_B又同時指向BL0CK_A的閉環(huán)現(xiàn)象。根據(jù)圖5B中所示的箭頭指向,可以得出如圖5C所示的各個BLOCK之間的新舊關(guān)系,其中父節(jié)點比子節(jié)點版本更新。如圖5C所示, BL0CK_6后于BL0CK_8寫入緩存設(shè)備,而BL0CK_0和BL0CK_4先于BL0CK_6寫入緩存設(shè)備, BL0CK_6又先于BL0CK_7寫入緩存設(shè)備,因此BL0CK_0和BL0CK_4也先于BL0CK_7寫入緩存設(shè)備。對圖5D進行層次遍歷,得到以下序列的BL0CK_8、BL0CK_7、BL0CK_5、BL0CK_3、 BL0CK_6、BL0CK_2、BL0CK_0、BL0CK_4。上述BLOCK序列的倒序即為各BLOCK寫入緩存的先后順序。按照以上序列的倒序,分別將各BLOCK寫入磁盤。圖6為本發(fā)明實施例提供的緩存同步方法中同步一個緩存塊的方法流程圖。如圖 6所示,本實施例包括步驟61 :按頁面順序獲取當前緩存塊中記錄的一個頁面的頁面描述符。步驟62 :根據(jù)當前頁面的磁盤地址,在緩存管理表中查找當前頁面中數(shù)據(jù)的最新版本號。在緩存管理表中查找一個表項,該表項中的磁盤地址與當前頁面的磁盤地址相同。步驟63 :判斷當前緩存塊中記錄的當前頁面的版本號是否等于緩存管理表中的最新版本號。若等于執(zhí)行步驟65,若低于執(zhí)行步驟64,若高于確定出現(xiàn)異常。步驟64:若當前緩存塊中記錄的當前頁面的版本號低于最新版本號,丟棄當前頁面中數(shù)據(jù)。之后,執(zhí)行步驟66。若當前緩存塊中記錄的當前頁面的版本號低于緩存管理表中記錄的最新版本號, 確定當前頁面中數(shù)據(jù)不是最新版本的數(shù)據(jù),直接丟棄不需要寫入磁盤中。步驟65 :若當前緩存塊中記錄的當前頁面的版本號等于最新版本號,將當前頁面中數(shù)據(jù)寫入到磁盤中所述指定磁盤地址對應(yīng)的空間中后,在所述緩存管理表中刪除所述頁面的磁盤地址對應(yīng)的記錄。指定磁盤地址為當前緩存塊中記錄的當前頁面的磁盤地址。之后,執(zhí)行步驟66。若當前緩存塊中記錄的當前頁面的版本號等于緩存管理表中記錄的最新版本號, 確定當前頁面中數(shù)據(jù)是最新版本的數(shù)據(jù),將當前頁面中數(shù)據(jù)寫入到磁盤中所述指定磁盤地址對應(yīng)的空間中。此時,當前頁面的數(shù)據(jù)成功寫入磁盤。若當前緩存塊中記錄的當前頁面的版本號高于緩存管理表中記錄的最新版本號, 則確定系統(tǒng)出現(xiàn)異常。步驟66 :判斷當前緩存塊的所有頁面是否已寫入磁盤。如果是,執(zhí)行步驟67,否則執(zhí)行步驟61。步驟67 :刪除當前緩存塊。本實施例提供的將緩存設(shè)備上一個緩存塊同步到磁盤中的方法,將緩存塊中記錄的各頁面的版本號,與緩存管理表中記錄的各頁面的最新版本號進行比較,從而可確定待寫入磁盤的頁面中數(shù)據(jù)是否為最新版本的數(shù)據(jù)。如果不是最新版本數(shù)據(jù),則不需要寫入磁盤。圖7A為本發(fā)明實施例提供的一種寫緩存裝置結(jié)構(gòu)示意圖。如圖7A所示,本實施例包括更新模塊71、寫內(nèi)存塊模塊72和寫緩存塊模塊73。更新模塊71,用于若緩存設(shè)備中緩存有與待緩存數(shù)據(jù)的磁盤地址相同的舊數(shù)據(jù), 更新所述待緩存數(shù)據(jù)的版本號使所述待緩存數(shù)據(jù)的版本號表示所述待緩存數(shù)據(jù)晚于舊數(shù)據(jù)寫入緩存設(shè)備,并將所述舊數(shù)據(jù)的緩存地址作為所述待緩存數(shù)據(jù)的前一個版本的緩存地址,其中所述舊數(shù)據(jù)為與所述待緩存數(shù)據(jù)的磁盤地址相同的舊數(shù)據(jù)。寫內(nèi)存塊模塊72,用于將各所述待緩存數(shù)據(jù)的版本號、磁盤地址和前一個版本的緩存地址以及所述待緩存數(shù)據(jù)寫入到內(nèi)存塊。寫緩存塊模塊73,用于在所述內(nèi)存塊的頁面寫入數(shù)據(jù)后將所述內(nèi)存塊中數(shù)據(jù)寫入所述緩存設(shè)備上的緩存塊中;所述待緩存數(shù)據(jù)的版本號、磁盤地址和前一個版本的緩存地址為所述待緩存數(shù)據(jù)所在頁面的頁面描述符。進一步,如圖7B所示,在圖7A的基礎(chǔ)上還包括設(shè)置模塊74。設(shè)置模塊74,用于若所述緩存設(shè)備中緩存沒有與所述待緩存數(shù)據(jù)的磁盤地址相同的舊數(shù)據(jù)將所述待緩存數(shù)據(jù)的版本號設(shè)置為初始值,并將無效緩存地址作為所述待緩存數(shù)據(jù)的前一個版本的緩存地址;所述初始值表示在待緩存數(shù)據(jù)寫入所述緩存設(shè)備之前所述緩存設(shè)備中沒有磁盤地址與所述待寫入數(shù)據(jù)的磁盤地址相同的數(shù)據(jù)。本發(fā)明實施例提供的寫緩存裝置,如果待緩存數(shù)據(jù)在緩存設(shè)備上有磁盤地址而版本號不相同的舊數(shù)據(jù),將待緩存數(shù)據(jù)寫入緩存塊后,在緩存塊中記錄緩存數(shù)據(jù)所在頁面的前一版本的緩存地址和緩存數(shù)據(jù)的版本號。通過緩存塊中記錄的緩存數(shù)據(jù)所在頁面的前一版本的緩存地址和緩存數(shù)據(jù)的版本號,可體現(xiàn)緩存數(shù)據(jù)寫入緩存的時間順序,而不需要通過緩存塊地址的順序來體現(xiàn)緩存塊中緩存數(shù)據(jù)寫入緩存的時間順序。因而不需要按緩存設(shè)備上緩存塊的排序?qū)?nèi)存塊中數(shù)據(jù)寫入緩存塊,可并發(fā)寫緩存設(shè)備上的緩存塊,也提高了緩存設(shè)備的空間利用率。圖7C為本發(fā)明實施例提供的又一種寫緩存裝置結(jié)構(gòu)示意圖。如圖7C所示,在圖7A或圖7B的基礎(chǔ)上還包括判斷模塊75。判斷模塊75,用于根據(jù)緩存數(shù)據(jù)管理表,確定所述緩存設(shè)備中是否緩存有與所述待緩存數(shù)據(jù)的磁盤地址相同的舊數(shù)據(jù);所述緩存數(shù)據(jù)管理表包括已寫入緩存頁面且版本最新的數(shù)據(jù)的磁盤地址、緩存地址和版本號,所述版本號表示磁盤地址相同的多個數(shù)據(jù)寫入緩存設(shè)備的時間順序。進一步,如圖7D所示,在圖7C的基礎(chǔ)上還包括管理表更新模塊76。管理表更新模塊76,用于在所述內(nèi)存塊的所有頁面寫入數(shù)據(jù)后將所述內(nèi)存塊中數(shù)據(jù)寫入所述緩存設(shè)備上的緩存塊中之后,在所述緩存數(shù)據(jù)管理表中記錄所述緩存塊中版本號為初始值的數(shù)據(jù)的磁盤地址、緩存地址和版本號;在所述緩存數(shù)據(jù)管理表中更新所述緩存塊中版本號不是初始值的數(shù)據(jù)的緩存地址和版本號。進一步,還可包括管理表恢復模塊,用于在內(nèi)存重新啟動后,根據(jù)各所述緩存塊中記錄的各頁面的頁面描述符,恢復所述緩存數(shù)據(jù)管理表。管理表恢復模塊,具體用于查找所述緩存數(shù)據(jù)管理表中是否存在磁盤地址為所述頁面描述符中的磁盤地址的緩存記錄;若存在所述緩存記錄且所述緩存記錄中的版本號低于所述頁面描述符中的版本號,將所述緩存記錄中的版本號和緩存地址替換為所述頁面描述符中的版本號和緩存地址;若不存所述緩存記錄,將所述頁面描述符中的磁盤地址、版本號和緩存地址寫入所述緩存數(shù)據(jù)管理表中。本發(fā)明實施例提供的寫緩存裝置,在內(nèi)存中建立了緩存管理表用于保存已寫入緩存且版本最新的數(shù)據(jù)的磁盤地址、版本號和緩存地址。在將待緩存數(shù)據(jù)寫入緩存設(shè)備之前, 通過緩存管理表可確定待緩存數(shù)據(jù)在緩存設(shè)備上是否有磁盤地址而版本號不相同的舊數(shù)據(jù),從而在寫入緩存后,可在緩存塊中記錄緩存數(shù)據(jù)所在頁面的前一版本的緩存地址和緩存數(shù)據(jù)的版本號。通過緩存塊中記錄的緩存數(shù)據(jù)所在頁面的前一版本的緩存地址和緩存數(shù)據(jù)的版本號,可體現(xiàn)緩存數(shù)據(jù)寫入緩存的時間順序,而不需要通過緩存塊的排序來體現(xiàn)緩存塊中緩存數(shù)據(jù)寫入緩存的時間順序。因而不需要按緩存設(shè)備上緩存塊的排序?qū)?nèi)存塊中數(shù)據(jù)寫入緩存塊,可并發(fā)寫緩存設(shè)備上的緩存塊,也提高了緩存設(shè)備的空間利用率。圖8為本發(fā)明實施例提供的一種緩存同步裝置結(jié)構(gòu)示意圖。如圖8所示,紅艷艷同步裝置包括排序模塊81和寫磁盤模塊82。排序模塊81,用于根據(jù)待同步的緩存塊中各頁面緩存的數(shù)據(jù)的前一個版本的緩存地址,對緩存設(shè)備中待同步的各緩存塊按照寫入緩存的先后順序進行排序。排序模塊81具體用于根據(jù)待同步的緩存塊中各頁面緩存的數(shù)據(jù)的前一個版本的緩存地址,通過遞歸算法對緩存設(shè)備中待同步的各緩存塊按照寫入緩存的順序進行排序; 其中,比較兩個待同步的緩存塊寫入緩存的先后順序的方法具體為若第一緩存塊中有一個頁面緩存的數(shù)據(jù)的前一個版本的緩存地址為第二緩存塊的緩存地址,確定所述第二緩存塊先于所述第二緩存塊寫入緩存設(shè)備。寫磁盤模塊82,用于將待同步的各緩存塊按照與寫入緩存的先后順序從緩存設(shè)備寫入磁盤中;其中,對于一個待同步的緩存塊中的一個頁面,若所述緩存塊中記錄的所述頁面的版本號低于所述頁面的最新版本號,丟棄所述頁面中數(shù)據(jù);若所述緩存塊中記錄的所述頁面的版本號等于所述頁面的最新版本號,將所述頁面中數(shù)據(jù)寫入所述磁盤。進一步,所述寫磁盤模塊82,還用于在緩存管理表中刪除所述頁面的磁盤地址對CN 102541757 A
應(yīng)的記錄;所述緩存數(shù)據(jù)管理表用于記錄已寫入緩存頁面且版本最新的數(shù)據(jù)的磁盤地址、 緩存地址和版本號。本發(fā)明實施例提供的緩存同步裝置,將緩存設(shè)備上緩存塊同步到磁盤之前,先根據(jù)各緩存塊中記錄的各頁面中數(shù)據(jù)的前一版本的緩存地址,各緩存塊進行排序,以確定各緩存塊寫入緩存設(shè)備的先后順序。在緩存塊按序?qū)懭氪疟P時,對于緩存塊中一個頁面,如果該緩存塊中記錄的該頁面的版本號低于該頁面的最新版本號,則直接丟棄該頁面中數(shù)據(jù), 而不需要將該頁面寫入磁盤;只有在該緩存塊中記錄的該頁面的版本號等于該頁面的最新版本號時,才將該頁面寫入磁盤。因此,縮短了寫磁盤的等待時間。本領(lǐng)域普通技術(shù)人員可以理解實現(xiàn)上述方法實施例的全部或部分步驟可以通過程序指令相關(guān)的硬件來完成,前述的程序可以存儲于一計算機可讀取存儲介質(zhì)中,該程序在執(zhí)行時,執(zhí)行包括上述方法實施例的步驟;而前述的存儲介質(zhì)包括R0M、RAM、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。
權(quán)利要求
1.一種寫緩存方法,其特征在于,包括若緩存設(shè)備中緩存有與待緩存數(shù)據(jù)的磁盤地址相同的舊數(shù)據(jù),更新所述待緩存數(shù)據(jù)的版本號使所述待緩存數(shù)據(jù)的版本號表示所述待緩存數(shù)據(jù)晚于舊數(shù)據(jù)寫入緩存設(shè)備,并將所述舊數(shù)據(jù)的緩存地址作為所述待緩存數(shù)據(jù)的前一個版本的緩存地址,其中所述舊數(shù)據(jù)為與所述待緩存數(shù)據(jù)的磁盤地址相同的舊數(shù)據(jù);將各所述待緩存數(shù)據(jù)的版本號、磁盤地址和前一個版本的緩存地址以及所述待緩存數(shù)據(jù)寫入到內(nèi)存塊;在所述內(nèi)存塊的頁面寫入數(shù)據(jù)后將所述內(nèi)存塊中數(shù)據(jù)寫入所述緩存設(shè)備上的緩存塊中;所述待緩存數(shù)據(jù)的版本號、磁盤地址和前一個版本的緩存地址為所述待緩存數(shù)據(jù)所在頁面的頁面描述符。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,還包括若所述緩存設(shè)備中緩存沒有與所述待緩存數(shù)據(jù)的磁盤地址相同的舊數(shù)據(jù)將所述待緩存數(shù)據(jù)的版本號設(shè)置為初始值,并將無效緩存地址作為所述待緩存數(shù)據(jù)的前一個版本的緩存地址;所述初始值表示在待緩存數(shù)據(jù)寫入所述緩存設(shè)備之前所述緩存設(shè)備中沒有磁盤地址與所述待寫入數(shù)據(jù)的磁盤地址相同的數(shù)據(jù)。
3.根據(jù)權(quán)利要求1或2所述的方法,其特征在于,還包括根據(jù)緩存數(shù)據(jù)管理表,確定所述緩存設(shè)備中是否緩存有與所述待緩存數(shù)據(jù)的磁盤地址相同的舊數(shù)據(jù);所述緩存數(shù)據(jù)管理表用于記錄已寫入緩存頁面且版本最新的數(shù)據(jù)的磁盤地址、緩存地址和版本號,所述版本號表示磁盤地址相同的多個數(shù)據(jù)寫入緩存設(shè)備的時間順序。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,在所述內(nèi)存塊的所有頁面寫入數(shù)據(jù)后將所述內(nèi)存塊中數(shù)據(jù)寫入所述緩存設(shè)備上的緩存塊中之后,還包括在所述緩存數(shù)據(jù)管理表中記錄所述緩存塊中版本號為初始值的數(shù)據(jù)的磁盤地址、緩存地址和版本號;在所述緩存數(shù)據(jù)管理表中更新所述緩存塊中版本號不是初始值的數(shù)據(jù)的緩存地址和版本號。
5.根據(jù)權(quán)利要求3所述的方法,其特征在于,還包括在內(nèi)存重新啟動后,根據(jù)各所述緩存塊中記錄的各頁面的頁面描述符,恢復所述緩存數(shù)據(jù)管理表。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,根據(jù)各所述緩存塊中記錄的各頁面的頁面描述符,恢復所述緩存數(shù)據(jù)管理表中根據(jù)一個頁面的頁面描述符,恢復所述緩存數(shù)據(jù)管理表中一個緩存記錄的方法包括查找所述緩存數(shù)據(jù)管理表中是否存在磁盤地址為所述頁面描述符中的磁盤地址的緩存記錄;若存在所述緩存記錄且所述緩存記錄中的版本號低于所述頁面描述符中的版本號,將所述緩存記錄中的版本號和緩存地址替換為所述頁面描述符中的版本號和緩存地址;若不存所述緩存記錄,將所述頁面描述符中的磁盤地址、版本號和緩存地址寫入所述緩存數(shù)據(jù)管理表中。
7.一種緩存同步方法,其特征在于,包括根據(jù)待同步的緩存塊中各頁面緩存的數(shù)據(jù)的前一個版本的緩存地址,對緩存設(shè)備中待同步的各緩存塊按照寫入緩存的先后順序進行排序;將待同步的各緩存塊按照與寫入緩存的先后順序從緩存設(shè)備寫入磁盤中;其中,對于一個待同步的緩存塊中的一個頁面,若所述緩存塊中記錄的所述頁面的版本號低于所述頁面的最新版本號,丟棄所述頁面中數(shù)據(jù);若所述緩存塊中記錄的所述頁面的版本號等于所述頁面的最新版本號,將所述頁面中數(shù)據(jù)寫入所述磁盤。
8.根據(jù)權(quán)利要求7所述的方法,其特征在于,在將所述頁面中數(shù)據(jù)寫入到所述磁盤之后,還包括在緩存管理表中刪除所述頁面的磁盤地址對應(yīng)的記錄;所述緩存數(shù)據(jù)管理表用于記錄已寫入緩存頁面且版本最新的數(shù)據(jù)的磁盤地址、緩存地址和版本號。
9.根據(jù)權(quán)利要求7或8所述的方法,其特征在于,所述根據(jù)待同步的緩存塊中各頁面緩存的數(shù)據(jù)的前一個版本的緩存地址,對緩存設(shè)備中待同步的各緩存塊按照寫入緩存的先后順序進行排序具體為根據(jù)待同步的緩存塊中各頁面緩存的數(shù)據(jù)的前一個版本的緩存地址,通過遞歸算法對緩存設(shè)備中待同步的各緩存塊按照寫入緩存的順序進行排序;其中,比較兩個待同步的緩存塊寫入緩存的先后順序的方法具體為若第一緩存塊中有一個頁面緩存的數(shù)據(jù)的前一個版本的緩存地址為第二緩存塊的緩存地址,確定所述第二緩存塊先于所述第二緩存塊寫入緩存設(shè)備。
10.一種寫緩存裝置,其特征在于,包括更新模塊,用于若緩存設(shè)備中緩存有與待緩存數(shù)據(jù)的磁盤地址相同的舊數(shù)據(jù),更新所述待緩存數(shù)據(jù)的版本號使所述待緩存數(shù)據(jù)的版本號表示所述待緩存數(shù)據(jù)晚于舊數(shù)據(jù)寫入緩存設(shè)備,并將所述舊數(shù)據(jù)的緩存地址作為所述待緩存數(shù)據(jù)的前一個版本的緩存地址,其中所述舊數(shù)據(jù)為與所述待緩存數(shù)據(jù)的磁盤地址相同的舊數(shù)據(jù);寫內(nèi)存塊模塊,用于將各所述待緩存數(shù)據(jù)的版本號、磁盤地址和前一個版本的緩存地址以及所述待緩存數(shù)據(jù)寫入到內(nèi)存塊;寫緩存塊模塊,用于在所述內(nèi)存塊的頁面寫入數(shù)據(jù)后將所述內(nèi)存塊中數(shù)據(jù)寫入所述緩存設(shè)備上的緩存塊中;所述待緩存數(shù)據(jù)的版本號、磁盤地址和前一個版本的緩存地址為所述待緩存數(shù)據(jù)所在頁面的頁面描述符。
11.根據(jù)權(quán)利要求10所述的寫緩存裝置,其特征在于,還包括設(shè)置模塊,用于若所述緩存設(shè)備中緩存沒有與所述待緩存數(shù)據(jù)的磁盤地址相同的舊數(shù)據(jù)將所述待緩存數(shù)據(jù)的版本號設(shè)置為初始值,并將無效緩存地址作為所述待緩存數(shù)據(jù)的前一個版本的緩存地址;所述初始值表示在待緩存數(shù)據(jù)寫入所述緩存設(shè)備之前所述緩存設(shè)備中沒有磁盤地址與所述待寫入數(shù)據(jù)的磁盤地址相同的數(shù)據(jù)。
12.根據(jù)權(quán)利要求10或11所述的寫緩存裝置,其特征在于,還包括判斷模塊,用于根據(jù)緩存數(shù)據(jù)管理表,確定所述緩存設(shè)備中是否緩存有與所述待緩存數(shù)據(jù)的磁盤地址相同的舊數(shù)據(jù);所述緩存數(shù)據(jù)管理表用于記錄已寫入緩存頁面且版本最新的數(shù)據(jù)的磁盤地址、緩存地址和版本號,所述版本號表示磁盤地址相同的多個數(shù)據(jù)寫入緩存設(shè)備的時間順序。
13.根據(jù)權(quán)利要求12所述的寫緩存裝置,其特征在于,還包括管理表更新模塊,用于在所述緩存數(shù)據(jù)管理表中記錄所述緩存塊中版本號為初始值的CN 102541757 A數(shù)據(jù)的磁盤地址、緩存地址和版本號;在所述緩存數(shù)據(jù)管理表中更新所述緩存塊中版本號不是初始值的數(shù)據(jù)的緩存地址和版本號。
14.根據(jù)權(quán)利要求12所述的寫緩存裝置,其特征在于,還包括管理表恢復模塊,用于在內(nèi)存重新啟動后,根據(jù)各所述緩存塊中記錄的各頁面的頁面描述符,恢復所述緩存數(shù)據(jù)管理表。
15.根據(jù)權(quán)利要求14所述的寫緩存裝置,其特征在于,所述管理表恢復模塊,具體用于查找所述緩存數(shù)據(jù)管理表中是否存在磁盤地址為所述頁面描述符中的磁盤地址的緩存記錄;若存在所述緩存記錄且所述緩存記錄中的版本號低于所述頁面描述符中的版本號,將所述緩存記錄中的版本號和緩存地址替換為所述頁面描述符中的版本號和緩存地址;若不存所述緩存記錄,將所述頁面描述符中的磁盤地址、版本號和緩存地址寫入所述緩存數(shù)據(jù)管理表中。
16.一種緩存同步裝置,其特征在于,包括排序模塊,用于根據(jù)待同步的緩存塊中各頁面緩存的數(shù)據(jù)的前一個版本的緩存地址, 對緩存設(shè)備中待同步的各緩存塊按照寫入緩存的先后順序進行排序;寫磁盤模塊,用于將待同步的各緩存塊按照與寫入緩存的先后順序從緩存設(shè)備寫入磁盤中;其中,對于一個待同步的緩存塊中的一個頁面,若所述緩存塊中記錄的所述頁面的版本號低于所述頁面的最新版本號,丟棄所述頁面中數(shù)據(jù);若所述緩存塊中記錄的所述頁面的版本號等于所述頁面的最新版本號,將所述頁面中數(shù)據(jù)寫入所述磁盤。
17.根據(jù)權(quán)利要求16所述的緩存同步裝置,其特征在于,所述寫磁盤模塊,還用于在緩存管理表中刪除所述頁面的磁盤地址對應(yīng)的記錄;所述緩存數(shù)據(jù)管理表用于記錄已寫入緩存頁面且版本最新的數(shù)據(jù)的磁盤地址、緩存地址和版本號。
18.根據(jù)權(quán)利要求16或17所述的緩存同步裝置,其特征在于,所述排序模塊具體用于根據(jù)待同步的緩存塊中各頁面緩存的數(shù)據(jù)的前一個版本的緩存地址,通過遞歸算法對緩存設(shè)備中待同步的各緩存塊按照寫入緩存的順序進行排序;其中,比較兩個待同步的緩存塊寫入緩存的先后順序的方法具體為若第一緩存塊中有一個頁面緩存的數(shù)據(jù)的前一個版本的緩存地址為第二緩存塊的緩存地址,確定所述第二緩存塊先于所述第二緩存塊寫入緩存設(shè)備。
全文摘要
本發(fā)明提供一種寫緩存方法、緩存同步方法和裝置。其中,寫緩存方法包括若緩存設(shè)備中緩存有與待緩存數(shù)據(jù)的磁盤地址相同的舊數(shù)據(jù),更新待緩存數(shù)據(jù)的版本號使待緩存數(shù)據(jù)的版本號表示待緩存數(shù)據(jù)晚于舊數(shù)據(jù)寫入緩存設(shè)備,并將舊數(shù)據(jù)的緩存地址作為待緩存數(shù)據(jù)的前一個版本的緩存地址,其中舊數(shù)據(jù)為與待緩存數(shù)據(jù)的磁盤地址相同的舊數(shù)據(jù);將各待緩存數(shù)據(jù)的版本號、磁盤地址和前一個版本的緩存地址以及待緩存數(shù)據(jù)寫入到內(nèi)存塊;在內(nèi)存塊的頁面寫入數(shù)據(jù)后將內(nèi)存塊中數(shù)據(jù)寫入緩存設(shè)備上的緩存塊中;待緩存數(shù)據(jù)的版本號、磁盤地址和前一個版本的緩存地址為待緩存數(shù)據(jù)所在頁面的頁面描述符。本發(fā)明可并發(fā)寫緩存設(shè)備上的緩存塊。
文檔編號G06F12/08GK102541757SQ20111039066
公開日2012年7月4日 申請日期2011年11月30日 優(yōu)先權(quán)日2011年11月30日
發(fā)明者崔明華 申請人:華為技術(shù)有限公司