論分布式數(shù)據(jù)庫的設(shè)計和實現(xiàn)
-金蠶工程
[摘要]
本文論述《金蠶工程》的分布式數(shù)據(jù)庫的設(shè)計和實現(xiàn)。該項目的設(shè)計目標(biāo)是實現(xiàn)企業(yè)間繭、絲等的合同交易(交易規(guī)則和期貨交易一樣)、實時行情和成交數(shù)據(jù)的發(fā)布、繭絲質(zhì)押和質(zhì)押數(shù)據(jù)的發(fā)布。所有功能均要求既能在企業(yè)局域網(wǎng)交易大廳和Internet上進(jìn)行,許多功能又要在蘇州和成都分中心進(jìn)行。系統(tǒng)從設(shè)計時就把基于分布式數(shù)據(jù)庫應(yīng)用的可用性和可靠性作為系統(tǒng)一個關(guān)鍵目標(biāo)。為了達(dá)到系統(tǒng)的上述要求,系統(tǒng)分別從數(shù)據(jù)庫設(shè)計、應(yīng)用數(shù)據(jù)集成
和測試以及分布式數(shù)據(jù)庫部署等做了大量工作。針対上述各部分,本文論述了分布式數(shù)據(jù)庫的設(shè)計和實現(xiàn)及遇到過的典型問題和措施,最后対系統(tǒng)改進(jìn),談一些自己的體會。
在項目開展期間,我擔(dān)任了系統(tǒng)分析、系統(tǒng)設(shè)計與關(guān)鍵模塊的編程等大量工作。該項目在2002年通過了浙江省軟件評測中心的評測。
[正文]
我于2000年底到2002年6月組織了中國繭絲綢市場由國家經(jīng)貿(mào)部資助的《金蠶工程》一、二期項目的開發(fā)。由于原有系統(tǒng)存在如下問題:
(一)原有系統(tǒng)采用傳統(tǒng)C/S結(jié)構(gòu),客戶端運行在DOS平臺,后臺使用Foxpro數(shù)據(jù)庫。系統(tǒng)處理慢,前后臺數(shù)據(jù)一致性,并且Foxpro服務(wù)器在交易高峰經(jīng)常莫名其妙的死鎖和Down機。
(二)市場是中國最大的繭絲交易市場,由于會員單位不斷増加,原有遠(yuǎn)程電話撥入設(shè)備嚴(yán)重不夠用,系統(tǒng)又不能通過Internet連接訪問,進(jìn)行合同交易和行情的及時查詢,嚴(yán)重限制了市場的發(fā)展。
(三)原有系統(tǒng)只部分實現(xiàn)了合同交易和資金清單,功能和企業(yè)發(fā)展不相適應(yīng)。(四)由于會員在地區(qū)上分布不均勻,為了更好地服務(wù)于會員要求在滿足一定條件下建立分中心交易系統(tǒng)。在這種情況下,市場決定開發(fā)基于Internet B/S結(jié)構(gòu)和基于X net server通訊中間件(類似IBM MQ Series的通訊中間件)的4-Tier結(jié)構(gòu)的綠舍軟件,分中心采用基于分布式數(shù)據(jù)庫地應(yīng)用系統(tǒng)。一期項目包括:基于4-Tier的合同交易系統(tǒng)和資金清單系統(tǒng),基于Internet的行情查詢和信息發(fā)布的企業(yè)網(wǎng)站。二期項目包括:繭絲質(zhì)押、倉庫管理系統(tǒng)、Internet質(zhì)押查詢系統(tǒng)和分中心交易和資金結(jié)單系統(tǒng)。
鑒于該項目業(yè)務(wù)比較復(fù)雜,流程比較多,系統(tǒng)要兼顧企業(yè)交易大廳會員、遠(yuǎn)程Internet交易的會員和分交易中心會員,項目完成時間短等特點,為了既要項目的按期投產(chǎn)又要實現(xiàn)基于分布式數(shù)據(jù)庫的分中心交易和資金結(jié)單系統(tǒng),我從數(shù)據(jù)庫選型、數(shù)據(jù)庫設(shè)計、應(yīng)用數(shù)據(jù)集成和測試以及分布式數(shù)據(jù)庫部署如下工作。
(1)數(shù)據(jù)庫選型?,F(xiàn)在的主流數(shù)據(jù)庫一般都可以按分布式進(jìn)行部署,例如:SQL Server、Oracle、Informix和DB2等。由于一期項目的數(shù)據(jù)庫平臺是選擇了 Oracle 7.0,經(jīng)過了近一年的運行,其數(shù)據(jù)自動備份、多用戶并發(fā)處理性能、破盤表空間管理、Web數(shù)據(jù)發(fā)布等表現(xiàn)良好。我公司又由于開發(fā)過基于該平臺的分布式應(yīng)用系統(tǒng),公司対其分布式實施也有相當(dāng)?shù)慕?jīng)驗,所以經(jīng)我們開發(fā)部相關(guān)人員的討論,我決定在各分交易中心繼續(xù)采用Oracle數(shù)據(jù)庫來實現(xiàn),其分布功能主要基于 SQL.NET來完成。
(2)分布式數(shù)據(jù)庫設(shè)計。由于各交易品種的每節(jié)交易價格由市場的交易大廳決定,所以各分中心必須在每節(jié)交易開始前取得相關(guān)的交易數(shù)據(jù)。各分交易中心必須保留其會員已經(jīng)交易成功的買入和賣出交易數(shù)據(jù),并根據(jù)會員需要進(jìn)行資金結(jié)單。經(jīng)対分交易中心充分業(yè)務(wù)需求分析后,我覺得分交易中心的主要功能還是和主市場交易中心(簡稱:主中心)功能是一致的,只不過分交易中心的會員數(shù)比較少和無需保留各節(jié)的歷更交易行情,所以,分中心的
主要數(shù)據(jù)庫中的各表還是照搬主市場數(shù)據(jù)庫的各表,分中心只保留各自的會員基礎(chǔ)數(shù)據(jù)和成交數(shù)據(jù),保留會員歷更交易數(shù)據(jù),只保留當(dāng)前的各節(jié)的交易行情,不保留歷更行情。主中心必須保留各分中心的各項明細(xì)數(shù)據(jù),主中心也必須及時計單分中心會員的匯總資金,所以主中心必須増加分中心匯總資金表。
(3)數(shù)據(jù)集成。為了保證分中心及時下單,必須保證每節(jié)的交易行情要及時的傳送到各交易分中心。節(jié)處理最后一歩必須把下一節(jié)的交易行情傳送送各交易分中心。同時下發(fā)給分中心的數(shù)據(jù)還有,分中心本節(jié)各會員的成交數(shù)據(jù)。由于主中心保留各分中心的各項數(shù)據(jù),所以,分中心有新的會員加入必須同時更新分中心和主中心數(shù)據(jù)庫;分中心會員資金有變動時也必須同時更新主數(shù)據(jù)庫。由于各會員只能在當(dāng)日交易結(jié)東后才能進(jìn)行數(shù)據(jù)平倉,所以分中心平倉數(shù)據(jù)匯總后同意發(fā)送到主中心進(jìn)行平倉。在上述設(shè)計的數(shù)據(jù)庫到數(shù)據(jù)庫操作的數(shù)據(jù)完整性和一致性由數(shù)據(jù)庫的二階段提交(2 Phase Comit )來保證。由于Oracle是一個比較成熟的數(shù)據(jù)庫平臺,又由于每次事務(wù)都不大,所以運行到現(xiàn)在也沒有發(fā)現(xiàn)數(shù)據(jù)不一致現(xiàn)象,沒有出現(xiàn)“單辺帳",數(shù)據(jù)處理也比較快。為了近一歩保障各中心數(shù)據(jù)的一致性,我還做了一個同歩程序,由主中心發(fā)起,対主中心和分中心數(shù)據(jù)進(jìn)行比較。該程序可定期進(jìn)行。
(4)測試。由于一期項目已經(jīng)運行了相當(dāng)長的一段時間,系統(tǒng)已經(jīng)相當(dāng)穩(wěn)定了。由鑒于2 Phase Commit出色表現(xiàn),所以基于分布式的測試沒有覺得和集中數(shù)據(jù)庫有太大的區(qū)別。唯一的感覺是在第一次建立遠(yuǎn)程數(shù)據(jù)庫連接時,連接速度比較慢(有時超過20秒)。為了提高測試速度,我在同一個局域網(wǎng)中安裝了三套Oracle,分別充當(dāng)主中心和兩個分中心進(jìn)行測試。
(5)部署分布式數(shù)據(jù)庫。和集中時式的數(shù)據(jù)庫不同,采用分布式系統(tǒng),必須配置SQL.NET。其他的Oracle組件和子系統(tǒng)安全同本地安裝數(shù)據(jù)庫一樣。分布式數(shù)據(jù)庫在邏輯上屬于同一系統(tǒng),使得應(yīng)用不必關(guān)心遠(yuǎn)程數(shù)據(jù)庫的物理位置,就可以像訪問本地數(shù)據(jù)庫一樣訪問遠(yuǎn)程數(shù)據(jù)庫。采用分布式數(shù)據(jù)庫可充分提高系統(tǒng)的處理能力、均衡網(wǎng)絡(luò)負(fù)載,所以該分布式數(shù)據(jù)庫應(yīng)用方案在銀行代收、代付業(yè)務(wù)處理、保險代理點等單位和機構(gòu)中大量采用。但由于近些年來通信基礎(chǔ)建設(shè)比較迅速,特別是2M. 10M和100M光纖的推廠(100MP電月租費僅為800元),又為了節(jié)省下屬網(wǎng)點的機房費用,各單位又不約而同的采用的集中方案。
【缺點和需要改進(jìn)的地方】
(1)分中心或主中心由于不明原因而Down機后,由于Oracle有自動恢復(fù)功能,可能造成対方數(shù)據(jù)庫會收到過時的垃圾數(shù)據(jù)。該問題現(xiàn)在通過手工方式解決。
(2)由于分中心沒有收到下一節(jié)的交易行情,可能會造成分中心會延時交易。分中心的主控系統(tǒng)可通過主動拉取數(shù)據(jù)來解決。
【總結(jié)】
《金蠶工程》項目是成功的,年交易量已經(jīng)有100多億人民幣。通過該項目的順利投入運行,中國繭絲綢市場不僅牢牢把握住了中國的繭絲行情,隨著我國進(jìn)入WTO,中國繭絲綢市場在世界上也有舉足輕重的分量!
總之,中國的軟件產(chǎn)業(yè)應(yīng)該走自己的路,只有通過“已過程為核心,以度量為基礎(chǔ),已人為本"的管理政策;根據(jù)我國的國情、軟件業(yè)和公司的現(xiàn)狀,只有通過“干",才能有實績,才能實現(xiàn)“以信息化帶動工業(yè)化的大思路"!
本文摘自 :https://blog.51cto.com/u