論分布式數(shù)據(jù)庫(kù)的設(shè)計(jì)與實(shí)現(xiàn)
[摘要]
本文通過(guò)XXX高速公路收費(fèi)系統(tǒng)(以下簡(jiǎn)稱收費(fèi)系統(tǒng)),來(lái)論述分布式數(shù)據(jù)庫(kù)的設(shè)計(jì)與實(shí)現(xiàn)。收費(fèi)系統(tǒng)是我公司近年來(lái)接的較為大型的項(xiàng)目,管理結(jié)構(gòu)為三層結(jié)構(gòu):公司級(jí)、收費(fèi)中心級(jí)、收費(fèi)站級(jí),各級(jí)之間即可獨(dú)立的完成自身業(yè)務(wù),又有自上而下的管理關(guān)系。收費(fèi)中心、收費(fèi)站均為三層C/S結(jié)構(gòu),公司級(jí)采取B/S結(jié)構(gòu)。該系統(tǒng)的數(shù)據(jù)庫(kù)也按照三層來(lái)設(shè)計(jì),收費(fèi)站存放本站的所有流水?dāng)?shù)據(jù),收費(fèi)中心存放所有數(shù)據(jù),公司本部存放查詢用匯總數(shù)據(jù),收費(fèi)站與收費(fèi)中心使用事務(wù)復(fù)制來(lái)同歩數(shù)據(jù),而收費(fèi)中心與公司本部使用快照復(fù)制來(lái)同歩數(shù)據(jù),并且使用分級(jí)的方法來(lái)測(cè)試收費(fèi)站、收費(fèi)中心與公司本部之間的數(shù)據(jù)同歩。
在本項(xiàng)目的開發(fā)過(guò)程中,我擔(dān)任了數(shù)據(jù)庫(kù)的設(shè)計(jì)工作。
[正文]
2000年10月一2001年12月我公司開發(fā)了高速公路收費(fèi)系統(tǒng)(以下簡(jiǎn)稱收費(fèi)系統(tǒng)),收費(fèi)系統(tǒng)項(xiàng)目從管理層面分為三層結(jié)構(gòu):公司級(jí)、收費(fèi)中心級(jí)和收費(fèi)站級(jí)。公司本部:供領(lǐng)導(dǎo)、運(yùn)營(yíng)部、財(cái)務(wù)部等業(yè)務(wù)部門了解業(yè)務(wù)情況、檢查工作-B/S結(jié)構(gòu)各部門通過(guò)Web服務(wù)器查詢數(shù)據(jù)庫(kù)服務(wù)器,而公司數(shù)據(jù)庫(kù)服器定時(shí)要求中心數(shù)據(jù)庫(kù)服務(wù)器復(fù)制匯總數(shù)據(jù)。
收費(fèi)中心:收費(fèi)系統(tǒng)的管理中心下達(dá)管理制度,管理數(shù)據(jù)到收費(fèi)站,接收統(tǒng)計(jì)收費(fèi)站的收費(fèi)數(shù)據(jù),上報(bào)匯總數(shù)據(jù)到公司,負(fù)責(zé)日常的管理工作。
收費(fèi)站:具體進(jìn)行收費(fèi)的單位,收費(fèi)車道的數(shù)據(jù)通過(guò)通信系統(tǒng)實(shí)時(shí)上傳到收費(fèi)站數(shù)據(jù)庫(kù)保存、分類、匯總,并且實(shí)時(shí)傳送收費(fèi)中心下達(dá)的數(shù)據(jù)庫(kù)管理,并通過(guò)通信子系統(tǒng)下載到車道收費(fèi)機(jī)上具體實(shí)施。
系統(tǒng)采用三層C/S與B/S的混合結(jié)構(gòu),收費(fèi)中心與收費(fèi)站為三層C/S結(jié)構(gòu),而公司級(jí)為B/S結(jié)構(gòu)。我在項(xiàng)目中擔(dān)任了數(shù)據(jù)庫(kù)的設(shè)計(jì)工作,負(fù)責(zé)數(shù)據(jù)庫(kù)的設(shè)計(jì)、測(cè)試及實(shí)施。
1.數(shù)據(jù)庫(kù)設(shè)計(jì)
此收費(fèi)系統(tǒng)的結(jié)構(gòu)較為復(fù)雜,分為公司級(jí)、收費(fèi)中心、收費(fèi)站三級(jí)管理結(jié)構(gòu),班可獨(dú)立工作,又有管理的聯(lián)系。數(shù)據(jù)實(shí)時(shí)傳送到收費(fèi)站數(shù)據(jù)庫(kù)服務(wù)器,再實(shí)時(shí)傳送到收費(fèi)中心數(shù)據(jù)庫(kù)服務(wù)器。在數(shù)據(jù)庫(kù)設(shè)計(jì)方面我們按物理的分布也分為三層結(jié)構(gòu)。
在收費(fèi)站,根據(jù)系統(tǒng)的需求分析的結(jié)果,一輛車通過(guò)收費(fèi)站時(shí)產(chǎn)生的最基本的數(shù)據(jù)有:通過(guò)日期、時(shí)間、車型、收費(fèi)類型及收費(fèi)金額,因?yàn)槭召M(fèi)標(biāo)準(zhǔn)不輕易改變,考慮到我們采用的是專用的車道收費(fèi)機(jī),存儲(chǔ)量較小,所以收費(fèi)金額項(xiàng)在此處不計(jì)入數(shù)據(jù)庫(kù),上傳至收費(fèi)站數(shù)據(jù)庫(kù)服務(wù)器后,可以用車數(shù)乘以此類車型的收費(fèi)標(biāo)準(zhǔn)而得到。當(dāng)車道收費(fèi)機(jī)上傳數(shù)據(jù)到數(shù)據(jù)庫(kù)時(shí),還要加上工班、車道及收費(fèi)員信息,保證數(shù)據(jù)的唯一性,所以我們把日期、時(shí)間、工
班、車道、收費(fèi)員、收費(fèi)類型、車型設(shè)為組合主謎,為車輛流水?dāng)?shù)據(jù)。收費(fèi)員下班后還要上繳實(shí)收金額,因此還要保存實(shí)收金額,包括日期、工班、收費(fèi)員及實(shí)際收費(fèi)金額,為工班收費(fèi)數(shù)據(jù)。在此基礎(chǔ)上,分析、匯總數(shù)據(jù),得到以下幾類數(shù)據(jù):
業(yè)務(wù)類型數(shù)據(jù):車輛流水?dāng)?shù)據(jù)、工班收費(fèi)數(shù)據(jù)、車道開通情況、收費(fèi)員上班情況;擴(kuò)展的數(shù)據(jù):為了查詢、打印的方便、高效,流水表經(jīng)過(guò)分類匯總,產(chǎn)生了以車道分類統(tǒng)計(jì)的車流量表(日、月)、以收費(fèi)員來(lái)分類統(tǒng)計(jì)的收費(fèi)金額表(日、月)及不收費(fèi)車輛統(tǒng)計(jì)表;
管理類型數(shù)據(jù):收費(fèi)標(biāo)準(zhǔn)、收費(fèi)員信息、收費(fèi)站信息、車道信息、工班信息、收費(fèi)類型信息;
從全局應(yīng)用的角度出發(fā),各收費(fèi)站存放本站的數(shù)據(jù),收費(fèi)中心的數(shù)據(jù)庫(kù)則存放所有數(shù)據(jù),并対數(shù)據(jù)進(jìn)行完整性和一致性的檢查,這種做法雖然有一定的數(shù)據(jù)冗余,但在不同場(chǎng)地存儲(chǔ)同一數(shù)據(jù)的多個(gè)副本,能提高系統(tǒng)的可靠性、可用性,使系統(tǒng)易于擴(kuò)充,也提高了局部應(yīng)用的效率,減少了通訊代價(jià),同時(shí)也使得各處理機(jī)之間的相互干擾降到最低。公司總部存放所有收費(fèi)站的匯總數(shù)據(jù),通過(guò)瀏覽器進(jìn)行查詢。
2.數(shù)據(jù)的分布
(1)在收費(fèi)中心數(shù)據(jù)庫(kù)服務(wù)器與收費(fèi)站數(shù)據(jù)庫(kù)服務(wù)器的數(shù)據(jù)關(guān)系中,由于收費(fèi)站的數(shù)據(jù)是收費(fèi)中心數(shù)據(jù)的子集,我們采用了水平分片的方式,通過(guò)并運(yùn)算實(shí)現(xiàn)關(guān)系的重構(gòu)。
(2)在收費(fèi)中心數(shù)據(jù)庫(kù)服務(wù)器與公司總部數(shù)據(jù)庫(kù)服務(wù)器的數(shù)據(jù)關(guān)系中,數(shù)據(jù)是按照其應(yīng)用功能來(lái)劃分的,所以我們采用了垂直分片的方式。
數(shù)據(jù)分布在多個(gè)地點(diǎn),為了保證數(shù)據(jù)的一致性及完整性,我使用了事務(wù)復(fù)制和快照復(fù)制丙種數(shù)據(jù)同歩的方式,在收費(fèi)中心與收費(fèi)站之間使用事務(wù)復(fù)制,而在收費(fèi)中心和公司總部之同使用快照復(fù)制。
対于業(yè)務(wù)類型的數(shù)據(jù),收費(fèi)站在本地存放收費(fèi)車輛的實(shí)時(shí)數(shù)據(jù),而用戶也要求:收費(fèi)中心也要實(shí)時(shí)的收費(fèi)車輛數(shù)據(jù),延遲不超過(guò)2秒,所以我采用事務(wù)復(fù)制進(jìn)行業(yè)務(wù)數(shù)據(jù)的同歩,收費(fèi)站只需將更新的數(shù)據(jù)發(fā)送到收費(fèi)中心的數(shù)據(jù)庫(kù)即可。具體過(guò)程如下,把收費(fèi)站的數(shù)據(jù)庫(kù)作為出版者和分發(fā)者,收費(fèi)中心的數(shù)據(jù)庫(kù)作為訂閱者,対收費(fèi)站的數(shù)據(jù)建立快照代理,并在分發(fā)數(shù)據(jù)庫(kù)中記錄同歩狀態(tài)的信息。每一個(gè)使用事務(wù)復(fù)制的收費(fèi)站數(shù)據(jù)庫(kù)均有自己的日志讀取
代理,運(yùn)行在分發(fā)者上并連接出版者。分發(fā)代理的任務(wù)是將分發(fā)數(shù)據(jù)庫(kù)中保持的事務(wù)任務(wù)直接推動(dòng)到訂閱者。當(dāng)推訂閱被創(chuàng)建時(shí),每個(gè)為立即同歩而建立的事務(wù)出版物通過(guò)自己的分布代理運(yùn)行在分發(fā)者上并與訂閱者相連。
而管理型的數(shù)據(jù)是在收費(fèi)中心設(shè)置,雖然修改的頻度不是很大,但在修改后即要發(fā)生作用,所以也采用事物型復(fù)制,收費(fèi)中心為出版者,收費(fèi)站為訂閱者。將管理型的數(shù)據(jù)發(fā)布到各收費(fèi)站。
由于公司總部不需要實(shí)時(shí)更新,所以收費(fèi)中心數(shù)據(jù)庫(kù)服務(wù)器與公司總部服務(wù)器之間的數(shù)據(jù)同歩設(shè)置為快照復(fù)制,公司總部數(shù)據(jù)庫(kù)中建立收費(fèi)中心表的快照,対這些數(shù)據(jù)的修改在收費(fèi)中心進(jìn)行,把收費(fèi)中心數(shù)據(jù)庫(kù)服務(wù)器設(shè)置為出版者,出版物為匯總數(shù)據(jù),公司總部數(shù)據(jù)庫(kù)服務(wù)器設(shè)置為訂閱者,快照代理將準(zhǔn)備包含有被出版數(shù)據(jù)表的結(jié)構(gòu)與數(shù)據(jù)的快照文件,在分發(fā)者上存儲(chǔ)這些文件,并在分發(fā)者的分發(fā)數(shù)據(jù)庫(kù)中記錄同歩任務(wù)。在收費(fèi)中心數(shù)據(jù)庫(kù)服務(wù)器上建立一個(gè)作業(yè),設(shè)置為每天早上8點(diǎn)更新一次(收費(fèi)日的夭為8點(diǎn)到第二天8點(diǎn)),公司總部就能得到截止到前一天所有收費(fèi)站的匯總數(shù)據(jù)。
3.測(cè)試
數(shù)據(jù)庫(kù)設(shè)計(jì)好了,就要対它進(jìn)行測(cè)試。我們的測(cè)試策略為分歩測(cè)試:首先測(cè)試收費(fèi)站數(shù)據(jù)的正確性及完整性,在多臺(tái)收費(fèi)機(jī)上同時(shí)輸入幾組車型、收費(fèi)類型的數(shù)據(jù),查詢數(shù)據(jù)庫(kù)的流水?dāng)?shù)據(jù)是否正確,再看匯總數(shù)據(jù)是否正確;收費(fèi)站正確后,再測(cè)試收費(fèi)中心的數(shù)據(jù)的正確性、完整性及延時(shí);再測(cè)試公司總部的數(shù)據(jù)正確性、完整性。
一開始我們把所有的表都建立在一個(gè)出版物中,但在測(cè)試中我們發(fā)現(xiàn),由于收費(fèi)站一個(gè)表的錯(cuò)誤而造成的復(fù)制的中斷,經(jīng)常要重新配置復(fù)制,所有的表都要重新選擇及設(shè)置一遍,非常繁瑣,我們采取一個(gè)表建立一個(gè)出版物的方法來(lái)簡(jiǎn)化操作,只要恢復(fù)出錯(cuò)的復(fù)制,其他的復(fù)制仍然能正常執(zhí)行,而且哪一個(gè)表的復(fù)制發(fā)生中斷也很明確,不僅簡(jiǎn)化了操作,也加快了處理時(shí)間,就是日后用戶雄護(hù)起來(lái)也簡(jiǎn)單明了。
在設(shè)計(jì)過(guò)程中,基于查詢及安全性的需要,我們大量的使用了視圖,第一加快了查詢速度;第二也防止了人為因素造成的數(shù)據(jù)的更改。
4.總結(jié)
按照以上的設(shè)計(jì)方案實(shí)施后,完全滿足高速公路系統(tǒng)対數(shù)據(jù)實(shí)時(shí)性和完整性的要求,系統(tǒng)目前只在內(nèi)部使用,而以后全省的高速公路收費(fèi)系統(tǒng)實(shí)行聯(lián)網(wǎng),在外網(wǎng)上發(fā)布信息,那時(shí)數(shù)據(jù)的安全性及查詢的響應(yīng)速度將是我們考慮的重點(diǎn)。
本文摘自 :https://blog.51cto.com/u