摘 要:氣象監測技術的進步,氣象參數的種類和數量越來越豐富,其中很多氣象參數需要進行動態監測,海量的非結構型數據進行存儲和處理問題亟待解決。傳統的關系數據庫針對海量的數據工作效率低,不能滿足工作需求,而新興的NoSQL技術則在應對此類問題上具有很大的優勢。本文將以MongoDB為代表的NoSQL技術設計應用到氣象傳感器數據處理中,通過測試驗證了該技術在應對海量非結構型數據的存儲與處理時具有優良的性能。
關鍵詞:NoSQL技術;MongoDB;氣象傳感器數據;應用
云計算時代的來臨引領著分布式非關系型數據存儲技術的快速發展,該技術對于海量數據具有很強的讀寫性能。NoSQL技術由于不需要為存儲數據建立字段,因此可隨時存儲各種格式的數據,數據模型靈活。面向文檔的MongoDB,數據結構松散,可對海量且復雜的數據類型進行存儲,并可進行快速查詢。在當今的氣象參數監測中,監測獲得的氣象參數種類復雜,數據量大,且數據之間的一致性較弱,而且在數據管理中還要求具有一定的擴展性,獲取數據也需要方便快捷。這些問題MongoDB技術均可有效應對,因此本文將MongoDB應用到氣象傳感器數據的處理中,以探究其性能。
1 NoSQL與MongoDB概述
1.1 NoSQL
NoSQL即非關系型數據庫系統,它包括四種類型:鍵值存儲(Keyvalue)、面向文檔(DocumentOriented)、面向列表(ColumnFamily Databases)、面向圖論(GraphOriented Databases)。NoSQL與關系型數據庫的區別在于該系統不使用SQL查詢語言,在進行數據存儲時可不采用固定式的表格形式,通常也不使用SQL的JOIN操作,橫向可擴展性強。NoSQL在存儲和處理海量數據時性能表現優異。[1]因此,NoSQL擁有良好的應用前景。
1.2 MongoDB
MongoDB是NoSQL中的一種文檔型數據庫,采用C++語言編寫,性能優良,可擴展,開源。MongoDB同時具有關系型數據庫和非關系型數據庫的部分特點和功能,其所支持的數據結構類型松散,因此可有效解決類型復雜的數據存儲問題。MongoDB的查詢語言功能強大,它與面向對象的查詢語言相似,具有類似關系型數據庫單表查詢的大多數功能,并可對數據庫創建索引。MongoDB由三個部分構成,即數據庫、集合、文檔對象,由于集合中沒有行列以及關系的概念,因此表現出相對自由的模式。[2]
MongoDB的功能主要特點有:模式自由;支持查詢與動態查詢;可完全索引,包括內部對象;可復制與故障的恢復;面向集合進行存儲,對對象類型的數據更易存儲;采用二進制進行數據存儲,較大的存儲對象也同樣采用二進制;碎片自動處理,進而支持云計算層次擴展性;支持多種語言;通過網絡可以訪問。
2 MongoDB在氣象數據處理中的應用
2.1 插入數據
采用Python構建數據庫步驟如下所示:
client = MongoClient()
db = client.meteor_data
collection = db.res
mongo數據庫metor_data建立連接,并將集合res選中,需要注意的是,在此處并未真正創建集合,而是采用延時創建的方式,等有文檔插入時才建立相應的集合和數據庫。
下面列出了一條測量數據:
其中‘CH9表示通道9的測量數據,101721.321為氣象傳感器的所測得的氣壓值,每條的測量所得數據對應的通道數量可根據實際需要自行調整?!甌IME則表示數據的測定時間點。通過將數條測量數據作為文檔插入res中,進行數據存儲,使用python插入文檔的操作為:collection.insert_one(data),data所在位置替代要插入的各種類型的氣象要素,例如氣溫、氣壓、相對濕度、風向、風速、降水量、能見度、跑道視程、云底高等監測數據。插入后的文檔如下所示:
‘_id域是mongo自動添加,作為主鍵。
2.2 數據查詢
存儲的數據可以通過條件匹配或相等匹配快速查詢。采用相等匹配進行查詢的格式為:{
2.3 集合更新
采用python進行集合更新的方式有:update_one(),update_many(),更新操作是需要設定條件和對于的文檔要執行的動作,例如:result= collection.update_one({‘TIME:‘20180307 16:12:9},{“$set”:{“discription”:“measure resistance”}}),首先則匹配到時間域為‘20180307 16:12:9的數據,然后更新“discription”域的值為“measure resistance”,如果該域缺省,則會自動添加。運算符“$set”為設定域值,更新后的文檔為:
2.4 聚合
MongoDB具有聚合框架,包括過濾記錄($match)、解綁列表($unwind)、按照指定域聚合($group)等功能。聚合按照stage進行,用各階段構成的列表作為參數,格式為:db.collection.aggregate([
cursor= collection.aggregate([{“$match”:{“CH5”:None}},{“$group”:{“_id”:“$CH5”,“count”:{“$sum”:1}}}])
該聚合操作首先會匹配“CH5”域的缺省記錄,而后按照“CH5”域值進行分組,同時將“_id”作為鍵,對各組記錄的數量進行統計,聚合統計結果如圖所示:
3 結語
MongoDB作為面向文檔的存儲系統具有強大的功能,模式的高度自修提高了文檔的靈活度,通過簡單的擴展就可實現支持TB級數據。另外,插入數據、查詢數據、更新數據、聚合等的可操作性強,支持的計算機語言種類豐富。本文將MongoDB應用到氣象監測數據的處理中,滿足氣象數據處理工作的各種要求,提高了數據處理的存儲和處理的效率。
參考文獻:
[1]李紹俊,楊海軍,黃耀歡,等.基于NoSQL數據庫的空間大數據分布式存儲策略[J].武漢大學學報(信息科學版),2017,42(2):163169.
[2]鐘麟,員建廈.一種基于MongoDB的大數據管理架構[J].計算機與網絡,2016,42(5):6264.
作者簡介:王大冬(1984),男,漢族,本科,軟件工程師,從事氣象軟件數據處理和顯示方面的研究。