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