文/郭士鑫 安衛(wèi)士 滕舟
(浙江省氣象信息網(wǎng)絡(luò)中心 浙江省杭州市 310000)
隨著生活水平的改善,人們對(duì)氣象服務(wù)的實(shí)時(shí)性和準(zhǔn)確性要求越來(lái)越高。浙江作為經(jīng)濟(jì)強(qiáng)省和海洋大省,氣象災(zāi)害多發(fā),氣候變化影響顯著,建立一套氣象預(yù)報(bào)服務(wù)系統(tǒng)十分必要。做好氣象預(yù)報(bào)工作的首要前提就是做好氣象觀測(cè),而地面氣象觀測(cè)是氣象觀測(cè)的重要組成部分[1]。通過(guò)對(duì)特定范圍內(nèi)地面氣象要素(如溫度、濕度、降水、氣壓、能見(jiàn)度等)連續(xù)、系統(tǒng)的觀察和測(cè)量,形成地面自動(dòng)站海量觀測(cè)大數(shù)據(jù),從而為氣象預(yù)報(bào)、氣象服務(wù)、氣候分析和科學(xué)研究提供原始資料的支持[2]。
為了更好地支撐全國(guó)氣象預(yù)報(bào)與服務(wù)工作,中國(guó)氣象局國(guó)家信息中心決定構(gòu)建大數(shù)據(jù)云平臺(tái)系統(tǒng),改變?cè)甲詣?dòng)站實(shí)時(shí)報(bào)文格式為標(biāo)準(zhǔn)格式數(shù)據(jù)(Bufr-Binary Universal Form for the Representation of Meteorological Data,以下簡(jiǎn)稱(chēng)Bufr 數(shù)據(jù)),并將以往報(bào)文文件通過(guò)FTP 傳輸改變?yōu)锽ufr 數(shù)據(jù)封裝成消息傳輸[3]。
基于此,為了保證自動(dòng)站觀測(cè)要素在省級(jí)落地以服務(wù)本省的氣象預(yù)報(bào)工作,迫切需要建立一套完善的Bufr 消息解碼入庫(kù)系統(tǒng),并以此搭建一個(gè)完善、友好的web 訪問(wèn),供預(yù)報(bào)員做好預(yù)報(bào)工作。
由于現(xiàn)在自動(dòng)站觀測(cè)數(shù)據(jù)通過(guò)Bufr 編碼封裝成消息進(jìn)行傳輸,因此首先需要在最短時(shí)間內(nèi)將Bufr 消息解碼入庫(kù),形成一個(gè)穩(wěn)定的數(shù)據(jù)來(lái)源,并將這些數(shù)據(jù)直觀、便捷的展示給預(yù)報(bào)人員使用。
后臺(tái)解碼入庫(kù)系統(tǒng)采用C#窗體程序,自動(dòng)站觀測(cè)要素存放在分布式關(guān)系型數(shù)據(jù)庫(kù)SQL Server 中,發(fā)布數(shù)據(jù)訪問(wèn)接口。前端開(kāi)發(fā)基于B/S 架構(gòu)的自動(dòng)站觀測(cè)系統(tǒng), 通過(guò)調(diào)用數(shù)據(jù)接口API,繪制氣象要素圖。
Bufr 資料是一系列八位組(一個(gè)八位組=8 比特位)構(gòu)造的連續(xù)比特流組成,是與硬件數(shù)據(jù)表示無(wú)關(guān)的編碼。一份Bufr 資料由一個(gè)或多個(gè)相關(guān)的氣象數(shù)據(jù)子集組成,本文中自動(dòng)站Bufr 編碼數(shù)據(jù)由指示段、標(biāo)識(shí)段、數(shù)據(jù)描述段、數(shù)據(jù)段和結(jié)束段構(gòu)成[4]。每個(gè)字段構(gòu)成內(nèi)容如表1 所示。
與原先自動(dòng)站報(bào)文字符編碼相比,數(shù)據(jù)流編碼的Bufr 數(shù)據(jù)具有更強(qiáng)的數(shù)據(jù)表示和壓縮能力,適合高頻次的實(shí)時(shí)傳輸,并且由于編碼的人工不可讀性,保證了氣象數(shù)據(jù)的完整性和準(zhǔn)確性。為了更好的展示Bufr 編碼,對(duì)于數(shù)據(jù)段的編碼如圖1 所示。
圖1 中,以站號(hào)58459 為例,描述符代碼為001001 的一行表示W(wǎng)MO 區(qū)號(hào),占7 個(gè)寬度值,第二行表示W(wǎng)MO 站號(hào),其余行類(lèi)同。信息段3 包含了自動(dòng)站所有的觀測(cè)要素資料。
自動(dòng)站觀測(cè)要素通過(guò)消息的形式上行到省級(jí)消息服務(wù)器,采用消息中間件RabbitMq 多線程消費(fèi)消息隊(duì)列中的要素信息[5]。通過(guò)多線程技術(shù),保證了消息無(wú)堆積,最大程度利用硬件資源,傳輸網(wǎng)絡(luò)為千兆網(wǎng)的TCP/IP 協(xié)議,配合分布式部署的數(shù)據(jù)庫(kù),保證了實(shí)時(shí)數(shù)據(jù)的有效錄入。并且創(chuàng)建監(jiān)控程序,當(dāng)入庫(kù)進(jìn)程異常退出時(shí),通過(guò)短信貓及時(shí)通知運(yùn)維人員,保證數(shù)據(jù)入庫(kù)的穩(wěn)定性。

