您的当前位置:首页正文

MongoDB在气象传感器数据处理中的应用

2022-10-12 来源:易榕旅网
MongoDB在气象传感器数据处理中的应用

摘 要:海量规模数据不断涌现,对非结构型数据的存储和处理需求日益增长,传统的关系数据库很难对其高效处理,NoSQL技术则能比较好的解决这类问题。本文将介绍NoSQL,MongoDB,以及MongoDB在处理海量气象参数的传感器数据时的应用。实践证明,以MongoDB为代表的NoSQL数据库在存储和访问海量的非结构化数据时,有着良好的性能。

关键词:NoSQL;MongoDB;海量数据;面向文档 中图分类号:TP311 文献标识码:A

DOI: 10.3969/j.issn.1003-6970.2015.11.010 0 引言

随着云计算时代的到来,web2.0的快速发展,非关系型、分布式数据存储得到了快速的发展,它们具有非常高的读写性能,尤其在大数据量下。而且NoSQL具有灵活的数据模型,即无需事先为要存储的数据建立字段,随时可以存储白定义的数据格式。在不太影响性能的情况下,就可以方便的实现高可用的架构。面向文档的MongoDB,其数据结构非常松散,可以存储比较复杂的数据类型,保证海量数据存储的同时,

具有良好的查询性能,拥有广泛应用。

在本实验室气象局项目中,需要存储、查询大量气象参数测量传感器数据,每次测量的数据通道并不都是一致,即测量数据是弱一致性的,还要求保持可扩展性,并且能够便捷的获取数据,而MongoDB能很好的满足这些需求,本文将以实验室气象参数测量传感器数据的处理为背景,介绍MongoDB在实际生产中的运用。 1 NoSQL 1.1 概述

NoSQL是对非关系型数据库系统的总称,意思是No SQL(没有SQL语言)。它与关系型数据库最重要的不同是:NoSQL不使用SQL作为查询语言。其数据存储可以不需要固定的表格模式,也经常会避免使用SQL的JOIN操作,一般具有水平可扩展的特征。在大量数据存取上具备关系型数据库无法比拟的性能优势。NoSQL数据库凭借着其非关系型、分布式、开源和横向扩展等优势,被认为是下一代数据库产品。 1.2 NoSQL分类

NoSQL可以大体上分为4个种类:Key-value(键值存储)、Document-Oriented(面向文档)、Column-Family Databases(面向表列)以及Graph-Oriented Databases(面向图论)。下面就一览这些类型的特性:

键值数据库:通过key快速查询到其value,存储并不关

心值的格式,比如通过国际标准书号ISBN找一本书,在这里,ISBN是键,书籍的其他信息就是值。必须知道键才能查询。 文档存储数据库:面向文档数据库会将数据以文档的形式储存。每个文档都是白包含的数据单元,是一系列数据项的集合。每个数据项都有一个名称与对应的值,值既可以是简单的数据类型,如字符串、数字和日期等;也可以是复杂的类型,如有序列表和关联对象。

列式数据库:也被称为列式存储或宽列存储,对数据进行列式存储。最大的特点是方便存储结构化和半结构化数据,方便做数据压缩,对针对某一列或者某几列的查询有非常大的10优势。

图型数据库:图型数据库关注值与值之间的关系,用图型的数学概念存储数据。图型数据库用带有点、边缘和属性的图的结构表示和存储数据。在图型数据库中,每一个元素都包含一个直接的指向它毗邻元素的点,所以也就不需要索引查找。 1.3 优缺点

NoSQL数据库最大的优点在于它的去中心化、可扩展、容错能力等属性。用NoSQL数据库,你可以为每一个特殊的用例定制化你的数据管理解决方案。另外,大多数NoSQL产品都是轻量级的,因此花费比较少。自从NoSQL产品被设计用来满足特殊的用例和解决特殊的问题,它的功能也就比大

多数关系型数据库少,因为后者要应用于更广泛的领域。因此,NoSQL数据库需要的代码更少,这也是和复杂的关系型数据库相比具备的一项优势。

当然,NoSQL也有它的缺点。ACID协议是关系型数据库的标准,但很多NoSQL数据库做不到。如果ACID支持很关键,你必须要确定你选的NoSQL数据库是否提供ACID。NoSQL数据库的另一个缺点是不支持SQL语言。经过40多年的发展,SQL已经成为访问数据的通用语言。一套数据库系统不支持SQL语言就意味着要求开发者学习不同的访问数据的语言。

NoSQL数据库在网页扩展、大数据和分析部署等方面越来越流行。每一个种类的NoSQL数据库都有适用的不同类型的应用程序和用例,这就涉及到一个NoSQL社区常用的一个话题,即多样持久性,或者说根据数据库处理应用程序需求的不同,使用不同的数据库系统,用于不同的应用程序和用例。因此,使用NoSQL最重要的是使用正确的数据库,满足具体的需求,哪怕是要引入一种新的数据库系统。 2 MongoDB 2.1 简述

MongoDB是一个高性能,开源,可扩展,无模式的文档型数据库,由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案,是当前NoSql数据库中比较热门

的一种。它是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

传统的关系数据库一般由数据库(database)、表(table)、记录(record)三个层次概念组成,MongoDB是由数据库(database)、集合(collection)、文档对象(document)三个层次组成。集合对应于关系型数据库里的表,但是集合中没有列、行和关系概念,这体现了其模式自由的特点。 3.3 更新

集合更新的python接口有update_one()和update_many(),更新时需指定过滤条件和匹配的document要执行的动作。如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([,,…]),各阶段通过管道顺序执行,以此实现输入数据的过滤、分组、求和等聚合操作。通过聚合框架,还可对返回的结果进行处理,实现一些特殊需求,例如别名显示、增加字段、提取子字段等。例如在处理测量数据时需要统计某通道未被测量的次数,方法如下: cursor=collection.aggregate( [

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

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

此聚合首先在第一阶段匹配”CH5”域不存在的记录,第二阶段以”CH5”域的值分组,并以“id”作为key,统计各组记录的数量,由于第一阶段只匹配”CH5”域不存在的组,所以该聚合统计的是集合中”CH5”域不存在的记录数。结果如下:

然而更多的高级聚合函数,比如sum、average、max、min、variance方差)和standard deviation(标准差)等需要通过MapReduce来实现。 4 结论

MongoDB提供了面向文档的存储结构,其模式十分自由,这很大程度增加了document的灵活性,可以很容易扩展支持TB级数据。同时其插入、查询、更新、聚合等操作也十分方便简易,支持C++、Python、Java等多种语言。本文结合实验室气象局研究项目,介绍了MongoDB的安装,以及它在气象传感器数据存储时的应用,项目实践证明了其灵活、易用等优点。相信在不久的将来以MongoDB为代表的Nosql将有更加广泛的应用。

因篇幅问题不能全部显示,请点此查看更多更全内容