論分布式數(shù)據(jù)庫(kù)的集成
[摘要]
本文討論了某公司發(fā)貨系統(tǒng)的分布式數(shù)據(jù)庫(kù)集成解決方案。該公司由于業(yè)務(wù)的發(fā)展,要在另三個(gè)城市設(shè)立貨倉(cāng)進(jìn)行發(fā)貨。為此,需要増加原先的MIS系統(tǒng)實(shí)現(xiàn)這一功能。公司委任我作為項(xiàng)目經(jīng)理完成系統(tǒng)的設(shè)計(jì)和開(kāi)發(fā)的工作。我經(jīng)過(guò)分析,使用了 Sybase的分布式數(shù)據(jù)庫(kù)技術(shù)。我設(shè)計(jì)的這個(gè)系統(tǒng)是采用典型的C/S結(jié)構(gòu),但客戶(hù)端連接服務(wù)器的網(wǎng)絡(luò)采用電話(huà)線(xiàn)撥號(hào),速度有限,傳統(tǒng)Windows界面的客戶(hù)端應(yīng)用程序相應(yīng)速度比較慢。于是我采用了優(yōu)化數(shù)
據(jù)庫(kù)結(jié)構(gòu)的方法,把數(shù)據(jù)分兩部份存放,基礎(chǔ)數(shù)據(jù)放客戶(hù)機(jī),銷(xiāo)售資料主要采用鍵碼放服務(wù)器,應(yīng)用程序再現(xiàn)數(shù)據(jù)時(shí)從服務(wù)器取鍵碼,到客戶(hù)機(jī)取対應(yīng)的解釋。由于鍵碼的數(shù)據(jù)量少,網(wǎng)絡(luò)傳輸便快。在構(gòu)建這個(gè)公布式數(shù)據(jù)庫(kù)系統(tǒng)的過(guò)程中,我著重研究并解決了數(shù)據(jù)同歩和事務(wù)協(xié)調(diào)的問(wèn)題,到得了良好的應(yīng)用效果。
[正文]
2004年3月,由于公司業(yè)務(wù)的發(fā)展,要求在其它三個(gè)城市設(shè)立貨倉(cāng),處理發(fā)貨業(yè)務(wù)。公司本部運(yùn)行用Sybase數(shù)據(jù)庫(kù)的MIS系統(tǒng)可以實(shí)現(xiàn)發(fā)貨,該系統(tǒng)用的是C/S結(jié)構(gòu)。由于客戶(hù)端連接服務(wù)器的網(wǎng)絡(luò)采用電話(huà)撥導(dǎo),所以直接把客戶(hù)端軟件直接安裝在外地訪(fǎng)問(wèn)本部數(shù)據(jù)庫(kù),速度很慢。于是,公司成立了一個(gè)項(xiàng)目,專(zhuān)門(mén)解決這個(gè)問(wèn)題。在這個(gè)項(xiàng)目中,我擔(dān)任項(xiàng)目經(jīng)理。經(jīng)過(guò)対現(xiàn)有系統(tǒng)的分析,我們決定利用Sybase提供的技術(shù),采用分布式數(shù)據(jù)庫(kù)集成的方
法來(lái)改造目前的系統(tǒng)使之能適應(yīng)新的需要。項(xiàng)目分三個(gè)階段進(jìn)行,一是進(jìn)行需求分析,確定要増加的功能。二是進(jìn)行系統(tǒng)設(shè)計(jì),改變后數(shù)據(jù)分布如何,系統(tǒng)架構(gòu)如何。最后是實(shí)現(xiàn)和測(cè)試,上線(xiàn)。整個(gè)項(xiàng)目歷時(shí)從分析到實(shí)現(xiàn)歷時(shí)三個(gè)月,最后于2004年6月份系統(tǒng)成功上線(xiàn)。
在分析階段時(shí)我發(fā)現(xiàn)由于客戶(hù)端地域的分散,遍及三個(gè)省境內(nèi),連接服務(wù)器數(shù)據(jù)庫(kù)的網(wǎng)絡(luò)采用電話(huà)撥導(dǎo)方式,速度有限,在使用客戶(hù)端應(yīng)用程序時(shí)感覺(jué)界面速度很慢。我經(jīng)過(guò)分析,認(rèn)識(shí)到許多操作都要從服務(wù)器中取數(shù)據(jù),速度慢就慢在數(shù)據(jù)訪(fǎng)問(wèn)上。服務(wù)器是沒(méi)有瓶頸的,問(wèn)題出在網(wǎng)絡(luò)速度上。出于成本和業(yè)務(wù)重方面的考慮,公司不會(huì)用專(zhuān)線(xiàn)連接,只能是電話(huà)撥號(hào)。這時(shí)只能改變目前軟件的實(shí)現(xiàn)方法,來(lái)適應(yīng)這種低速網(wǎng)絡(luò)的使用模式。
經(jīng)和項(xiàng)目組的人員一起探討,結(jié)合關(guān)系數(shù)據(jù)庫(kù)的知識(shí),我認(rèn)識(shí)到,應(yīng)用程序的每一次數(shù)據(jù)庫(kù)操作,都要訪(fǎng)問(wèn)多個(gè)相聯(lián)的表,其中,有銷(xiāo)售訂單表和物料基礎(chǔ)數(shù)據(jù)表唇戶(hù)資料表/貨倉(cāng)的基礎(chǔ)數(shù)據(jù)等。銷(xiāo)售訂單表中存放著出銷(xiāo)售的訂單編號(hào),成品編號(hào)等,數(shù)據(jù)量少。而基礎(chǔ)數(shù)據(jù)表就則放著成品的相關(guān)信息,有大量的數(shù)據(jù)。如果考慮把銷(xiāo)售訂單放在服務(wù)器,基礎(chǔ)數(shù)據(jù)放在客戶(hù)端,當(dāng)應(yīng)用程序中訪(fǎng)問(wèn)數(shù)據(jù)時(shí),總是從服務(wù)器上存取銷(xiāo)售訂單,從客戶(hù)端提取成
品/訂單的詳細(xì)信息。由于訂單的數(shù)據(jù)量少,便減少了網(wǎng)絡(luò)上傳送的數(shù)據(jù)量,從而提高了界面的響應(yīng)速度。
把數(shù)據(jù)分散存放只是工作的第一歩,接下來(lái)要考慮應(yīng)用程序怎樣訪(fǎng)問(wèn)這種分布式數(shù)據(jù)。開(kāi)發(fā)應(yīng)用時(shí),如果每一功能都針対兩個(gè)數(shù)據(jù)庫(kù)進(jìn)行,就帶來(lái)了很多麻煩。所以,我通過(guò)研究Sybase的分布式數(shù)據(jù)庫(kù)技術(shù),決定采用CIS (組件集成服務(wù))部件,來(lái)合并兩個(gè)數(shù)據(jù)庫(kù)成一個(gè)統(tǒng)一的分布式數(shù)據(jù)庫(kù)。應(yīng)用程序只要連接一個(gè)數(shù)據(jù)庫(kù),就可以透明統(tǒng)一訪(fǎng)問(wèn)到兩個(gè)數(shù)據(jù)庫(kù)中的數(shù)據(jù)。
該技術(shù)具體實(shí)施方法是:在客戶(hù)端數(shù)據(jù)庫(kù)中建立一個(gè)対服務(wù)器數(shù)據(jù)庫(kù)的遠(yuǎn)程訪(fǎng)問(wèn)服務(wù)名,包含訪(fǎng)問(wèn)地址,登錄用戶(hù)名,登錄密碼等關(guān)鍵的連接信息;前且対服務(wù)器中銷(xiāo)售訂單建立一個(gè)本地代理表。結(jié)構(gòu)和服務(wù)器中遠(yuǎn)程表完全一樣,它是訪(fǎng)問(wèn)服務(wù)器中會(huì)員資料的中轉(zhuǎn)和代理。客戶(hù)端應(yīng)用程序訪(fǎng)問(wèn)本地代理銷(xiāo)售資料表時(shí),實(shí)際上是通過(guò)預(yù)先定義的遠(yuǎn)程訪(fǎng)問(wèn)服務(wù)名中包含的連接信息到服務(wù)器中対應(yīng)的實(shí)際銷(xiāo)售資料表中訪(fǎng)問(wèn)數(shù)據(jù)。這種訪(fǎng)問(wèn)対于客戶(hù)端完全透明,感覺(jué)不到是從物理上獨(dú)立的兩個(gè)服務(wù)器中存服數(shù)據(jù)。所以,這種數(shù)據(jù)庫(kù)結(jié)構(gòu)是典型的分布式數(shù)據(jù)庫(kù)。部署這種分布式數(shù)據(jù)庫(kù)不是難事,只要在客戶(hù)端和服務(wù)器上安裝12.0版本以上的數(shù)據(jù)庫(kù)服務(wù)器,在客戶(hù)端服務(wù)器上建立遠(yuǎn)程服務(wù)名和代理表即可。由于Sybase數(shù)據(jù)庫(kù)的安裝支持腳本方式,在客戶(hù)端應(yīng)用程序的標(biāo)準(zhǔn)安裝過(guò)程中,嵌入Sybase數(shù)據(jù)庫(kù)的安裝和配置腳本,就自動(dòng)化地完成了所有工作。
在實(shí)際使用該分布式數(shù)據(jù)庫(kù)系統(tǒng)的過(guò)程中,遇到了幾個(gè)問(wèn)題,第一,數(shù)據(jù)同歩??蛻?hù)端基礎(chǔ)數(shù)據(jù)不是絕対靜態(tài)的,也有變化,因此在服務(wù)器要設(shè)貫一個(gè)統(tǒng)一的基準(zhǔn),稱(chēng)為主點(diǎn)數(shù)據(jù)??蛻?hù)端總是要復(fù)制使用,稱(chēng)為復(fù)制點(diǎn)數(shù)據(jù)。如何及時(shí)感知到服務(wù)器端主點(diǎn)數(shù)據(jù)的變化,有效率地復(fù)制到客戶(hù)端,是個(gè)難題。Sybase針対這種應(yīng)用場(chǎng)合,提供了復(fù)制服務(wù)器技術(shù),但為了避免過(guò)于復(fù)雜,我們采用實(shí)際應(yīng)用程序來(lái)管理同歩。當(dāng)服務(wù)器端主點(diǎn)數(shù)據(jù)有了更改時(shí),保存一個(gè)相應(yīng)的標(biāo)識(shí)和時(shí)間戳,客戶(hù)端應(yīng)用在登錄服務(wù)器時(shí),檢資這些標(biāo)識(shí),一檢測(cè)到了數(shù)據(jù)有更新,就首先下載,然后再進(jìn)入系統(tǒng)正常使用。這種方法實(shí)現(xiàn)起來(lái),増加了額外的開(kāi)發(fā)量,且不能判別繞過(guò)應(yīng)用程序?qū)潝?shù)據(jù)的直接修改,但是,是最簡(jiǎn)單和有效的方法。
第二個(gè)問(wèn)題是事務(wù)協(xié)調(diào)問(wèn)題。物理上獨(dú)立的兩個(gè)數(shù)據(jù)庫(kù),在協(xié)同操作時(shí),如果服務(wù)器正好停機(jī)或者網(wǎng)絡(luò)故障,完整的一個(gè)事務(wù)沒(méi)能完成,就會(huì)事務(wù)崩潰,雖然Sybase CIS內(nèi)嵌了兩階段提交技術(shù),能夠自動(dòng)恢復(fù)。但是應(yīng)用程序在這種情況下,敏感性不夠,操作界面會(huì)無(wú)端凝固,影響了使用的方便性。我針対PB対勁于連接的判斷和感知,用了一個(gè)小小編程技巧,使應(yīng)用程序能夠及時(shí)感知到數(shù)據(jù)庫(kù)連接故障,及時(shí)停止和恢復(fù)事務(wù),使操作界面表現(xiàn)友好靈活。
在具體的應(yīng)用中,我們?cè)谌齻€(gè)城市安裝了増強(qiáng)的客戶(hù)端應(yīng)用程序,同時(shí)安裝了 Sybase數(shù)據(jù)庫(kù)。初始化時(shí),把基礎(chǔ)數(shù)據(jù)放從公司本部的數(shù)據(jù)庫(kù)導(dǎo)入客戶(hù)端的數(shù)據(jù)庫(kù)中。用戶(hù)在外地進(jìn)行發(fā)貨時(shí),先撥號(hào)上網(wǎng),然后啟動(dòng)客戶(hù)端程序。在登錄過(guò)程中,客戶(hù)端程序會(huì)檢查服務(wù)器上的標(biāo)識(shí)和時(shí)間戳檢查這些主數(shù)據(jù)是否有更新,如果有就先下載,下載完成后再進(jìn)入系統(tǒng)正常使用。在服務(wù)器更新的數(shù)據(jù)比較多的情況下,下載的時(shí)間會(huì)比較長(zhǎng),這時(shí)如果遇到急需發(fā)貨,則會(huì)影響到貨物不能及時(shí)發(fā)出去。為了解決這個(gè)問(wèn)題,我設(shè)置了在每天凌晨的某個(gè)時(shí)刻自動(dòng)登錄和啟動(dòng)客戶(hù)端程序,在下載更新數(shù)據(jù)完成后自動(dòng)關(guān)閉。這樣可以把一部份數(shù)據(jù)更新的內(nèi)容放在非工作時(shí)間里完成,減少了發(fā)貨登錄的時(shí)間。用戶(hù)登錄后開(kāi)始進(jìn)行發(fā)貨操作。輸入銷(xiāo)售訂單,通過(guò)本地代理表系統(tǒng)自動(dòng)到服務(wù)器獲取該銷(xiāo)售訂單的數(shù)據(jù),如發(fā)貨的數(shù)量,客戶(hù)編號(hào)等。而一些基礎(chǔ)數(shù)據(jù)則可以直接從本地的數(shù)據(jù)庫(kù)中得到,如銷(xiāo)售產(chǎn)品的描述,客戶(hù)的地址/電話(huà)/傳真,發(fā)貨的庫(kù)位等。完成出貨動(dòng)作后,會(huì)自動(dòng)更新服務(wù)器的庫(kù)存。而這一更新通過(guò)提交事務(wù)在后臺(tái)進(jìn)行,不影響前臺(tái)的操作。所以,対用戶(hù)來(lái)講,能夠進(jìn)行正常的操作,不會(huì)因?yàn)樗俣嚷M(jìn)行不下去。
在當(dāng)今的信息社會(huì)里,互聯(lián)網(wǎng)帶來(lái)了相互連通的方便,而且知識(shí)爆炸,數(shù)據(jù)的分布式訪(fǎng)問(wèn)是個(gè)必然的趨勢(shì)。目前新起的XML技術(shù),提供了各種平臺(tái)數(shù)據(jù)庫(kù)之間的一個(gè)公共數(shù)據(jù)訪(fǎng)問(wèn)標(biāo)準(zhǔn),可以用來(lái)構(gòu)建更加靈活,適應(yīng)性更強(qiáng)的分布數(shù)據(jù)庫(kù)技術(shù)。將XML用在分布式數(shù)據(jù)庫(kù)中,將是未來(lái)的一個(gè)趨勢(shì)。
本文摘自 :https://blog.51cto.com/u