陳 晴 楊 明 肖 云 吳京生 滕 舟 魏 爽 胡永亮 龐 俊
1(浙江省氣象信息網絡中心 浙江 杭州 310017)2(武漢科技大學計算機科學與技術學院 湖北 武漢 430065)
隨著氣象業務現代化建設的深入,氣象已進入大數據時代,表現在以下幾方面:1) 數據體量巨大,數據量達到PB級,不斷增加的數據量需要存儲容量能動態擴展;2) 數據種類繁多,既有地面、高空、衛星、雷達等監測數據,又有多種數值預報產品以及各種氣象服務產品[1];3) 數據響應速度要求快,從大量的氣象數據中獲取有效的信息是氣象服務的迫切需求[2]。
云存儲技術通過集群應用、網格技術和分布式文件系統等技術手段,讓網絡中大量各種不同類型的存儲設備在應用軟件的管理下協同工作,共同對外提供數據存儲和業務訪問功能[3-4]。
根據氣象部門對氣象數據的要求,對云數據存儲方法進行研究和探索,針對氣象數據的特點設計并實現了一套基于云分布式存儲技術的數據存儲方法,利用云計算的分布式存儲和并行化處理海量數據,為氣象大數據的存儲和計算提供支撐。
基于云分布式存儲技術的數據存儲重點在于解決海量氣象數據的存儲和處理問題,提高用戶的訪問效率。云存儲平臺整體架構劃分為4個層次,自底向上依次是:數據存儲層、存儲管理層、業務服務層與用戶訪問層[5],見圖1。

圖1 云存儲平臺整體架構
數據存儲層主要包括服務器集群以及將集群連接起來的物理鏈路,實現數據的統一管理。考慮到設計的云存儲平臺需可擴展性強、可靠性高、成本盡量低等特點,同時存儲設備要便于集中管理[6-7],方案中統一選擇X86服務器構建普通機器集群,操作系統選擇Linux操作系統。
存儲管理層主要包括大規模的分布式計算系統,負責管理集群系統資源以及資源的虛擬化、控制分布式程序運行、隱藏下層故障恢復、數據冗余、數據備份和數據容災等細節,有效地提供彈性計算和負載均衡的服務。
業務服務層采用云分布式服務技術,將不同的數據存儲和計算功能分解成各種微服務,實現大規模數據的存儲共享、查詢及處理服務。在此之上的云引擎為第三方云應用提供了彈性、低成本的運行環境,幫助簡化云應用的構建和部署。
用戶訪問層通過用戶授權、認證機制,使用戶對數據進行特定權限范圍的操作。這一層具體包括一些數據搜索服務、地圖服務以及第三方服務。
根據數據結構的差異,氣象數據主要可分為離散型數據、網格數據、柵格數據。自動氣象站各種氣象要素的實時和歷史數據,水利、環保、海洋等外部門單位的站點數據以離散型數據形式存在;各種氣象要素的網格化產品,數據以網格數據形式存在;云圖、雷達以及模式預報的輸出產品,數據以柵格數據的形式存在。其中離散型數據屬于結構化數據,網格數據和柵格數據屬于半/非結構化數據。
云數據庫是部署和虛擬化在云計算環境中的數據庫,在云數據庫應用中,客戶端無需了解云數據庫底層細節,底層硬件都已被虛擬化[8]。云數據庫對用戶而言就像運行在普通服務器上的數據庫一樣,但數據的存儲、處理能力與傳統意義的數據庫相比有了質的飛越[9-10]。
考慮到氣象數據自身的特點以及數據能夠被快速訪問的需求,同時氣象數據中的實時數據與歷史數據是一體化的,因此數據量極為龐大。傳統的關系型數據庫存儲管理系統可以滿足數據的一致性和可用性,在小規模數據量時可以達到很好的效應,隨著數據量與應用范圍的增長導致節點增加,需要考慮數據同步和分區失敗等開銷,性能會快速下降,因此數據分布式存儲是必然選擇[1]。
數據分布式存儲較常見的有兩種形式:分布式關系型數據庫和非關系型數據庫(NoSQL)。結構化數據采用分布式關系型數據庫存儲,半/非結構化數據采用NoSQL數據庫存儲。具體如表1所示。

表1 數據的存儲模型
結構化數據采用分布式關系型數據庫存儲,獲取低延遲與高并發吞吐能力。分布式關系型數據庫采用傳統的表-字段形式存儲,將數據表水平拆分到后端的每個分數據庫的分表中,分布式關系型數據庫中由每個分庫負責每一份數據的讀寫操作,從而有效地分散了整體的訪問壓力,提高了大型數據的訪問效率。
半結構數據主要以網格化數據為主,非結構數據以柵格數據為主,這兩種數據通常被當作字符串或二進制數據,采用NoSQL數據庫存儲。NoSQL數據庫采用了鍵值(Key-Value)模型,模型中Key值指向Value的鍵值。該結構主要分為主鍵、屬性和值三部分,基于值存儲的數據相對較大的特點,對數據進行切分與壓縮相結合的技術處理可以大幅提升數據傳輸能力。
2.2.1 主鍵表及屬性列表設計
(1) 網格數據的設計 氣象數據中的網格化數據通常Micaps4類格式數據文件的形式存在。Micaps4類格式數據文件包括3個維度的信息:時間、經度和緯度。根據氣象要素和查詢的時刻能夠快速獲取到相應的經緯數據。表2為網格數據的主鍵設計表,表3為數據的屬性列設計表。

