本發(fā)明涉及服務器存儲領域,更具體地說,涉及一種存儲系統(tǒng)數(shù)據(jù)的一致性保障方法、系統(tǒng)及緩存裝置。
背景技術:
目前存儲數(shù)據(jù)讀寫安全和可靠是存儲系統(tǒng)優(yōu)劣的重要指標,在關鍵業(yè)務應用中,數(shù)據(jù)不一致會給數(shù)據(jù)安全帶來極大的威脅,給客戶造成嚴重的損失,業(yè)務數(shù)據(jù)讀寫時無法實時讀取和校對,也增加了關鍵業(yè)務數(shù)據(jù)錯誤的風險。
因此,如何保證存儲系統(tǒng)數(shù)據(jù)一致性是本領域技術人員需要決絕的問題。
技術實現(xiàn)要素:
本發(fā)明的目的在于提供一種存儲系統(tǒng)數(shù)據(jù)的一致性保障方法、系統(tǒng)及緩存裝置,以保證存儲系統(tǒng)數(shù)據(jù)的一致性。
為實現(xiàn)上述目的,本發(fā)明實施例提供了如下技術方案:
一種存儲系統(tǒng)數(shù)據(jù)的一致性保障方法,包括:
在緩存中設置回滾段和數(shù)據(jù)校驗段;
接收第一目標數(shù)據(jù)刷寫指令,并將所述第一目標數(shù)據(jù)寫入所述回滾段中,計算所述第一目標數(shù)據(jù)的第一校驗值并存入所述數(shù)據(jù)校驗段;
將所述第一目標數(shù)據(jù)刷寫入磁盤,計算刷寫入磁盤的第一目標數(shù)據(jù)的第二校驗值;
若所述第一校驗值與所述第二校驗值不一致,則將所述回滾段中存儲的第一目標數(shù)據(jù)重新刷寫入磁盤。
其中,若所述第一校驗值與所述第二校驗值不一致,則將所述回滾段中存儲的目標數(shù)據(jù)重新刷寫入磁盤,包括:
若所述第一校驗值與所述第二校驗值不一致,則根據(jù)預設工具及所述回滾段中存儲的目標數(shù)據(jù),檢測所述寫入磁盤的第一目標數(shù)據(jù)被修改的數(shù)據(jù)塊;
根據(jù)所述回滾段中存儲的第一目標數(shù)據(jù)重建所述被修改的數(shù)據(jù)塊,并以重建后的數(shù)據(jù)塊代替被修改的數(shù)據(jù)塊。
其中,若所述第一校驗值與所述第二校驗值一致,則清空所述回滾段中存儲的所述第一目標數(shù)據(jù)、所述第一校驗值和所述第二校驗值。
其中,在緩存中設置回滾段之后,還包括:
接收第二目標數(shù)據(jù)修改指令;
將要被修改的所述第二目標數(shù)據(jù)寫入所述回寫段;
若檢測到所述第二目標數(shù)據(jù)修改指令執(zhí)行失敗,則將所述回寫段中存儲的所述第二目標數(shù)據(jù)刷寫入磁盤原位置。
其中,所述接收第二目標數(shù)據(jù)修改指令之后,還包括:
計算所述第二目標數(shù)據(jù)的第三校驗值并存入所述數(shù)據(jù)校驗段;
若檢測到所述第二目標數(shù)據(jù)修改指令執(zhí)行失敗之后,且檢測到所述回寫段中存儲的所述第二目標數(shù)據(jù)存在部分丟失現(xiàn)象,則根據(jù)所述第二目標數(shù)據(jù)未丟失部分和所述第三校驗值恢復第二目標數(shù)據(jù),并將恢復的第二目標數(shù)據(jù)刷寫入磁盤原位置。
其中,若檢測到所述第二目標數(shù)據(jù)修改指令執(zhí)行成功,則清空所述回滾段中存儲的所述第二目標數(shù)據(jù)和所述第三校驗值。
一種存儲系統(tǒng)數(shù)據(jù)的一致性保障系統(tǒng),包括:
設置模塊,用于在緩存中設置回滾段和數(shù)據(jù)校驗段;
第一寫入模塊,用于接收第一目標數(shù)據(jù)刷寫指令,并將所述第一目標數(shù)據(jù)寫入所述回滾段中;
第一計算模塊,用于計算所述第一目標數(shù)據(jù)的第一校驗值并存入所述數(shù)據(jù)校驗段;
數(shù)據(jù)刷寫模塊,用于將所述第一目標數(shù)據(jù)刷寫入磁盤;
第二計算模塊,用于計算刷寫入磁盤的第一目標數(shù)據(jù)的第二校驗值;
判斷模塊,用于判斷所述第一校驗值與所述第二校驗值不一致時,觸發(fā)所述數(shù)據(jù)刷寫模塊將所述回滾段中存儲的第一目標數(shù)據(jù)重新刷寫入磁盤。
其中,還包括:
接收模塊,用于接收第二目標數(shù)據(jù)修改指令;
第二寫入模塊,用于將要被修改的所述第二目標數(shù)據(jù)寫入所述回寫段;
第一檢測模塊,用于檢測到所述第二目標數(shù)據(jù)修改指令執(zhí)行失敗時,觸發(fā)所述數(shù)據(jù)刷寫模塊將所述回寫段中存儲的所述第二目標數(shù)據(jù)刷寫入磁盤原位置。
其中,還包括:
第三計算模塊,用于計算所述第二目標數(shù)據(jù)的第三校驗值并存入所述數(shù)據(jù)校驗段;
第二檢測模塊,用于檢測所述第二目標數(shù)據(jù)修改指令是否執(zhí)行失敗,
第三檢測模塊,用于檢測所述回寫段中存儲的所述第二目標數(shù)據(jù)是否存在部分丟失現(xiàn)象;
恢復模塊,用于在所述第二檢測模塊檢測到所述第二目標數(shù)據(jù)修改指令執(zhí)行失敗,且所述第三檢測模塊檢測到所述第二目標數(shù)據(jù)存在部分丟失現(xiàn)象,則根據(jù)所述第二目標數(shù)據(jù)未丟失部分和所述第三校驗值恢復第二目標數(shù)據(jù),并觸發(fā)所述數(shù)據(jù)刷寫模塊將恢復的第二目標數(shù)據(jù)刷寫入磁盤原位置。
一種緩存裝置,包括:回滾段和數(shù)據(jù)校驗段;
所述回滾段用于保存將要刷寫入磁盤的第一目標數(shù)據(jù);
所述數(shù)據(jù)校驗段,用于保存所述第一目標數(shù)據(jù)的第一校驗值;
其中,當檢測到刷寫入磁盤的第一目標數(shù)據(jù)的第二校驗值與所述第一校驗值不一致,則將所述回滾段中存儲的第一目標數(shù)據(jù)重新刷寫入磁盤。
通過以上方案可知,本發(fā)明實施例提供的一種存儲系統(tǒng)數(shù)據(jù)的一致性保障方法,包括:在緩存中設置回滾段和數(shù)據(jù)校驗段;接收第一目標數(shù)據(jù)刷寫指令,并將所述第一目標數(shù)據(jù)寫入所述回滾段中,計算所述第一目標數(shù)據(jù)的第一校驗值并存入所述數(shù)據(jù)校驗段;將所述第一目標數(shù)據(jù)刷寫入磁盤,計算刷寫入磁盤的第一目標數(shù)據(jù)的第二校驗值;若所述第一校驗值與所述第二校驗值不一致,則將所述回滾段中存儲的第一目標數(shù)據(jù)重新刷寫入磁盤;可見,在本實施例中,通過在緩存中設置回滾段和數(shù)據(jù)校驗段,能在數(shù)據(jù)寫入磁盤后,通過校驗數(shù)據(jù)檢測是否存在數(shù)據(jù)不一致現(xiàn)象,若存在,則通過回寫段內(nèi)的數(shù)據(jù)的原值直接回滾,重建速度快,避免在寫入過程中由于寫操作錯誤引起數(shù)據(jù)不一致的問題,提高了數(shù)據(jù)存儲的安全性;本發(fā)明還公開了一種存儲系統(tǒng)數(shù)據(jù)的一致性保障系統(tǒng)及緩存裝置,同樣能實現(xiàn)上述技術效果。
附圖說明
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術中的技術方案,下面將對實施例或現(xiàn)有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明實施例公開的一種存儲系統(tǒng)數(shù)據(jù)的一致性保障方法流程示意圖;
圖2為本發(fā)明實施例公開的數(shù)據(jù)重建方法示意圖;
圖3為本發(fā)明實施例公開的一種存儲系統(tǒng)數(shù)據(jù)的一致性保障系統(tǒng)結(jié)構(gòu)示意圖。
具體實施方式
下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領域普通技術人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
本發(fā)明實施例公開了一種存儲系統(tǒng)數(shù)據(jù)的一致性保障方法、系統(tǒng)及緩存裝置,以保證存儲系統(tǒng)數(shù)據(jù)的一致性。
參見圖1,本發(fā)明實施例提供的一種存儲系統(tǒng)數(shù)據(jù)的一致性保障方法,包括:
S101、在緩存中設置回滾段和數(shù)據(jù)校驗段;
具體的,在本方案中,首先在緩存中設置一部分固定空間作為回滾段,段中保存未刷寫到磁盤的數(shù)據(jù)或最近刷寫的數(shù)據(jù)中所修改的數(shù)據(jù)原值,段中信息還要生成一個保證數(shù)據(jù)一致性的數(shù)據(jù)校驗信息,能通過數(shù)據(jù)校驗信息來確定數(shù)據(jù)是否發(fā)生了一致性錯誤。若發(fā)生數(shù)據(jù)不一致時,使用回滾段中的信息重建此數(shù)據(jù)塊,并以重建后的數(shù)據(jù)塊代替被修改的數(shù)據(jù)塊供數(shù)據(jù)讀取。
S102、接收第一目標數(shù)據(jù)刷寫指令,并將所述第一目標數(shù)據(jù)寫入所述回滾段中,計算所述第一目標數(shù)據(jù)的第一校驗值并存入所述數(shù)據(jù)校驗段;
具體的,本實施例中計算校驗值的方法,可使用哈希算法或MD5等均可,并不做具體規(guī)定;由于生成校驗值時會占用系統(tǒng)資源并對系統(tǒng)整體性能有所影響,所以需要選擇資源占用小、對性能影響更小的算法來實現(xiàn),具體可以根據(jù)實際情況而定。
S103、將所述第一目標數(shù)據(jù)刷寫入磁盤,計算刷寫入磁盤的第一目標數(shù)據(jù)的第二校驗值;
S104、若所述第一校驗值與所述第二校驗值不一致,則將所述回滾段中存儲的第一目標數(shù)據(jù)重新刷寫入磁盤。
其中,若所述第一校驗值與所述第二校驗值不一致,則將所述回滾段中存儲的目標數(shù)據(jù)重新刷寫入磁盤,包括:
若所述第一校驗值與所述第二校驗值不一致,則根據(jù)預設工具及所述回滾段中存儲的目標數(shù)據(jù),檢測所述寫入磁盤的第一目標數(shù)據(jù)被修改的數(shù)據(jù)塊;
根據(jù)所述回滾段中存儲的第一目標數(shù)據(jù)重建所述被修改的數(shù)據(jù)塊,并以重建后的數(shù)據(jù)塊代替被修改的數(shù)據(jù)塊。
其中,若所述第一校驗值與所述第二校驗值一致,則清空所述回滾段中存儲的所述第一目標數(shù)據(jù)、所述第一校驗值和所述第二校驗值。
基于上述技術方案,在本實施例中,在緩存中設置回滾段之后,還包括:
S11、接收第二目標數(shù)據(jù)修改指令;
其中,所述接收第二目標數(shù)據(jù)修改指令之后,還包括:
計算所述第二目標數(shù)據(jù)的第三校驗值并存入所述數(shù)據(jù)校驗段;
若檢測到所述第二目標數(shù)據(jù)修改指令執(zhí)行失敗之后,且檢測到所述回寫段中存儲的所述第二目標數(shù)據(jù)存在部分丟失現(xiàn)象,則根據(jù)所述第二目標數(shù)據(jù)未丟失部分和所述第三校驗值恢復第二目標數(shù)據(jù),并將恢復的第二目標數(shù)據(jù)刷寫入磁盤原位置。
具體的,在本實施例中在回滾時直接使用回滾段中的原值可重新寫入磁盤,使得正確的數(shù)據(jù)再次落盤,不需要使用校驗信息來恢復數(shù)據(jù);但是如果回滾段中緩存的數(shù)據(jù)部分丟失,可以使用校驗信息和部分原值將全部原值恢復并重新寫入。
S12、將要被修改的所述第二目標數(shù)據(jù)寫入所述回寫段;
S13、若檢測到所述第二目標數(shù)據(jù)修改指令執(zhí)行失敗,則將所述回寫段中存儲的所述第二目標數(shù)據(jù)刷寫入磁盤原位置。
其中,若檢測到所述第二目標數(shù)據(jù)修改指令執(zhí)行成功,則清空所述回滾段中存儲的所述第二目標數(shù)據(jù)和所述第三校驗值。
具體的,參見圖2,若發(fā)生數(shù)據(jù)不一致時,使用回滾段中的信息重建此數(shù)據(jù)塊,并以重建后的數(shù)據(jù)塊代替被修改的數(shù)據(jù)塊供數(shù)據(jù)讀取。
具體的,由于本方案中的回滾段和數(shù)據(jù)校驗段設置在緩存中,該方式適合帶有BBU的存儲系統(tǒng),保障緩存數(shù)據(jù)安全;由于犧牲了一小部分緩存作為提高可靠性的代價,勢必對存儲性能有部分影響,所以本發(fā)明可以使用在與關鍵數(shù)據(jù)業(yè)務應用中,并在存儲系統(tǒng)中可設置是否開啟該功能的開關,由客戶根據(jù)業(yè)務類型來進行選擇,即可以設置成僅在關鍵業(yè)務中的關鍵時刻有選擇的使用,既保證了關鍵業(yè)務的安全又不影響日常的普通業(yè)務的性能。
具體的,在本實施例提供的這種基于存儲系統(tǒng)軟件實現(xiàn)數(shù)據(jù)一致性的方法,在存儲進行讀寫時通過固定一點緩存空間作為回滾段和校驗信息段的方式,當讀寫時通過校驗信息段能立即檢測到數(shù)據(jù)不一致的現(xiàn)象,并及時重建和恢復數(shù)據(jù),為數(shù)據(jù)存儲安全提供了可靠的保障,降低了硬件成本,又提高了系統(tǒng)的可靠性和安全性。
下面對本發(fā)明實施例提供的一致性保障系統(tǒng)進行介紹,下文描述的一致性保障系統(tǒng)與上文描述的一致性保障方法可以相互參照。
參見圖3,本發(fā)明實施例提供的一種存儲系統(tǒng)數(shù)據(jù)的一致性保障系統(tǒng),包括:
設置模塊100,用于在緩存中設置回滾段和數(shù)據(jù)校驗段;
第一寫入模塊200,用于接收第一目標數(shù)據(jù)刷寫指令,并將所述第一目標數(shù)據(jù)寫入所述回滾段中;
第一計算模塊300,用于計算所述第一目標數(shù)據(jù)的第一校驗值并存入所述數(shù)據(jù)校驗段;
數(shù)據(jù)刷寫模塊400,用于將所述第一目標數(shù)據(jù)刷寫入磁盤;
第二計算模塊500,用于計算刷寫入磁盤的第一目標數(shù)據(jù)的第二校驗值;
判斷模塊600,用于判斷所述第一校驗值與所述第二校驗值不一致時,觸發(fā)所述數(shù)據(jù)刷寫模塊將所述回滾段中存儲的第一目標數(shù)據(jù)重新刷寫入磁盤。
基于上述技術方案,還包括:
接收模塊,用于接收第二目標數(shù)據(jù)修改指令;
第二寫入模塊,用于將要被修改的所述第二目標數(shù)據(jù)寫入所述回寫段;
第一檢測模塊,用于檢測到所述第二目標數(shù)據(jù)修改指令執(zhí)行失敗時,觸發(fā)所述數(shù)據(jù)刷寫模塊將所述回寫段中存儲的所述第二目標數(shù)據(jù)刷寫入磁盤原位置。
基于上述技術方案,還包括:
第三計算模塊,用于計算所述第二目標數(shù)據(jù)的第三校驗值并存入所述數(shù)據(jù)校驗段;
第二檢測模塊,用于檢測所述第二目標數(shù)據(jù)修改指令是否執(zhí)行失敗,
第三檢測模塊,用于檢測所述回寫段中存儲的所述第二目標數(shù)據(jù)是否存在部分丟失現(xiàn)象;
恢復模塊,用于在所述第二檢測模塊檢測到所述第二目標數(shù)據(jù)修改指令執(zhí)行失敗,且所述第三檢測模塊檢測到所述第二目標數(shù)據(jù)存在部分丟失現(xiàn)象,則根據(jù)所述第二目標數(shù)據(jù)未丟失部分和所述第三校驗值恢復第二目標數(shù)據(jù),并觸發(fā)所述數(shù)據(jù)刷寫模塊將恢復的第二目標數(shù)據(jù)刷寫入磁盤原位置。
在本實施例中還公開了一種緩存裝置,包括:回滾段和數(shù)據(jù)校驗段;
所述回滾段用于保存將要刷寫入磁盤的第一目標數(shù)據(jù);
所述數(shù)據(jù)校驗段,用于保存所述第一目標數(shù)據(jù)的第一校驗值;
其中,當檢測到刷寫入磁盤的第一目標數(shù)據(jù)的第二校驗值與所述第一校驗值不一致,則將所述回滾段中存儲的第一目標數(shù)據(jù)重新刷寫入磁盤。
綜上可見,本發(fā)明提供的保障存儲數(shù)據(jù)一致性的實現(xiàn)方式,具有以下優(yōu)點:保障數(shù)據(jù)讀寫時的一致性,防止存儲系統(tǒng)數(shù)據(jù)讀寫錯誤;檢測速度快,當數(shù)據(jù)不一致時能立即檢測;發(fā)生數(shù)據(jù)不一致時,數(shù)據(jù)通過回滾段內(nèi)的數(shù)據(jù)原值直接回滾,重建數(shù)據(jù)庫速度快;包含BBU的存儲系統(tǒng)能時刻保障緩存數(shù)據(jù)的安全,回滾段和數(shù)據(jù)校驗段信息不易丟失;直接通過軟件實現(xiàn),減少了硬件投入成本。
本說明書中各個實施例采用遞進的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似部分互相參見即可。
對所公開的實施例的上述說明,使本領域?qū)I(yè)技術人員能夠?qū)崿F(xiàn)或使用本發(fā)明。對這些實施例的多種修改對本領域的專業(yè)技術人員來說將是顯而易見的,本文中所定義的一般原理可以在不脫離本發(fā)明的精神或范圍的情況下,在其它實施例中實現(xiàn)。因此,本發(fā)明將不會被限制于本文所示的這些實施例,而是要符合與本文所公開的原理和新穎特點相一致的最寬的范圍。