Java 企業(yè)級項(xiàng)目中應(yīng)用Subversion的配置與理
--JavaSVN + Subversion跟蹤數(shù)據(jù)變化歷史
譯者:陳海青(http://www.chq.name)
企業(yè)重要的資產(chǎn)應(yīng)該是數(shù)據(jù)信息,但現(xiàn)在的企業(yè)應(yīng)用除了需要存儲數(shù)據(jù)外,還經(jīng)常要求跟蹤數(shù)據(jù)變化整個過程,并會擴(kuò)展到一系列相關(guān)的要求,如數(shù)據(jù)變化的原因、變化的時間等,而且在許多情況下是對以文檔形式存儲的數(shù)據(jù)進(jìn)行跟蹤。使用SubVersion可以滿足這些貌似普通但實(shí)際上很復(fù)雜的要求
版權(quán)聲明:任何獲得Matrix授權(quán)的網(wǎng)站,轉(zhuǎn)載時請務(wù)必保留以下作者信息和鏈接
作者:陳海青(http://www.chq.name);michaelzyy
原文:http://www.matrix.org.cn/resource/article/2007-02-05/Subversion_ba84f1b9-b4b0-11db-b1a9-1f2330fc56f8.html
關(guān)鍵字:Java;Subversion
來自數(shù)據(jù)的挑戰(zhàn)
企業(yè)應(yīng)用存儲了關(guān)鍵數(shù)據(jù),而且應(yīng)用程序并不于對數(shù)據(jù)進(jìn)行插入、讀取、更新和刪除操作(即CRUD),應(yīng)用程序還期望能夠存儲數(shù)據(jù)更改的歷史記錄。此外,企業(yè)按照一系列的業(yè)務(wù)或者規(guī)定的要求,不但要求存儲數(shù)據(jù)資產(chǎn)更改結(jié)果的歷史,而且要求存儲是誰,在什么時候,因?yàn)槭裁丛,如何改變了?shù)據(jù)等等諸如此類的跟蹤信息。
應(yīng)用數(shù)據(jù)的形式和尺寸也有很多變數(shù),既有簡單數(shù)據(jù),如字符串和數(shù)字型,也有復(fù)雜的類型,如使用Blob或Cblob類型來存儲文檔。典型的應(yīng)用程序要處理大量的上傳給程序處理的以文檔形式存儲的數(shù)據(jù),如果用傳統(tǒng)的歷史表等方式來跟蹤諸如復(fù)雜類型的文檔的變化,簡直是做一場惡夢。
使用歷史表進(jìn)行跟蹤
關(guān)系數(shù)據(jù)庫是存儲數(shù)據(jù)的,可以高效地組織、存儲、檢索數(shù)據(jù)信息,由于應(yīng)用程序?qū)?shù)據(jù)存放在關(guān)系數(shù)據(jù)庫中,當(dāng)然順理成章的嘗試用它來存放歷史跟蹤數(shù)據(jù),一般是使用帶有時間戳的數(shù)據(jù)表來存放所有的重要數(shù)據(jù)表。在更新主表的時候會把舊數(shù)據(jù)推入歷史表中,這個過程一般是通過觸發(fā)器或由應(yīng)用程序自己來完成。
使用歷史表存儲歷史信息,會存在以下問題:
+關(guān)系型數(shù)據(jù)庫和關(guān)系模型會提高數(shù)據(jù)存儲和檢索的效率,但是歷史表顯然不適合使用關(guān)系型數(shù)據(jù)庫。
+數(shù)據(jù)庫不支持版本控制。應(yīng)用程序不得不使用觸發(fā)器或其它定制的技術(shù)來仔細(xì)的存放數(shù)據(jù)(,以便實(shí)現(xiàn)版本控制功能)。
+必須由應(yīng)用程序親自檢測版本之間的變化,從歷史表中檢索歷史數(shù)據(jù)進(jìn)行互相比較。
關(guān)系數(shù)據(jù)庫依舊是存儲和檢索業(yè)務(wù)數(shù)據(jù)的倉庫,它們擅長于管理數(shù)據(jù)。以上列舉的缺點(diǎn)于用關(guān)系數(shù)據(jù)模型存儲多個不同的版本的數(shù)據(jù)并進(jìn)行歷史數(shù)據(jù)跟蹤的情況下。
Subversion 和 JavaSVN
Subversion是一個可以代替CVS(一個傳統(tǒng)的版本控制系統(tǒng))的版本控制系統(tǒng)。Subversion使用稱作倉庫的樹狀結(jié)構(gòu)來存儲文件和目錄。Subversion會跟蹤對倉庫中信息的所有改變,它具有一個中央倉庫,允許進(jìn)行并發(fā)更新,允許通過http或https使用WebDAV協(xié)議來訪問倉庫,可以避免使用過程中的防火墻的干擾。Subversion的理念是“拷貝-編輯-合并”,這意味著在修改時不需要鎖定被修改的對象。
(譯者注:關(guān)于WebDAV,是Web-based Distributed Authoring and Versioning的縮寫,是一個標(biāo)準(zhǔn)HTTP協(xié)議的擴(kuò)展,通過web技術(shù)把目錄和文件作為可讀些的對象進(jìn)行共享讀寫,把web變成一個可讀寫的媒體。RFCs2518和3253描述了WebDAV/DeltaV 對于HTTP的擴(kuò)展,網(wǎng)址http://www.webdav.org/。)
JavaSVN是一個純Java的Subversion客戶端類庫,提供與Subversion交互的基于Java程序的應(yīng)用程序接口(API), JavaSVN既提供了進(jìn)行直接讀取Subversion倉庫的底層接口,也提供了從Subversion倉庫檢出工作拷貝的高層接口。
現(xiàn)在,應(yīng)用程序可以使用結(jié)合了關(guān)系型數(shù)據(jù)庫和Subversion的方式來滿足數(shù)據(jù)存儲和變化跟蹤的需求了,對數(shù)據(jù)庫的更新同時會將變化情況提交到Subversion中,Subversion將是記錄變化的主要數(shù)據(jù)源,關(guān)系數(shù)據(jù)庫則用于除此以外所有的其他存儲。這樣做還有一個優(yōu)勢,由于Subversion使用“拷貝-編輯-合并”模式,這樣每次從關(guān)系數(shù)據(jù)庫中檢索數(shù)據(jù)時不再要求鎖定目標(biāo)表了。