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