三峽工程地磅稱重系統(tǒng)的分布式異構(gòu)數(shù)據(jù)庫集成方案研究
本文將結(jié)合三峽散裝水泥粉煤灰地磅稱重子系統(tǒng)(以下簡稱三峽地地磅稱重系統(tǒng))中工地地磅檢測(cè)系統(tǒng)數(shù) 據(jù)庫與調(diào)度中心數(shù)據(jù)庫的分布式異 構(gòu)數(shù)據(jù)庫集成實(shí)施方案,探討一種基 于Powerbuilder的多層分布式應(yīng)用系 統(tǒng)的實(shí)現(xiàn),并從實(shí)踐中總結(jié)出分布式 系統(tǒng)開發(fā)所要注意的問題。
一、系統(tǒng)設(shè)計(jì)背景
舉世矚目的三峽工程己經(jīng)進(jìn)入 到了三期工程階段,RCC圍堰和右岸 大壩主體的澆筑等高強(qiáng)度的施工作 業(yè)都對(duì)相關(guān)物資準(zhǔn)確及時(shí)地供應(yīng)提 出了更高的要求。為了避免三峽工 程物資交接雙方發(fā)生計(jì)量糾紛,保 證公平的貿(mào)易結(jié)算及物流暢通,確 保工程建設(shè)順利進(jìn)行,中國長江三 峽工程開發(fā)總公司物資部委托宜昌 市質(zhì)量技術(shù)監(jiān)督局三峽壩區(qū)工作站 對(duì)地秤稱重站進(jìn)行計(jì)量監(jiān)理。筆者 作為該站工作人員,主要負(fù)責(zé)計(jì)量 方面的工作,有幸參與了地磅稱重 系統(tǒng)的研究開發(fā)。
地磅過秤系統(tǒng)使 用地磅對(duì)送至 拌和樓的集裝箱散裝 物料進(jìn)行現(xiàn)場(chǎng)稱重,將稱量結(jié)果存入本地 數(shù)據(jù)庫,以備調(diào)度中 心核查各供應(yīng)商的計(jì) 劃執(zhí)行情況。同時(shí)各 個(gè)地磅也需要獲取調(diào)度中心制定的日調(diào)度計(jì)劃,以此來現(xiàn) 場(chǎng)強(qiáng)制和督促各供貨商的日供貨量 和調(diào)度執(zhí)行情況。
以下以地磅稱重系統(tǒng)的設(shè)計(jì)方 案為例,簡述分布式異構(gòu)數(shù)據(jù)庫的集 成方法和實(shí)現(xiàn)策略。
二、系統(tǒng)設(shè)計(jì)方案
綜合考慮地磅系統(tǒng)的物理位置 和連網(wǎng)布線經(jīng)費(fèi),所以采取RAS連接 的方式接入,使用電話撥號(hào)撥入Mo-dem 池中 ,通過路由器和防火墻,連 接到調(diào)度中心應(yīng)用服務(wù)器。各個(gè)采集 點(diǎn)上米用 Windows NT Workstation 下 的SQLAnywhere數(shù)據(jù)庫,中心米用 Windows NT下的Oracle數(shù)據(jù)庫系統(tǒng)。
遠(yuǎn)程連接采取PSTN接入,系統(tǒng) 結(jié)構(gòu)圖如圖1所示。
采用Powerbuilder的分布式計(jì)算 解決方案,利用TCP/IP的WinSock為 客戶提供服務(wù),監(jiān)聽某端口。當(dāng)客戶 發(fā)出請(qǐng)求,經(jīng)過身份密碼驗(yàn)證就可以 建立連接,并根據(jù)客戶端的請(qǐng)求類型。
異頻調(diào)用服務(wù)器端的過程,對(duì)上傳的 打包數(shù)據(jù)進(jìn)行處理并返回結(jié)果。
這個(gè) 過程類似一個(gè)RPC(遠(yuǎn)端過程調(diào)用), 完成服務(wù)器端的數(shù)據(jù)庫操作;同時(shí), 服務(wù)器端也可以利用服務(wù)器推動(dòng) (Server Push)機(jī)制實(shí)現(xiàn)對(duì)客戶機(jī)端 過程相同的調(diào)用模式,客戶機(jī)使用 與服務(wù)器處理客戶端請(qǐng)求相同的方 法處理服務(wù)器端的請(qǐng)求,利用它,就 可以將中心數(shù)據(jù)庫的數(shù)據(jù)打包發(fā)送 給各個(gè)采集點(diǎn),并存入相應(yīng)采集點(diǎn) 數(shù)據(jù)庫中。
系統(tǒng)最終的實(shí)現(xiàn)要做到對(duì)用戶 來說完全透明。用戶只需要發(fā)送數(shù) 據(jù),至于中心數(shù)據(jù)庫的數(shù)據(jù)如何寫 入,數(shù)據(jù)類型如何都不需要關(guān)心;這 些都由遠(yuǎn)程應(yīng)用服務(wù)器處理,寫入中 心數(shù)據(jù)庫相應(yīng)的基表中。
三、系統(tǒng)實(shí)現(xiàn)
系統(tǒng)實(shí)現(xiàn)主要利用其中兩個(gè)對(duì) 象,艮PTransport和Connection。
首先利用Transport對(duì)象來建立 分布式環(huán)境的服務(wù)器對(duì)象,利用Ap- plication屬性指明winsock端口號(hào),系 統(tǒng)中為10038 (并在WindowsNT系統(tǒng) 目錄下的Services文件中注冊(cè))。 Driver屬性指明所用的網(wǎng)絡(luò)協(xié)議,可 用的選項(xiàng)為 winsock、pipeline 和 open- Clientconnection。這里考慮到網(wǎng)絡(luò)環(huán) 境和通用性,選用架構(gòu)于TCP/IP協(xié) 議之上的Winsock。這樣調(diào)用Listen ()方法就開始了監(jiān)聽過程,以響應(yīng)用戶的請(qǐng)求"
客戶端的過程包括發(fā)起和創(chuàng)建 一個(gè)連接,利用的是Connection對(duì)象。 首先設(shè)定它的屬性,包括Driver、Ap-plication # Location。其中前兩項(xiàng)與服 務(wù)器端要保持一致,而Location用來 指明服務(wù)器的IP地址,這樣,就建立 了與服務(wù)器的接口。下面利用Con- necttoServer ()連接到指定的應(yīng)用遠(yuǎn) 程服務(wù)器,同時(shí)傳遞用戶名和密碼信 息以供服務(wù)器核實(shí)身份。然后,客戶 端根據(jù)自己的需要,調(diào)用Createln- stance(),在客戶端調(diào)用服務(wù)器上的 遠(yuǎn)程對(duì)象。系統(tǒng)利用對(duì)表:In- fo_Cllct_st的檢索,查看有沒有需要 傳輸?shù)臄?shù)據(jù),如果有,則開始相應(yīng)的 處理,否則繼續(xù)循環(huán)等待處理任務(wù)。
客戶端發(fā)現(xiàn)有傳輸任務(wù)時(shí),客 戶機(jī)系統(tǒng)開始打包數(shù)據(jù),利用動(dòng)態(tài) SQL語句,將需要檢索的數(shù)據(jù)打包成 字符串,并加上標(biāo)志客戶端種類和 位置的封套,傳遞給服務(wù)器端的處 理過程。
服務(wù)器端利用不可視對(duì)象的對(duì)象函數(shù)處理上傳數(shù)據(jù)請(qǐng)求。首先將作 為參數(shù)傳遞的打包數(shù)據(jù)利用參數(shù)的 封套信息解包,然后利用檢索本地?cái)?shù) 據(jù)表信息來確定要寫入的基表和宇 段,形成相應(yīng)的S:L語句,寫入數(shù)據(jù) 庫中。最后按寫入成功與否將信息 “推”給客戶端。
下載數(shù)據(jù)原理與上傳相仿,只 是此時(shí)服務(wù)器端檢索數(shù)據(jù),利用 Server Push技術(shù)調(diào)用客戶機(jī)上的處 理過程,在客戶機(jī)上完成數(shù)據(jù)下載 寫入過程。
利用這個(gè)過程,完成對(duì)數(shù)據(jù)庫服 務(wù)器的數(shù)據(jù)存取。具體流程見圖2。
四、結(jié)束語
在系統(tǒng)穩(wěn)定運(yùn)行的基礎(chǔ)上,物資 部從安全考慮,在現(xiàn)有的網(wǎng)絡(luò)環(huán)境之 上又添加了防火墻。此問題與系統(tǒng)本 身的可擴(kuò)展性和可維護(hù)性密切相關(guān), 在設(shè)計(jì)之初就應(yīng)當(dāng)充分考慮。
現(xiàn)在,二峽工程地磅稱重系統(tǒng)在 三峽物資管理中發(fā)揮著重大作用,而 其中的遠(yuǎn)程傳輸子系統(tǒng)運(yùn)行穩(wěn)定,為 數(shù)據(jù)集成和調(diào)度計(jì)劃的順利執(zhí)行以 及最終調(diào)度方案的生成創(chuàng)造了條件, 提供了技術(shù)保證。