王國(guó)君,蔡 英
(寶雞市氣象局,陜西寶雞 721006)
觀測(cè)數(shù)據(jù)整合與共享的實(shí)現(xiàn)
王國(guó)君,蔡 英
(寶雞市氣象局,陜西寶雞 721006)
為了有效解決不同廠家區(qū)域站數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)不統(tǒng)一的問題,實(shí)現(xiàn)各類自動(dòng)氣象站觀測(cè)數(shù)據(jù)的集約化使用,以整合區(qū)域站、自動(dòng)站數(shù)據(jù)建立統(tǒng)一的應(yīng)用數(shù)據(jù)源,建立標(biāo)準(zhǔn)的訪問接口和數(shù)據(jù)共享系統(tǒng)為目標(biāo),設(shè)計(jì)了觀測(cè)數(shù)據(jù)整合與共享系統(tǒng),使用數(shù)據(jù)庫(kù)觸發(fā)器、存儲(chǔ)過(guò)程以及.net平臺(tái)編程技術(shù)實(shí)現(xiàn)。
區(qū)域站;數(shù)據(jù)庫(kù);觸發(fā)器;存儲(chǔ)過(guò)程;整合
2012年以后,寶雞市氣象局逐步使用華云、無(wú)錫設(shè)備新建或替換原有華創(chuàng)區(qū)域自動(dòng)氣象站,因此在全市形成三個(gè)區(qū)域站中心站系統(tǒng),且各廠家所使用的數(shù)據(jù)庫(kù)結(jié)構(gòu)不一致,數(shù)據(jù)存儲(chǔ)字段、類型也存在差異,增加了數(shù)據(jù)使用的難度,降低了使用效率。自動(dòng)站與區(qū)域站數(shù)據(jù)融合使用也存上述問題,需要對(duì)全市觀測(cè)數(shù)據(jù)進(jìn)行整合,建立統(tǒng)一的應(yīng)用數(shù)據(jù)源,數(shù)據(jù)訪問接口和數(shù)據(jù)共享系統(tǒng)。
1.1 觀測(cè)數(shù)據(jù)整合與共享系統(tǒng)功能設(shè)計(jì)
觀測(cè)數(shù)據(jù)整合與共享主要是實(shí)現(xiàn)區(qū)域站、自動(dòng)站數(shù)據(jù)集約化數(shù)據(jù)存儲(chǔ),建立統(tǒng)一的觀測(cè)數(shù)據(jù)應(yīng)用源,建立標(biāo)準(zhǔn)的數(shù)據(jù)應(yīng)用訪問接口。如圖1所示,原有的CAWS600B(華創(chuàng))、CAWSDB (華云)、AWS(無(wú)錫)三個(gè)區(qū)域站數(shù)據(jù)庫(kù)部署在業(yè)務(wù)數(shù)據(jù)庫(kù)服務(wù)器上,與各自的中心站軟件關(guān)聯(lián)。新建AWSData庫(kù)用于存儲(chǔ)區(qū)域站及自動(dòng)站數(shù)據(jù),該庫(kù)部署在應(yīng)用數(shù)據(jù)庫(kù)服務(wù)器上,業(yè)務(wù)和應(yīng)用分離,避免數(shù)據(jù)應(yīng)用訪問量異常增加影響區(qū)域站業(yè)務(wù)質(zhì)量。通過(guò)使用數(shù)據(jù)庫(kù)觸發(fā)器機(jī)制實(shí)現(xiàn)三個(gè)廠家區(qū)域站數(shù)據(jù)主動(dòng)推送到AWSData庫(kù),完成數(shù)據(jù)整合。自動(dòng)站數(shù)據(jù)使用輔助程序收集報(bào)文,解析存入AWSData庫(kù)?;贏WSData庫(kù)整合和收集的觀測(cè)數(shù)據(jù)進(jìn)行實(shí)時(shí)分析和處理,將大風(fēng)、強(qiáng)降水等數(shù)據(jù)存入Alarm庫(kù),作為災(zāi)害性天氣實(shí)時(shí)提示報(bào)警信息在共享系統(tǒng)上顯示。數(shù)據(jù)共享是基于WCF服務(wù)技術(shù)為應(yīng)用庫(kù)設(shè)計(jì)標(biāo)準(zhǔn)的訪問接口,通過(guò)訪問接口的標(biāo)準(zhǔn)化實(shí)現(xiàn)應(yīng)用數(shù)據(jù)的開放,以WebApp站點(diǎn)實(shí)現(xiàn)數(shù)據(jù)展示、查詢統(tǒng)計(jì)等。
圖1 觀測(cè)數(shù)據(jù)整合與共享系統(tǒng)結(jié)構(gòu)圖
1.2 數(shù)據(jù)庫(kù)結(jié)構(gòu)設(shè)計(jì)
數(shù)據(jù)庫(kù)設(shè)計(jì)遵循關(guān)系型數(shù)據(jù)庫(kù)設(shè)計(jì)原則[1], AWSData庫(kù)用于存儲(chǔ)區(qū)域站、自動(dòng)站的觀測(cè)數(shù)據(jù),并作為統(tǒng)一開放數(shù)據(jù)源。分析區(qū)域站、自動(dòng)站數(shù)據(jù)特點(diǎn)發(fā)現(xiàn),自動(dòng)站觀測(cè)要素多,區(qū)域站觀測(cè)要素少,區(qū)域站觀測(cè)項(xiàng)目為自動(dòng)站觀測(cè)項(xiàng)目的子集。為提高數(shù)據(jù)存儲(chǔ)空間利用效率,將兩類數(shù)據(jù)分開存儲(chǔ),使用時(shí)合并。分別設(shè)計(jì)區(qū)域站和自動(dòng)站數(shù)據(jù)表,相同屬性采用相同字段名和存儲(chǔ)類型,設(shè)置站號(hào)和時(shí)間為主鍵。
2.1 數(shù)據(jù)推送機(jī)制
區(qū)域站數(shù)據(jù)主動(dòng)推送是由數(shù)據(jù)庫(kù)引擎完成。區(qū)域站中心站軟件將數(shù)據(jù)入庫(kù)后,數(shù)據(jù)庫(kù)引擎觸發(fā)和響應(yīng)Insert事件,執(zhí)行AFTERINSERT觸發(fā)器 (觸發(fā)器是一種響應(yīng)特定事件的特殊類型的存儲(chǔ)過(guò)程。AFTERINSERT觸發(fā)器,只要向表中插入新行,就會(huì)執(zhí)行觸發(fā)器的代碼,對(duì)于每一個(gè)插入的行,SQLServer會(huì)將行的內(nèi)容存儲(chǔ)到一個(gè)特殊的表中,表名稱為INSERTED,在觸發(fā)器的代碼內(nèi)可以訪問該表。)代碼。該觸發(fā)器調(diào)用執(zhí)行預(yù)先編寫的數(shù)據(jù)推送存儲(chǔ)過(guò)程,將區(qū)域站數(shù)據(jù)寫入到AWSData庫(kù)中,區(qū)域站數(shù)據(jù)第一時(shí)間被從源表推送到目標(biāo)表。同理,使用CLR存儲(chǔ)過(guò)程 (為提高數(shù)據(jù)分析和篩選的效率)分析處理被寫入AwsData庫(kù)的數(shù)據(jù),并篩選出強(qiáng)降水、大風(fēng)等報(bào)警信息,將其推送至Alarm庫(kù)。
圖2 區(qū)域站數(shù)據(jù)推送序列圖
2.2 數(shù)據(jù)推送存儲(chǔ)過(guò)程的實(shí)現(xiàn)細(xì)節(jié)
2.2.1 使用鏈接服務(wù)器實(shí)現(xiàn)跨服務(wù)器數(shù)據(jù)推送分別為三個(gè)數(shù)據(jù)庫(kù)創(chuàng)建相應(yīng)的數(shù)據(jù)推送存儲(chǔ)過(guò)程來(lái)實(shí)現(xiàn)數(shù)據(jù)推送存儲(chǔ)功能,在存儲(chǔ)過(guò)程中使用SQL語(yǔ)句從源表中檢索出數(shù)據(jù),再將數(shù)據(jù)寫入AWSData庫(kù)中的區(qū)域站數(shù)據(jù)表。由于AWSData庫(kù)與源庫(kù)不在同一數(shù)據(jù)庫(kù)服務(wù)器上,引用AWSData庫(kù)中的區(qū)域站數(shù)據(jù)表時(shí)須以 “鏈接服務(wù)器名.庫(kù)名.表名”的方式使用,實(shí)現(xiàn)數(shù)據(jù)跨越服務(wù)器推送。
2.2.2 解決數(shù)據(jù)存儲(chǔ)類型和內(nèi)容格式不一致的問題 三個(gè)廠家數(shù)據(jù)庫(kù)中關(guān)于 “最大風(fēng)速出現(xiàn)時(shí)間”,“最高溫度出現(xiàn)時(shí)間”等字段分別采用不同的數(shù)據(jù)類型,華創(chuàng)庫(kù)中采用char(10)、華云庫(kù)中采用char(5)、無(wú)錫庫(kù)中采用char(4)。AWSData庫(kù)中區(qū)域站數(shù)據(jù)表中采用char(4)類型存儲(chǔ),該類數(shù)據(jù)需要在數(shù)據(jù)推送存儲(chǔ)過(guò)程中進(jìn)預(yù)處理[3],統(tǒng)一數(shù)據(jù)格式。如表示“12:03”,無(wú)錫庫(kù)存為“1203”,華創(chuàng)、華云兩庫(kù)存入格式為“12:03”,由于華創(chuàng)庫(kù)該字段采用char (10),存入時(shí)數(shù)據(jù)庫(kù)會(huì)自動(dòng)在其后補(bǔ)五個(gè)空字符。因此需要使用字符串函數(shù)去掉其中的 “:”或多余的空字符,使數(shù)據(jù)格式一致。
2.2.3 使用動(dòng)態(tài)SQL語(yǔ)句解決表名與站號(hào)相關(guān)的問題 由于華云庫(kù)的設(shè)計(jì)沒有遵循關(guān)系型數(shù)據(jù)庫(kù)設(shè)計(jì)原則,以站號(hào)信息作為表名。例如整點(diǎn)和分鐘加密數(shù)據(jù)分別存儲(chǔ)于 HXXXXX, MXXXXX兩個(gè)表中,造成對(duì)華云庫(kù)的數(shù)據(jù)檢索比較困難,推送存儲(chǔ)過(guò)程里不能直接執(zhí)行 “INSERTINTOSELECT”這樣的SQL語(yǔ)句實(shí)現(xiàn)數(shù)據(jù)推送,必須通過(guò)字符串運(yùn)算,根據(jù)站號(hào)動(dòng)態(tài)擬合出相應(yīng)的SQL語(yǔ)句字符串,使用Sp_Executesql方法執(zhí)行動(dòng)態(tài)SQL語(yǔ)句[2]。
2.3 歷史數(shù)據(jù)與數(shù)據(jù)完整性說(shuō)明
數(shù)據(jù)的推送是充分利用SQLServer數(shù)據(jù)庫(kù)的事件機(jī)制實(shí)現(xiàn)的。實(shí)際使用中,區(qū)域站中心站軟件向數(shù)據(jù)庫(kù)成功寫入數(shù)據(jù),數(shù)據(jù)庫(kù)引擎就會(huì)啟動(dòng)和確保數(shù)據(jù)推送存儲(chǔ)過(guò)程得到有效執(zhí)行。實(shí)踐證明該方式是可以保證區(qū)域站數(shù)據(jù)完整推送到應(yīng)用庫(kù)中,不會(huì)出現(xiàn)遺漏。歷史數(shù)據(jù)的導(dǎo)入需要手動(dòng)完成,在數(shù)據(jù)推送功能的代碼基礎(chǔ)上稍做修改即可實(shí)現(xiàn),手動(dòng)執(zhí)行一次可一次性完成歷史數(shù)據(jù)的導(dǎo)入和整合。
觀測(cè)數(shù)據(jù)整合和共享系統(tǒng)實(shí)現(xiàn)了區(qū)域站、自動(dòng)站數(shù)據(jù)標(biāo)準(zhǔn)化存儲(chǔ),建立了統(tǒng)一觀測(cè)數(shù)據(jù)應(yīng)用源,面向服務(wù)架構(gòu)開發(fā)了數(shù)據(jù)訪問接口,并實(shí)現(xiàn)觀測(cè)數(shù)據(jù)共享,為氣象服務(wù)工作提供數(shù)據(jù)支持,提高了數(shù)據(jù)提取和使用效率。該系統(tǒng)主要涉及了一些數(shù)據(jù)共享和應(yīng)用功能,相對(duì)于業(yè)務(wù)服務(wù)工作的需求,還需要后續(xù)不斷開發(fā)更多的數(shù)據(jù)展示和應(yīng)用功能。
[1] 薩師煊.數(shù)據(jù)庫(kù)系統(tǒng)概論[M].3版.北京:高等教育出版社,2002:173-175.
[2] 鄒建.深入淺出SQLServer2005開發(fā)、管理與應(yīng)用實(shí)例[M].北京:人民郵電出版社,2008:108-112.
[3] 何林,范濤,曹波.區(qū)域自動(dòng)氣象站數(shù)據(jù)庫(kù)整合設(shè)計(jì)與實(shí)現(xiàn)[J].陜西氣象,2014(4):44-46.
P409
B
王國(guó)君,蔡英.觀測(cè)數(shù)據(jù)整合與共享的實(shí)現(xiàn)[J].陜西氣象,2015(2):38-40.
1006-4354(2015)02-0038-03
2014-08-25
王國(guó)君(1981—),男,漢族,陜西藍(lán)田人,工程師,從事氣象信息技術(shù)保障工作。