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