表1:自動(dòng)站Bufr 編碼分段

表2:自動(dòng)站觀測(cè)信息鍵表

表3:自動(dòng)站觀測(cè)信息要素表
省級(jí)自動(dòng)站數(shù)目多,消息傳輸頻次高,自動(dòng)化觀測(cè)要素Bufr解碼后存儲(chǔ)在關(guān)系型數(shù)據(jù)庫(kù)SQL Server 中,并且全省氣象業(yè)務(wù)單位均從該庫(kù)中讀取觀測(cè)要素信息。高效率的數(shù)據(jù)庫(kù)表設(shè)計(jì)對(duì)系統(tǒng)性能起著關(guān)鍵作用,解碼入庫(kù)系統(tǒng)中數(shù)據(jù)庫(kù)表的設(shè)計(jì)主要遵循以下原則:

圖1:Bufr 編碼數(shù)據(jù)段示意圖

圖2:自動(dòng)站Bufr 消息入庫(kù)程序界面

圖3:浙江氣象自動(dòng)站觀測(cè)圖
2.2.1 建立“鍵-要素”形式窄表
數(shù)據(jù)庫(kù)表結(jié)構(gòu)設(shè)計(jì)中,用盡量少的列可以有效提高數(shù)據(jù)庫(kù)的查詢(xún)效率。關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)多列消息時(shí),可以采用“鍵-要素”拆分表的方法,提取公共元素信息作為鍵表,其他信息作為要素表,用外鍵關(guān)聯(lián),減少數(shù)據(jù)庫(kù)表列的數(shù)目,提高后臺(tái)訪問(wèn)效率。經(jīng)過(guò)對(duì)自動(dòng)站觀測(cè)要素的分析,每條Bufr 數(shù)據(jù)均包含站號(hào)、站名、經(jīng)度、緯度、站址(省、市、縣/區(qū)、鄉(xiāng)鎮(zhèn)/街道、村/社區(qū)五級(jí)地理位置信息)、設(shè)備狀態(tài)、溫度、濕度、降水、氣壓等要素。因此,解碼入庫(kù)系統(tǒng)中創(chuàng)建四種形式的表結(jié)構(gòu),第一類(lèi)表為鍵表,主要存儲(chǔ)自動(dòng)站站號(hào)、站名、經(jīng)度、緯度、站址(省、市、縣/區(qū)、鄉(xiāng)鎮(zhèn)/街道、村/社區(qū)五級(jí)地理位置信息)、設(shè)備狀態(tài)等共性信息。并且根據(jù)氣象要素訪問(wèn)習(xí)慣分類(lèi),第二類(lèi)為溫濕風(fēng)壓要素表,第三類(lèi)為雨量雪深要素表,第四類(lèi)為其他信息要素表。如表2 和表3 分別代表自動(dòng)站觀測(cè)鍵表和要素表。
表2 為自動(dòng)站觀測(cè)信息的鍵表,主要存放自動(dòng)站觀測(cè)的共性信息,省略部分還有站點(diǎn)等級(jí)、站點(diǎn)可用性、站點(diǎn)索引等信息,同一自動(dòng)站每分鐘上行的Bufr 消息,此部分都是相同的。表3 中,第一列StationNum 和表2 的IIiii 列相關(guān)聯(lián),Web 端查詢(xún)數(shù)據(jù)時(shí),通過(guò)聯(lián)合檢索就可獲取。
2.2.2 創(chuàng)建有效索引
為了提高數(shù)據(jù)庫(kù)的檢索速度,在作為主鍵的列和連接的列上建立唯一索引,加快連接速度;并且根據(jù)用戶(hù)的習(xí)慣,在表2 溫度和表3 降水的列上也創(chuàng)建索引,加快Web 的訪問(wèn)效率。
2.2.3 建立合理的分區(qū)
考慮氣象數(shù)據(jù)都是按照時(shí)間順序劃分的,因此,除了鍵表2 不會(huì)重新創(chuàng)建外,要素表每一個(gè)月重新建立一張同樣結(jié)構(gòu)的新表。同時(shí)對(duì)同一個(gè)月的每張要素表按觀測(cè)時(shí)間列進(jìn)行分區(qū),每天作為一個(gè)分區(qū)。每個(gè)分區(qū)作為表的一個(gè)子集,都是一個(gè)邏輯實(shí)體,在不影響用戶(hù)感知的情況下,提高了訪問(wèn)效率。
解碼入庫(kù)系統(tǒng)中,全省自動(dòng)站每分鐘上行一份Bufr 消息至消息服務(wù)器。Bufr 消息解碼入庫(kù)程序如圖2 所示,其中顯示的信息為Bufr 編碼消息的名稱(chēng)。
打開(kāi)程序后,RabbitMq 自動(dòng)監(jiān)聽(tīng)消息隊(duì)列是否有新消息產(chǎn)生,并將消息數(shù)據(jù)及時(shí)錄入數(shù)據(jù)庫(kù)。
自動(dòng)站觀測(cè)要素消息隊(duì)列分多路錄入數(shù)據(jù)庫(kù),隊(duì)列中無(wú)消息積壓,說(shuō)明了RabbitMq 多線程入庫(kù)程序穩(wěn)定,最大程度上利用了硬件資源。
瀏覽器登錄浙江氣象自動(dòng)站觀測(cè)網(wǎng),顯示如圖3 所示。
圖3 左側(cè)是自動(dòng)站觀測(cè)要素,如降水、溫度、積雪深度、風(fēng)等資料。圖中顯示的是最近整點(diǎn)氣溫的示意圖,直觀地展示給預(yù)報(bào)人員使用。
本文通過(guò)RabbitMq 多線程技術(shù)將Bufr 編碼的自動(dòng)站消息入庫(kù),提供了及時(shí)有效的氣象數(shù)據(jù)來(lái)源,并采用GDI 技術(shù),成功在瀏覽器上繪制出自動(dòng)站觀測(cè)要素圖,有效的支持了氣象預(yù)報(bào)、科研人員使用。此外,監(jiān)控程序的創(chuàng)建,減輕了一線運(yùn)維值班值班的壓力,提高了工作效率。軟件運(yùn)行半年以來(lái),后臺(tái)入庫(kù)時(shí)效性與準(zhǔn)確性得到了保障,前端展示界面也未發(fā)生故障不能訪問(wèn)的情況,取得了較好的經(jīng)濟(jì)效益。