摘 要:气象监测技术的进步,气象参数的种类和数量越来越丰富,其中很多气象参数需要进行动态监测,海量的非结构型数据进行存储和处理问题亟待解决。传统的关系数据库针对海量的数据工作效率低,不能满足工作需求,而新兴的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为气象传感器的所测得的气压值,每条的测量所得数据对应的通道数量可根据实际需要自行调整。‘TIME则表示数据的测定时间点。通过将数条测量数据作为文档插入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),男,汉族,本科,软件工程师,从事气象软件数据处理和显示方面的研究。