• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      MongoDB在氣象傳感器數據處理中的應用

      2016-01-12 07:59:59白長清劉敏
      軟件 2015年11期
      關鍵詞:海量數據

      白長清++劉敏

      摘 要:海量規(guī)模數據不斷涌現,對非結構型數據的存儲和處理需求日益增長,傳統(tǒng)的關系數據庫很難對其高效處理,NoSQL技術則能比較好的解決這類問題。本文將介紹NoSQL,MongoDB,以及MongoDB在處理海量氣象參數的傳感器數據時的應用。實踐證明,以MongoDB為代表的NoSQL數據庫在存儲和訪問海量的非結構化數據時,有著良好的性能。

      關鍵詞:NoSQL;MongoDB;海量數據;面向文檔

      中圖分類號:TP311

      文獻標識碼:A

      DOI: 10.3969/j.issn.1003-6970.2015.11.010

      0 引言

      隨著云計算時代的到來,web2.0的快速發(fā)展,非關系型、分布式數據存儲得到了快速的發(fā)展,它們具有非常高的讀寫性能,尤其在大數據量下。而且NoSQL具有靈活的數據模型,即無需事先為要存儲的數據建立字段,隨時可以存儲白定義的數據格式。在不太影響性能的情況下,就可以方便的實現高可用的架構。面向文檔的MongoDB,其數據結構非常松散,可以存儲比較復雜的數據類型,保證海量數據存儲的同時,具有良好的查詢性能,擁有廣泛應用。

      在本實驗室氣象局項目中,需要存儲、查詢大量氣象參數測量傳感器數據,每次測量的數據通道并不都是一致,即測量數據是弱一致性的,還要求保持可擴展性,并且能夠便捷的獲取數據,而MongoDB能很好的滿足這些需求,本文將以實驗室氣象參數測量傳感器數據的處理為背景,介紹MongoDB在實際生產中的運用。

      1 NoSQL

      1.1 概述

      NoSQL是對非關系型數據庫系統(tǒng)的總稱,意思是No SQL(沒有SQL語言)。它與關系型數據庫最重要的不同是:NoSQL不使用SQL作為查詢語言。其數據存儲可以不需要固定的表格模式,也經常會避免使用SQL的JOIN操作,一般具有水平可擴展的特征。在大量數據存取上具備關系型數據庫無法比擬的性能優(yōu)勢。NoSQL數據庫憑借著其非關系型、分布式、開源和橫向擴展等優(yōu)勢,被認為是下一代數據庫產品。

      1.2 NoSQL分類

      NoSQL可以大體上分為4個種類:Key-value(鍵值存儲)、Document-Oriented(面向文檔)、Column-Family Databases(面向表列)以及Graph-Oriented Databases(面向圖論)。下面就一覽這些類型的特性:

      鍵值數據庫:通過key快速查詢到其value,存儲并不關心值的格式,比如通過國際標準書號ISBN找一本書,在這里,ISBN是鍵,書籍的其他信息就是值。必須知道鍵才能查詢。

      文檔存儲數據庫:面向文檔數據庫會將數據以文檔的形式儲存。每個文檔都是白包含的數據單元,是一系列數據項的集合。每個數據項都有一個名稱與對應的值,值既可以是簡單的數據類型,如字符串、數字和日期等;也可以是復雜的類型,如有序列表和關聯對象。

      列式數據庫:也被稱為列式存儲或寬列存儲,對數據進行列式存儲。最大的特點是方便存儲結構化和半結構化數據,方便做數據壓縮,對針對某一列或者某幾列的查詢有非常大的10優(yōu)勢。

      圖型數據庫:圖型數據庫關注值與值之間的關系,用圖型的數學概念存儲數據。圖型數據庫用帶有點、邊緣和屬性的圖的結構表示和存儲數據。在圖型數據庫中,每一個元素都包含一個直接的指向它毗鄰元素的點,所以也就不需要索引查找。

      1.3 優(yōu)缺點

      NoSQL數據庫最大的優(yōu)點在于它的去中心化、可擴展、容錯能力等屬性。用NoSQL數據庫,你可以為每一個特殊的用例定制化你的數據管理解決方案。另外,大多數NoSQL產品都是輕量級的,因此花費比較少。自從NoSQL產品被設計用來滿足特殊的用例和解決特殊的問題,它的功能也就比大多數關系型數據庫少,因為后者要應用于更廣泛的領域。因此,NoSQL數據庫需要的代碼更少,這也是和復雜的關系型數據庫相比具備的一項優(yōu)勢。

      當然,NoSQL也有它的缺點。ACID協議是關系型數據庫的標準,但很多NoSQL數據庫做不到。如果ACID支持很關鍵,你必須要確定你選的NoSQL數據庫是否提供ACID。NoSQL數據庫的另一個缺點是不支持SQL語言。經過40多年的發(fā)展,SQL已經成為訪問數據的通用語言。一套數據庫系統(tǒng)不支持SQL語言就意味著要求開發(fā)者學習不同的訪問數據的語言。

      NoSQL數據庫在網頁擴展、大數據和分析部署等方面越來越流行。每一個種類的NoSQL數據庫都有適用的不同類型的應用程序和用例,這就涉及到一個NoSQL社區(qū)常用的一個話題,即多樣持久性,或者說根據數據庫處理應用程序需求的不同,使用不同的數據庫系統(tǒng),用于不同的應用程序和用例。因此,使用NoSQL最重要的是使用正確的數據庫,滿足具體的需求,哪怕是要引入一種新的數據庫系統(tǒng)。

      2 MongoDB

      2.1 簡述

      MongoDB是一個高性能,開源,可擴展,無模式的文檔型數據庫,由C++語言編寫。旨在為WEB應用提供可擴展的高性能數據存儲解決方案,是當前NoSql數據庫中比較熱門的一種。它是一個介于關系數據庫和非關系數據庫之間的產品,是非關系數據庫當中功能最豐富,最像關系數據庫的。支持的數據結構非常松散,是類似json的bson格式,因此可以存儲比較復雜的數據類型。Mongo最大的特點是他支持的查詢語言非常強大,其語法有點類似于面向對象的查詢語言,幾乎可以實現類似關系數據庫單表查詢的絕大部分功能,而且還支持對數據建立索引。

      傳統(tǒng)的關系數據庫一般由數據庫(database)、表(table)、記錄(record)三個層次概念組成,MongoDB是由數據庫(database)、集合(collection)、文檔對象(document)三個層次組成。集合對應于關系型數據庫里的表,但是集合中沒有列、行和關系概念,這體現了其模式自由的特點。

      它的特點是高性能、易部署、易使用,存儲數據非常方便。主要功能特性有:

      1)面向集合存儲,易存儲對象類型的數據。

      2)模式自由。

      3)支持動態(tài)查詢。

      4)支持完全索引,包含內部對象。

      5)支持查詢。

      6)支持復制和故障恢復。

      7)使用高效的二進制數據存儲,包括大型對象(如視頻等)。

      8)自動處理碎片,以支持云計算層次的擴展性。

      9)支持RUBY,PYTHON,JAVA,C++,PHP,C#等多種語言。

      10)文件存儲格式為BSON(一種JSON的擴展)。

      11)可通過網絡訪問。

      所謂“面向集合”(Collenction-Oriented),意思是數據被分組存儲在數據集中,被稱為一個集合(Collenction)。每個集合在數據庫中都有一個唯一的標識名,并且可以包含無限數目的文檔。集合的概念類似關系型數據庫(RDBMS)里的表(table),不同的是它不需要定義任何模式(schema)。

      模式自由(schema-free),意味著對于存儲在mongodb數據庫中的文件,我們不需要知道它的任何結構定義。如果需要的話,你完全可以把不同結構的文件存儲在同一個數據庫里。

      存儲在集合中的文檔,被存儲為鍵一值對的形式。鍵用于唯一標識一個文檔,為字符串類型,而值則可以是各種復雜的文件類型。我們稱這種存儲形式為BSON(Binary JSON)。

      2.2 Mongodb安裝配置

      根據自己的實際系統(tǒng)環(huán)境,下載所要的文件,我的是RHEL 7 Linux 64-bit。下載:

      # wget https: //fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhe170-3.0.7.tgz解壓至/usr/local/mongodb/,創(chuàng)建數據目錄/data/mongodb,創(chuàng)建配置文件mongodb.conf。配置文件mongodb.conf如下,其中dbpath指定數據庫目錄,logpath指定日志路徑,logappend=true使日志累加,fork=true使MongoDB以守護進程運行,port指定端口號,默認27017。

      dbpath=/data/mongo/

      logpath=/data/mongo/mongo.log

      logappend=true

      fork=true

      port=27017

      MongoDB有兩種啟動方式,配置文件啟動和參數啟動,如下:

      1.配置文件方式啟動mongo

      #/usr/local/mongodb/bin/mongod -f/data/mongo/mongodb.conf

      2.參數啟動mongo

      /usr/local/mongodb/bin/mongod -logpath /data/mongo/mongo.log -logappend -fork -dbpath /data/mongo/-port 27017

      3.設置開機啟動:

      #echo“/usr/local/mongodb/bin/mongod—f/data/mongo/mongodb.conf”>>/etc/rc.local

      3 氣象傳感器數據在mongo系統(tǒng)中的存儲

      3.1 數據的插入

      使用Python創(chuàng)建數據庫的方法如下:

      client=MongoClient()

      db=client.meteor_data

      collection=db.res

      連接到mongo數據庫metor_data,并選中集合(cellection) res,注意:這里并沒有創(chuàng)建集合,mongo采用延時創(chuàng)建的方法,當有document插入時才真正創(chuàng)建相應的數據庫和集合。

      如下所示是一條測量數據,‘CHIO代表通道10的測量數據,102941.437對應氣象參數的傳感器測量值。每條測量數據中通道數并不固定,可以根據測量需要選擇?!甌IME則代表測量的時刻。

      {u'CHl0':102941.437,u'TIME':'2015-09-22 20:33: 10',u'CH5': 918.236714, u'CH6':270.424495,u'CH7': 328.123456, u'CH8':465.627787,u'CH9':386.63469}

      我們通過把多條測量數據作為document插入集合res中,來存儲測量數據,python插入document的方法為:collection.insert_one(data),其中date代表要插入的測量數據。插入后的document如下。其中,'_id'域為mongo為我們自動添加的,作為主鍵。

      {u'CHl0':102941.437,u'TIME':u'2015-09-22 20:33:10', u'CH5': 918.236714, u'CH6':270.424495, u'CH7':328.123456,u'CH8':465.627787,u'CH9':386.63469, u'_id': Objectld('563afebee138233a73b2at20')}

      3.2 數據的查詢

      測量數據存儲后,我們可以很方便的去查詢,有相等匹配(equality matching)和條件匹配。相等匹配格式為:{, ,…},如cursor=collection.find({'TIME':'2015-09-2220:33:10'}),會查詢出TIME域為‘2015-09-22 20:33:10的document。而條件匹配會用到比較運算符,比較運算符主要有“$lt”、“$gt”、“$in”等。條件匹配格式為:{:{}},如cursor=collection.find({‘CH1:{“$lt”:4633}}),會查找出‘CH1域值小于4633的記錄。

      3.3 更新

      集合更新的python接口有update_one()和update_many(),更新時需指定過濾條件和匹配的document要執(zhí)行的動作。如result=collection.update_one({'TIME': '2015-09-22 20:33:10'},{“$set”:{"discription":“measure resistance”}}),會先匹配‘TIME域為‘2015-09-22 20: 33: 10的記錄,然后更新其”discription”域的值為”measure resistance”,若沒有該域,則會添加該域。其中,”$set”為設定域值運算符,其他更新運算符:”$inc”為指定域的值增加指定值,”$rename”用于重命名域名,”$push”向域值列表中添加元素。更新后的document為:

      {u'CH10':102941.437, u'TIME': u'2015-09-22 20: 33: 10,u'discription': u'measure resistance',u'CH5': 918.236714, u'CH6': 270.424495, u'CH7':328.123456, u'CH8': 465.627787, u'CH9': 386.63469,u'_id':Objectld('563afebee138233a73b2af20')

      3.4 聚合

      MongoDB提供了一個聚合框架,其中包括常用功能,比如”$match”用于過濾記錄、“$unwind”用于解綁列表、“$group”用于根據指定域聚合。其聚合是基于階段( stage)來進行的,其參數為一個個階段組成的列表,格式如下:db.collection.aggregate([,,…]),各階段通過管道順序執(zhí)行,以此實現輸入數據的過濾、分組、求和等聚合操作。通過聚合框架,還可對返回的結果進行處理,實現一些特殊需求,例如別名顯示、增加字段、提取子字段等。例如在處理測量數據時需要統(tǒng)計某通道未被測量的次數,方法如下:

      cursor=collection.aggregate(

      [

      {“$match”:{“CH5”:None}},

      {“$group”:{“_id”:“$CH5”,“count”:{“$sum”:1}}}

      ]

      此聚合首先在第一階段匹配”CH5”域不存在的記錄,第二階段以”CH5”域的值分組,并以“id”作為key,統(tǒng)計各組記錄的數量,由于第一階段只匹配”CH5”域不存在的組,所以該聚合統(tǒng)計的是集合中”CH5”域不存在的記錄數。結果如下:

      然而更多的高級聚合函數,比如sum、average、max、min、variance方差)和standard deviation(標準差)等需要通過MapReduce來實現。

      4 結論

      MongoDB提供了面向文檔的存儲結構,其模式十分自由,這很大程度增加了document的靈活性,可以很容易擴展支持TB級數據。同時其插入、查詢、更新、聚合等操作也十分方便簡易,支持C++、Python、Java等多種語言。本文結合實驗室氣象局研究項目,介紹了MongoDB的安裝,以及它在氣象傳感器數據存儲時的應用,項目實踐證明了其靈活、易用等優(yōu)點。相信在不久的將來以MongoDB為代表的Nosql將有更加廣泛的應用。

      猜你喜歡
      海量數據
      云存儲服務端海量數據安全存儲的加密解決方案
      基于HADOOP集群的數據采集和清洗
      軟件工程(2016年11期)2017-01-17 17:05:51
      商業(yè)銀行海量金融數據分析中數據分析技術的實踐探究
      經營者(2016年19期)2016-12-23 16:04:07
      海量數據庫的設計與優(yōu)化
      基于hadoop平臺海量數據的快速查詢與實現
      基于Hadoop的海量電信數據云計算平臺研究
      一種基于HBase的交通旅行時間計算方法
      軟件導刊(2015年8期)2015-09-18 12:37:29
      基于MapReduce的海量數據動態(tài)裝箱算法研究
      軟件導刊(2015年7期)2015-08-06 13:17:16
      分析面向云計算的數據安全保護關鍵技術
      基于遺傳算法的多中心海量數據布局研究
      軟件導刊(2015年1期)2015-03-02 12:11:17
      灵璧县| 怀集县| 普洱| 内江市| 陆川县| 平谷区| 临夏市| 金寨县| 石河子市| 台山市| 广灵县| 古丈县| 天长市| 马鞍山市| 贵州省| 竹山县| 当雄县| 娄底市| 长寿区| 分宜县| 娱乐| 万荣县| 白水县| 永德县| 乌鲁木齐市| 林甸县| 洛南县| 汉源县| 阿克陶县| 寻乌县| 长沙市| 治县。| 白河县| 兰州市| 古蔺县| 鹰潭市| 儋州市| 宿迁市| 连平县| 浮梁县| 山西省|