論分布式數(shù)據(jù)庫的設(shè)計(jì)與實(shí)現(xiàn)
-MIS系統(tǒng)
[摘要]
分布式數(shù)據(jù)庫系統(tǒng)把應(yīng)用所需的數(shù)據(jù)存放在多個(gè)數(shù)據(jù)庫服務(wù)器上,完成某個(gè)數(shù)據(jù)操作要涉及到訪問多個(gè)服務(wù)器,這適用于某種特定需要的應(yīng)用。我在主持設(shè)計(jì)開發(fā)的一個(gè)MIS系統(tǒng)中,為了達(dá)到了在低速網(wǎng)絡(luò)通道下有效提高應(yīng)用程序性能的目的,使用了 Sybase的分布式數(shù)據(jù)庫技術(shù)。我設(shè)計(jì)的這個(gè)系統(tǒng)是采用典型的C/S結(jié)構(gòu),但許多客戶端連接服務(wù)器的網(wǎng)絡(luò)采用電話線撥號(hào),速度有限,傳統(tǒng)Windows界面的客戶端應(yīng)用程序相應(yīng)速度比較慢。考慮到B/S
結(jié)構(gòu)也避免不了大量數(shù)據(jù)從服務(wù)器端傳輸?shù)娇蛻舳?,我認(rèn)為WEB界面并不能有效解決這個(gè)問題,所以采用了優(yōu)化數(shù)據(jù)庫結(jié)構(gòu)的方法,把數(shù)據(jù)分兩部分存放,基礎(chǔ)數(shù)據(jù)放客戶機(jī),會(huì)員資料主要采用鍵碼放服務(wù)器,應(yīng)用程序再現(xiàn)數(shù)據(jù)時(shí)從服務(wù)器取鍵碼,到客戶機(jī)取対應(yīng)的解釋,由于鍵碼的數(shù)據(jù)重少,網(wǎng)絡(luò)傳輸便快。在構(gòu)建這個(gè)分布式數(shù)據(jù)庫系統(tǒng)的過程中,我著重研究并解決了數(shù)據(jù)同歩和事務(wù)協(xié)調(diào)的問題,取得了良好的應(yīng)用效果。我認(rèn)為,分布式數(shù)據(jù)庫系統(tǒng)的技術(shù)在Intenet時(shí)代正當(dāng)其道,大有發(fā)展前景。
[正文]
分布式數(shù)據(jù)庫系統(tǒng)把數(shù)據(jù)存放在多個(gè)數(shù)據(jù)庫服務(wù)器上,當(dāng)應(yīng)用提取所需數(shù)據(jù)時(shí),要訪問多個(gè)服務(wù)器,綜合多點(diǎn)數(shù)據(jù)才能完成。分布式數(shù)據(jù)庫技術(shù)在很多場合得到了應(yīng)用。譬如某企業(yè)隨著業(yè)務(wù)量的擴(kuò)大,原有數(shù)據(jù)庫服務(wù)器已經(jīng)達(dá)到了容量和性能極限,如果不希望丟棄原有投資,可以建立另外一套新的數(shù)據(jù)庫,跟原有的系統(tǒng)組成一個(gè)分布式數(shù)據(jù)庫系統(tǒng),給應(yīng)用提供透明統(tǒng)一的數(shù)據(jù)訪問.還有,如果某企業(yè)分成多個(gè)業(yè)務(wù)部門,而且地域分散,可以在某個(gè)部門放置單獨(dú)的數(shù)據(jù)庫服務(wù)器,用于存放該部門最常用的數(shù)據(jù),而部門和部門之間相互引用的數(shù)據(jù)可以通過分布式數(shù)據(jù)庫技術(shù)來方便地完成。分布式數(shù)據(jù)庫不是簡單地把集中數(shù)據(jù)庫分散實(shí)現(xiàn),而是針対某種特定應(yīng)用需要而誕生,它必然具有自己特有的性質(zhì)和特征,需要在上面做許多的工作,來滿足應(yīng)用的要求。
我在設(shè)計(jì)、開發(fā)一個(gè)MIS系統(tǒng)時(shí),針対應(yīng)用的需要而引入分布式數(shù)據(jù)庫技術(shù),取得了良好的效果。該系統(tǒng)針対會(huì)員資料的管理而設(shè)計(jì),用于管理會(huì)員入會(huì)、繳納會(huì)費(fèi)、申請(qǐng)資助、辦理資助審批、關(guān)系轉(zhuǎn)移、退會(huì)和注銷手續(xù)等等業(yè)務(wù)流程。分三個(gè)級(jí)別的應(yīng)用權(quán)限一一基層單位級(jí)、總公司級(jí)和集團(tuán)公司級(jí),各個(gè)級(jí)別只能操作各自范圍內(nèi)的業(yè)務(wù)數(shù)據(jù)。該系統(tǒng)采用典型的C/S結(jié)構(gòu),后臺(tái)數(shù)據(jù)庫采用Sybase,前端應(yīng)用采用FB開發(fā)工具來設(shè)計(jì)標(biāo)準(zhǔn)的Windows操作界面。
我在其中任系統(tǒng)分析和數(shù)據(jù)庫設(shè)計(jì)的角色,擔(dān)任了調(diào)查業(yè)務(wù)需求、業(yè)務(wù)建模和數(shù)據(jù)庫建模、數(shù)據(jù)庫設(shè)計(jì)以及指導(dǎo)應(yīng)用程序測(cè)試、優(yōu)化系統(tǒng)和應(yīng)用的性能等等一系列工作。由于客戶端地域的分散,遍及多個(gè)省境內(nèi),許多使用該系統(tǒng)的基層單位連接服務(wù)器數(shù)據(jù)庫的網(wǎng)絡(luò)采用電話線撥號(hào)方式,速度有限,在使用客戶端應(yīng)用程序時(shí)感覺界面速度很慢。經(jīng)過分析,認(rèn)識(shí)到許多操作都要從服務(wù)器中取數(shù)據(jù),速度慢就慢在數(shù)據(jù)訪問上。服務(wù)器是沒有性能瓶頸的,問題出在網(wǎng)絡(luò)速度上。不可能要求眾多使用客戶改善和升級(jí)他們的網(wǎng)絡(luò),只能充分挖掘軟件的潛力,來適應(yīng)這種低速網(wǎng)絡(luò)的使用模式。
經(jīng)探討,結(jié)合關(guān)系數(shù)據(jù)庫的知識(shí),認(rèn)識(shí)到,應(yīng)用程序的每一次數(shù)據(jù)庫操作,都要訪問多個(gè)相關(guān)聯(lián)的表,其中,有會(huì)員資料表和基礎(chǔ)數(shù)據(jù)表,會(huì)員資料表中存放許多的鍵碼信,在基礎(chǔ)數(shù)據(jù)表中有鍵碼相應(yīng)的解釋。鍵碼信的數(shù)據(jù)量比較少,而基礎(chǔ)數(shù)據(jù)是靜態(tài)的,幾乎不會(huì)更改。如果考慮把會(huì)員資料放在服務(wù)器上,基礎(chǔ)數(shù)據(jù)放在客戶端,當(dāng)應(yīng)用程序中訪問數(shù)據(jù)時(shí),總是從服務(wù)器上存取會(huì)員資料,從客戶端提取會(huì)員資料中鍵碼的相應(yīng)解釋。由于鍵碼的數(shù)據(jù)
量少,便減少了網(wǎng)絡(luò)上傳送的數(shù)據(jù)量,從而提高了界面的響應(yīng)速度。
同時(shí)考慮到基層單位總是操作自己所屬的部分會(huì)員,増刪轉(zhuǎn)移操作少,會(huì)員列表比較固定,而每一項(xiàng)業(yè)務(wù)操作都涉及到要從會(huì)員列表中查找定位到某個(gè)會(huì)員,所以會(huì)員列表是最常訪問的數(shù)據(jù)項(xiàng)。把會(huì)員列表從會(huì)員資料數(shù)據(jù)中抽取出來,也放置在客戶端,這樣,便進(jìn)一歩改善了性能。
把數(shù)據(jù)分散存放只是工作的第一歩,接下來要考慮應(yīng)用程序怎樣訪問這種分布式數(shù)據(jù)。開發(fā)應(yīng)用時(shí),如果每一功能都針対兩個(gè)數(shù)據(jù)庫進(jìn)行,就帶來了很多麻煩。所以,我們研究了Sybase的分布式數(shù)據(jù)庫技術(shù),決定采用了 CIS (組件集成服務(wù))部件,來合并兩個(gè)數(shù)據(jù)庫成一個(gè)統(tǒng)一的分布式數(shù)據(jù)庫。應(yīng)用程序只要連接一個(gè)數(shù)據(jù)庫,就可以透明統(tǒng)一訪問到兩個(gè)數(shù)據(jù)庫中的數(shù)據(jù)。
該技術(shù)具體實(shí)施方法是,在客戶端數(shù)據(jù)庫中建立一個(gè)対服務(wù)器數(shù)據(jù)庫的遠(yuǎn)程訪問服務(wù)名,包含訪問地址、登錄用戶名、登錄密碼等等關(guān)鍵的連接信息;并且対服務(wù)器中會(huì)員資料數(shù)據(jù)表建立一個(gè)本地代理表,結(jié)構(gòu)和服務(wù)器中遠(yuǎn)程表完全一樣,它是訪問服務(wù)器中會(huì)員資料的中轉(zhuǎn)和代理。客戶端應(yīng)用程序訪問本地代理會(huì)員資料表時(shí),實(shí)際上是通過預(yù)定義的遠(yuǎn)程訪問服務(wù)名中包含的連接信息到服務(wù)器中対應(yīng)的實(shí)際會(huì)員資料表中訪問數(shù)據(jù)。這種訪問対于客戶端完全透明,感覺不到是從物理上獨(dú)立的兩個(gè)服務(wù)器中存取數(shù)據(jù)。所以,這種數(shù)據(jù)庫結(jié)構(gòu)是典型的分布式數(shù)據(jù)庫。部署這種分布式數(shù)據(jù)庫不是難事,只要在客戶端和服務(wù)器上安裝12.0版以上的數(shù)據(jù)庫服務(wù)器,在客戶端服務(wù)器上建立遠(yuǎn)程服務(wù)名和代理表即可。由于Sybase數(shù)據(jù)庫的安裝支持腳本方式,在客戶端應(yīng)用程序的標(biāo)準(zhǔn)安裝過程中,嵌入Sybase數(shù)據(jù)庫的安裝和配置腳本,就自動(dòng)化地完成了所有工作。
在實(shí)際使用該分布式數(shù)據(jù)庫系統(tǒng)的過程中,遇到了幾個(gè)問題。第一,數(shù)據(jù)同歩??蛻舳嘶A(chǔ)數(shù)據(jù)不是絕対靜態(tài)的,也有變化,因此在服務(wù)器端要設(shè)置一個(gè)統(tǒng)一的基準(zhǔn),稱為主點(diǎn)數(shù)據(jù)??蛻舳丝偸菑?fù)制使用,稱為復(fù)制點(diǎn)數(shù)據(jù)。如何及時(shí)感知到服務(wù)器端主點(diǎn)數(shù)據(jù)的變化,有效率地復(fù)制到客戶端,是個(gè)難題。Sybase針対這種應(yīng)用場合,提供了復(fù)制服務(wù)器技術(shù),但為了避免過于復(fù)雜,我們實(shí)際采用應(yīng)用程序來管理同歩。當(dāng)服務(wù)器端主點(diǎn)數(shù)據(jù)有了更改時(shí),保
存一個(gè)相應(yīng)的標(biāo)識(shí)和時(shí)間戳,客戶端應(yīng)用在登錄服務(wù)器時(shí),檢查這種標(biāo)識(shí),一檢測(cè)到了數(shù)據(jù)有更新,就首先下載,然后再進(jìn)入系統(tǒng)正常使用。這種方法實(shí)現(xiàn)起來,増加了額外的開發(fā)量,
且不能判別繞過應(yīng)用程序?qū)潝?shù)據(jù)的直接修改,但是,是最簡單和有效的方法。第二個(gè)問題是事務(wù)協(xié)調(diào)問題。物理上獨(dú)立的兩個(gè)數(shù)據(jù)庫,在協(xié)同操作時(shí),如果服務(wù)器正好停機(jī)或者網(wǎng)絡(luò)故障,完整的一個(gè)事務(wù)沒能完成,就會(huì)“事務(wù)崩潰雖然Sybase CIS內(nèi)嵌了兩階段提交技術(shù),能夠自動(dòng)恢復(fù)。但是應(yīng)用程序在這種情況下,敏感性不夠,操作界面會(huì)無端凝固,影響了使用的方便性。我們針対PB対于連接的判斷和感知,用了一個(gè)小小編程技巧,使應(yīng)用程序能夠及時(shí)感知到數(shù)據(jù)庫連接故障,及時(shí)停止和恢復(fù)事務(wù),使操作界面表現(xiàn)友好靈活。
以上遇到的這些問題,都找到了解決辦法。分布式數(shù)據(jù)庫技術(shù)的應(yīng)用并不是非常復(fù)雜,它往往為解決特定問題、滿足特定需要而被采納,使用得當(dāng),會(huì)給應(yīng)用帶來了許多便捷。在當(dāng)今信息社會(huì)里,互聯(lián)網(wǎng)絡(luò)帶來了相互連通的便捷,而且知識(shí)爆炸,數(shù)據(jù)的分布式訪間是個(gè)必然趨勢(shì)。潮流興起的XML技術(shù),提供了各種平臺(tái)數(shù)據(jù)庫之間的一個(gè)公共數(shù)據(jù)訪問標(biāo)準(zhǔn),可能會(huì)用來構(gòu)建更加靈活、適應(yīng)性更強(qiáng)的分布式數(shù)據(jù)庫技術(shù)。
本文摘自 :https://blog.51cto.com/u