專利名稱:一種支持并發(fā)的文件事務方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種文件事務方法,尤其涉及一種支持并發(fā)的文件事務方法。
背景技術(shù):
傳統(tǒng)技術(shù)中,對于文件的讀寫都是基于操作系統(tǒng)中的文件系統(tǒng)實現(xiàn)的,數(shù)據(jù)以文件為單位存儲,且由操作系統(tǒng)統(tǒng)一管理,文件的邏輯結(jié)構(gòu)和物理結(jié)構(gòu)脫鉤,程序和數(shù)據(jù)分離,是數(shù)據(jù)和程序有了一定的獨立性,用戶的程序和數(shù)據(jù)可以分別存放,各個應用程序可以共享一組數(shù)據(jù),可以實現(xiàn)以文件為單位的數(shù)據(jù)共享。但由于數(shù)據(jù)的組織仍然是面向程序,所以基于操作系統(tǒng)的文件的讀寫有種種限制,如不能進行并發(fā)操作、無法遠程操作文件等。當某個應用面臨終端分布廣、需要并發(fā)操作、對數(shù)據(jù)共享有很高要求時,可能就需要選用數(shù)據(jù)庫來完成,數(shù)據(jù)庫能夠統(tǒng)一管理和共享數(shù)據(jù),數(shù)據(jù)冗余很少,程序和數(shù)據(jù)有很高的獨立性, 數(shù)據(jù)庫對數(shù)據(jù)進行統(tǒng)一管理和控制,提供了數(shù)據(jù)的安全性、完整性以及并發(fā)控制。但是可能由于各種歷史條件的限制,各個部門或者地區(qū)根據(jù)自身的信息需求和特定的應用可能選擇了各自的軟硬件環(huán)境,所以應用面臨的數(shù)據(jù)庫版本各異,開發(fā)出來的應用無法直接復制到另一個平臺中使用,同時使用數(shù)據(jù)庫還面臨著高昂的購買費用、復雜的安裝等問題。
發(fā)明內(nèi)容
本發(fā)明的目的就是為了解決上述問題,提供一種支持并發(fā)的文件事務方法,它提高了文件的安全性,并可以在多個平臺上使用且不需要安裝。為了實現(xiàn)上述目的,本發(fā)明采用如下技術(shù)方案 一種支持并發(fā)的文件事務方法,該方法的實現(xiàn)步驟如下
步驟1 初始化數(shù)據(jù)庫系統(tǒng)服務器,并判斷原文件是否存在,如存在則轉(zhuǎn)入步驟3,如不存在則轉(zhuǎn)入步驟2 ;
步驟2 判斷原文件的備份文件是否存在,如存在,則轉(zhuǎn)入步驟3,如備份文件不存在則拋出異常;
步驟3 反序列化原文件或備份文件為對象;
步驟4:判斷對象的消息鑒別碼Mac是否正確,如果正確則跳至步驟5,如錯誤則拋出異
常;
步驟5:將對象保存在內(nèi)存中;
步驟6 對文件進行并發(fā)操作并進行保存。所述的步驟6中對文件進行并發(fā)操作的實現(xiàn)步驟如下
1)深拷貝備份文件對象到臨時文件對象中;
2)判斷臨時對象的Mac是否正確,如果正確則跳至步驟3),如果錯誤則判斷原文件是否存在,如原文件存在則拷貝給備份文件,如原文件不存在則拋出異常;
3)用戶對臨時對象進行寫操作;
4)從磁盤重新讀取原文件到臨時對象中;5)判斷臨時對象的Mac是否正確,如果正確,轉(zhuǎn)向步驟6),如果錯誤則拋出異常;
6)將臨時對象寫入備份文件中;
7)完成文件的并發(fā)操作。所述反序列化是將字節(jié)序列恢復為對象的過程。所述步驟3)中對文件進行寫操作時,每次執(zhí)行完文件寫操作后調(diào)用操作系統(tǒng)的刷新文件緩存方法強制刷新緩存文件內(nèi)容到磁盤上,保證每次寫文件都能及時寫到磁盤上。本發(fā)明的有益效果
1、一種支持并發(fā)的文件事務系統(tǒng)可以使用java語言進行開發(fā),開發(fā)完成后因為java 語言跨平臺的特性使得支持并發(fā)的文件事務系統(tǒng)也可以在多個平臺使用,一種支持并發(fā)的文件事務系統(tǒng)安裝方便只需進行拷貝安裝即可,無需進行復雜的配置,故解決了應用使用數(shù)據(jù)庫帶來的難以跨平臺、安裝復雜、高昂的購買費用等問題,采用該方法的應用具有很好的復制性,可以在多個平臺上使用,并且不需要安裝。2、修改原先文件事務設(shè)計上存在的死鎖問題,將所有的對文件的訪問統(tǒng)一到一個對象來操作,解決多線程讀寫操作的安全,解決了文件操作中的多人并發(fā)操作時的文件沖突問題,使文件操作易于標準化,易于規(guī)范化,可以更好的并行操作。3、提高了文件的安全性,方法中所有操作都以拷貝的文件對象來執(zhí)行,可以有效確保數(shù)據(jù)版本安全,并且在每次打開、保存對象的時候都對其Mac值進行驗證,可以有效防止有人惡意篡改數(shù)據(jù)。
圖1為支持并發(fā)的文件事務方法流程圖; 圖2為文件加載步驟圖3為文件操作步驟圖。
具體實施例方式下面結(jié)合附圖與實施例對本發(fā)明作進一步說明。如圖1所示,為支持并發(fā)的文件事務方法流程圖,該方法的實現(xiàn)步驟如下
A.文件加載,從文件路徑上獲取文件并將文件反序列化為對象,將對象保存在內(nèi)存
中;
B.文件操作、保存,對文件的操作都是基于對對象的操作,文件對象是支持并發(fā)操作的,文件保存是將內(nèi)存中的對象重新寫入文件中。如圖2所示為文件加載流程圖,加載步驟如下 Al.首先將獲取的相對路徑轉(zhuǎn)為絕對路徑;
A2.判斷文件是否存在,如文件存在則跳至A3,如文件不存在則判斷備份文件是否存在,如備份文件存在,則將備份文件反序列化為對象并跳至步驟A4 ; A3.反序列化文件為對象;
A4.判斷對象的Mac是否正確,如果正確則跳至步驟A5,如錯誤則判斷備份文件是否存在,如備份文件存在,則將備份文件反序列化為對象,判斷備份文件對象的Mac是否正確, 如果正確則跳至步驟A5,如果錯誤則拋出異常;A5.將反序列化后的對象返回。如圖3所示,文件操作包含以下步驟
Bi.深拷貝備份文件對象到臨時文件對象中,每次事務寫操作前先從要寫的文件對象深拷貝出一個臨時文件對象,后面的所有寫操作均以此拷貝的文件對象來執(zhí)行,防止計算 Mac值后其他線程對此文件對象進行修改;
B2.判斷臨時對象Mac是否正確,如果正確則跳至步驟B3,如果錯誤則判斷原文件是否存在,并將原文件拷貝給備份文件;
B3.用戶對對象進行操作,因為對象的特性可以允許多個用戶對同一對象操作,創(chuàng)建 Mac碼,并將經(jīng)過操作后的對象寫入原文件,在進行文件寫操作時,每次執(zhí)行完文件寫操作后調(diào)用操作系統(tǒng)的刷新文件緩存方法強制刷新緩存文件內(nèi)容到磁盤上,保證每次寫文件都能及時寫到磁盤上;
B4.從磁盤重新讀取原文件到臨時對象中;
B5.判斷臨時對象的Mac是否正確,如果正確,轉(zhuǎn)向步驟B6,如果錯誤則拋出異常; B6.將臨時對象寫入備份文件中。在本發(fā)明中,Mac指的是消息鑒別碼(Message Authentication Code),消息鑒別碼實現(xiàn)鑒別的原理是,用公開函數(shù)和密鑰產(chǎn)生一個固定長度的值作為認證標識,用這個標識鑒別消息的完整性。使用一個密鑰生成一個固定大小的數(shù)據(jù)塊,即MAC,并將其加入到消息中,然后傳輸;接收方利用與發(fā)送方共享的密鑰進行鑒別認證等。實施例1:
在線考試系統(tǒng)中,考生的答卷一般以文件的形式儲存在服務器上,考生答題時對服務器上的答題文件進行在線訪問,答完一個題目后即進行寫操作。但在使用在線考試系統(tǒng)中存在一個特殊需求,即在考試過程中如監(jiān)考老師發(fā)現(xiàn)某個學生作弊需要將其作弊信息寫入到其答題文件中,這就涉及到了文件的并發(fā)訪問問題,以往會使用數(shù)據(jù)庫來解決這個問題,數(shù)據(jù)庫可以很好的對并發(fā)訪問進行控制分配。但如果這個考試是大范圍性的,因為各地的服務器操作系統(tǒng)各異就會造成無法對數(shù)據(jù)庫進行統(tǒng)一安裝,即使能夠統(tǒng)一數(shù)據(jù)庫版本也存在著安裝復雜、費用較高的問題,使用本發(fā)明則可以很好地解決這種輕量級的文件并發(fā)訪問問題。利用本發(fā)明所開發(fā)的系統(tǒng)不需要進行安裝,只需要將其跟考試系統(tǒng)一塊部署在服務器上即可,例如AnswerFile、AnswerFile. bak為服務器上考生的兩個答題文件,其中AnswerFile為原文件,AnswerFile. bak為備份文件,在系統(tǒng)初始化時會首先判斷AnswerFile文件是否存在,如果AnswerFile文件存在就將其反序列化為對象,如果 AnswerFile文件不存在就將AnswerFile. bak反序列化為對象,反序列化后會判斷對象的 Mac值是不是正確,如果原文件AnswerFile對象的Mac值不正確就將備份AnswerFile. bak 文件反序列化為對象并判斷其Mac值。當用戶需要進行答題即對AnswerFi 1 e文件進行操作時,可以對AnswerFi 1 e對象進行操作,因為對象的一些特性使其可以供多人并發(fā)操作,此時如果監(jiān)考老師需要對 AnswerFile文件進行操作如加入些作弊信息等時也可以對AnswerFile對象進行操作,操作時系統(tǒng)首先會深拷貝備份文件對象到臨時文件對象AnswerFile. bak. temp中,然后判斷臨時對象的AnswerFile. bak. temp的Mac是否正確,如果不正確就將原文件AnswerFile拷貝給備份文件AnswerFile. bak,如果臨時對象Mac正確用戶就可以對對象進行操作了,首先系統(tǒng)會創(chuàng)建一個Mac碼,并將經(jīng)過操作后的對象寫入原文件中。當原文件寫完后還需要將原文件創(chuàng)建個備份,首先需要將原文件讀成對象再檢驗Mac值是否正確,最后將臨時對象也寫入到AnswerFile. bak文件中。 上述雖然結(jié)合附圖對本發(fā)明的具體實施方式
進行了描述,但并非對本發(fā)明保護范圍的限制,所屬領(lǐng)域技術(shù)人員應該明白,在本發(fā)明的技術(shù)方案的基礎(chǔ)上,本領(lǐng)域技術(shù)人員不需要付出創(chuàng)造性勞動即可做出的各種修改或變形仍在本發(fā)明的保護范圍以內(nèi)。
權(quán)利要求
1.一種支持并發(fā)的文件事務方法,其特征是,該方法的實現(xiàn)步驟如下步驟1 初始化數(shù)據(jù)庫系統(tǒng)服務器,并判斷原文件是否存在,如存在則轉(zhuǎn)入步驟3,如不存在則轉(zhuǎn)入步驟2 ;步驟2 判斷原文件的備份文件是否存在,如存在,則轉(zhuǎn)入步驟3,如備份文件不存在則拋出異常;步驟3 反序列化原文件或備份文件為對象;步驟4:判斷對象的消息鑒別碼Mac是否正確,如果正確則跳至步驟5,如錯誤則拋出異常;步驟5:將對象保存在內(nèi)存中;步驟6 對文件進行并發(fā)操作并進行保存。
2.如權(quán)利要求書1所述的一種支持并發(fā)的文件事務方法,其特征是,所述的步驟6中 對文件進行并發(fā)操作的實現(xiàn)步驟如下1)深拷貝備份文件對象到臨時文件對象中;2)判斷臨時對象的Mac是否正確,如果正確則跳至步驟3),如果錯誤則判斷原文件是否存在,如原文件存在則拷貝給備份文件,如原文件不存在則拋出異常;3)用戶對臨時對象進行寫操作;4)從磁盤重新讀取原文件到臨時對象中;5)判斷臨時對象的Mac是否正確,如果正確,轉(zhuǎn)向步驟6),如果錯誤則拋出異常;6)將臨時對象寫入備份文件中;7)完成文件的并發(fā)操作。
3.如權(quán)利要求書1所述的一種支持并發(fā)的文件事務方法,其特征是,所述反序列化是將字節(jié)序列恢復為對象的過程。
4.如權(quán)利要求書2所述的一種支持并發(fā)的文件事務方法,其特征是,所述步驟3)中對文件進行寫操作時,每次執(zhí)行完文件寫操作后調(diào)用操作系統(tǒng)的刷新文件緩存方法強制刷新緩存文件內(nèi)容到磁盤上,保證每次寫文件都能及時寫到磁盤上。
全文摘要
本發(fā)明公開了一種支持并發(fā)的文件事務方法,該方法的實現(xiàn)步驟如下文件加載,從文件路徑上獲取文件并將文件反序列化為對象,將對象保存在內(nèi)存中;文件操作、保存,對文件的操作都是基于對對象的操作,文件對象是支持并發(fā)操作的,文件保存是將內(nèi)存中的對象重新寫入文件中。本發(fā)明的有益效果是解決了應用使用數(shù)據(jù)庫帶來的難以跨平臺、安裝復雜、高昂的購買費用等問題,解決多線程讀寫操作的安全,解決了文件操作中的多人并發(fā)操作時的文件沖突問題,使文件操作易于標準化,易于規(guī)范化,可以更好的并行操作;提高了文件的安全性,可以有效防止有人惡意篡改數(shù)據(jù)。
文檔編號G06F17/30GK102214247SQ20111020500
公開日2011年10月12日 申請日期2011年7月21日 優(yōu)先權(quán)日2011年7月21日
發(fā)明者任國珍, 何偉, 肖宗水, 鄭永清 申請人:山東地緯計算機軟件有限公司