表2 網格數據主鍵設計表

表3 網格數據屬性列設計表

續表3
(2) 柵格數據的設計 氣象數據中的柵格數據通常以二進制文件的形式存在,這類數據沒有對其中某一片段的單獨讀取需求,通常會讀取整個文件進行解析。對于這類數據,每一行只有一個屬性列用來存放壓縮后的二進制文件數據,整個文件具有較高的壓縮比。由于每天產生的文件較多,較為適合壓縮后存儲在表格存儲上。表4為網格化數據的主鍵設計表,表中主鍵二為兼容Micaps 4數據格式增加的一列主鍵,無實際意義,可以恒為0。表5為數據的屬性列設計表。

表4 柵格數據主鍵設計表

表5 柵格數據屬性列設計表
2.2.2 半/非結構化數據的分塊與壓縮技術
半/非結構化數據以網格數據或柵格數據為主,可對數據進行分塊與壓縮進行存儲。NoSQL對象存儲一般采用面向列的存儲方式,其存儲結構保證了數據表列的擴展性及I/O的高吞吐量,避免了表結構改變帶來的維護壓力,有效提高了數據分析的吞吐性能。
基于半/非結構化氣象數據的特點,對屬性列的數據進行一定比例的行列切分。切分規則如下:按照行切分成M份,按照列切分成N份,即將數據切分成M×N個方格。假設數據的latitude_point=X,longitude_point =Y,我們使切分后的方格rowsCount=X/M+1, colsCount=Y/N+1,切分后屬性列data擴展為M×N個屬性列,如表6所示。

表6 屬性列數據的分塊

為了提高數據的存儲、傳輸和使用效率,降低數據維護的成本,特別是對數據量龐大、時間序列長的氣象數據,根據氣象數據類型的不同選擇不同的存儲系統。將使用頻率較高,數據生成時間與當前時次臨近的熱、溫數據存放在在NoSQL對象存儲中,如實時的格點數據、柵格數據等;將使用頻率較低,數據生成時間與當前時次間隔時間較長的冷數據存放在NoSQL文件存儲中,如歷史文件數據、長序列數據等;將關系型數據存放在關系結構型存儲中,如存儲文件元數據信息和離散站點數據等。熱、溫、冷數據之間的轉換策略遵循時間度及數據使用度的原則。各存儲系統之間數據的轉換如圖2所示。

圖2 熱、溫、冷數據之間的轉換
對結構化數據以及半/非結構化數據在云存儲平臺上的讀取效率進行測試。本文實驗采用的數據為雷達降水產品、風廓線雷達產品、循環同化10米風、5分鐘最大風場等半/非結構化數據,存儲類型選擇NoSQL數據庫;降水、溫度、風、能見度等結構化數據,存儲類型選擇分布式關系型數據庫。
半/非結構化數據測試,對網絡狀態相同情況下兩種數據環境中調用數據所耗的時間進行測試對比。場景1:將數據存儲在開放結構化數據服務(OTS)中,對數據進行調用,獲取數據傳輸到客戶端的時間。場景2:常規數據服務中對數據進行調用,獲取數據傳輸到客戶端的時間。測試結果如圖3所示。

圖3 常規數據服務與開放結構化數據服務性能測試結果對比圖
結構化數據測試,對網絡狀態相同情況下兩種數據環境中調用數據所耗的時間進行測試對比。場景1:將數據存儲在分布式關系型數據庫(RDS)中,對數據進行調用,獲取數據傳輸到客戶端的時間。場景2:利用SQL server對數據進行調用,獲取數據傳輸到客戶端的時間。測試結果如圖4所示。

圖4 SQL server數據庫與分布式關系型數據庫性能測試結果對比圖
結果顯示,借助云存儲平臺氣象數據的讀取性能有了一定的提高。其中NoSQL數據庫中數據讀取性能與常規數據服務中數據讀取性能做比較,性能上有了很大提高。分布式關系型數據庫中數據讀取性能比SQL server數據庫中數據讀取性能做比較,性能上也有提高,但提高幅度沒有前者大。
本文針對氣象數據的特點,對云數據存儲方法進行探索和研究,基于云分布式存儲技術設計了一套數據存儲方法實現氣象大數據的存儲。
(1) 根據氣象數據結構的不同分成結構化數據與半/非結構化數據,針對不同結構類型的數據選擇云存儲模型,結構化數據采用分布式關系型數據庫存儲,半/非結構化數據采用NoSQL數據庫存儲。
(2) 在對半/非結構化數據存儲設計中,對數據進行主鍵表及屬性表設計,并對屬性表中的數據進行分塊壓縮,提高數據的存儲讀取性能。
(3) 根據氣象數據時間度及數據使用度的不同,將數據分成熱、溫、冷三種類型的數據,并闡述了不同類型數據間的轉換規則。
實驗證明借助云存儲平臺,氣象數據的存儲讀取性能有了顯著的提高。本文對氣象數據的云存儲方法的設計思路是可行的, 為氣象數據的云化建設提供一定的借鑒和參考。