APP下载

面向物联网系统历史数据服务的设计与实现

2017-10-17张玉杰张婷婷

陕西科技大学学报 2017年5期
关键词:历史数据文档客户端

张玉杰, 张婷婷

(陕西科技大学 电气与信息工程学院, 陕西 西安 710021)

面向物联网系统历史数据服务的设计与实现

张玉杰, 张婷婷

(陕西科技大学 电气与信息工程学院, 陕西 西安 710021)

物联网系统中大量的用户终端及设备终端之间的信息交互会产生海量的异构数据流,数据中心需要及时分析和处理这些数据,选择对用户有用的数据进行存储,可以便于对设备的当前与历史状态进行查询,同时为设备的大数据服务提供数据基础.针对此问题,同时结合物联网系统异构型数据存储的特点和通信实时性、可靠性需求以及对不同终端的通用性,提出一种结合MongoDB数据库、RESTful Web Service、MQTT通信、JMS消息服务等技术的物联网系统历史数据的管理及存储系统架构,实现各设备节点历史数据的获取、选择性存储、删除及查询等功能,并可适用于不同设备终端.该系统架构经过长期测试,可实现物联网系统中各设备节点数据的获取和集中管理,并可有效提高数据库的存储效率及存储利用率.

物联网系统; 历史数据; 选择性存储; 集中管理

Abstract:The information exchange between a large number of user terminals and equipment terminals in the Internet of Things system will produce massive heterogeneous data streams.The data center needs to analyze and process these data in time and select the useful data for users to store,in order to facilitate the current and historical status of the equipment to query,and provide data base for equipment large data services.In view of this problem,a management and storage system architecture of historical data of Internet of Things System combined of MongoDB database,RESTful Web Service,MQTT communication,JMS message service was put forward to meet the characteristics of heterogeneous data storage system and the real-time communication,reliability requirements and the versatility of different terminals.For the result,the system can achieve the device node historical data acquisition,selective storage,delete and query functions,and can be applied to different equipment terminals.Through long-term testing,the system architecture can be achieved in the Internet of Things in the system node data acquisition and centralized management,and can effectively improve the database storage efficiency and storage utilization.

Keywords:IOT system; history data; selective storage; centralized management

0 引言

近年来,随着物联网技术的发展,互联设备的增多,对海量设备的历史数据进行集中存储与查询处理尤为重要.通过对海量设备历史数据的集中管理,一方面,用户可以直接获得任一设备的当前与历史状态,通过对群体数据进行分析,可以实现对复杂事件与规律的感知[1].另一方面,还使得物物互联、基于物的搜索引擎、采样数据的统计分析与数据挖掘[2]等成为可能.然而物联网系统中大量的用户终端及设备终端之间的信息交互会产生海量的异构数据流,使得数据规模呈爆发式增长态势[3].因此数据中心需要及时地分析和处理这些数据,选择对用户有用的数据进行存储,进而满足用户对海量设备历史数据的集中管理的需求.

同时物联网系统中各终端数据灵活多变,数据结构、数据类型呈多样化,数据的存储处理较为复杂;终端设备多样化,计算能力有限的设备在低带宽、不可靠的网络信道上远程通讯实时性差、可靠性差[4].基于此,提出一种结合RESTful Web Service、MongoDB数据库、MQTT通信、JMS消息服务等技术的物联网系统历史数据的管理及存储系统架构.该系统支持不同规模数据(实时的、历史性的)的信息处理,并具有通用性,可实现不同终端的接入及管理.

1 系统整体架构

系统由云平台、设备端和用户端三部分组成.设备端与云平台建立实时通信连接,将传感数据传输到云平台;云平台采用面向资源架构以统一资源描述的方式,并结合数据库,实现对用户和设备资源的注册、存储和管理.同时,云平台授权用户通过B/S或C/S架构实现对资源的访问和操作.系统的基本框架图如图1所示.

图1 系统基本框架图

根据功能需求,云平台主要包括API接口、数据存储、MQTT通信服务以及数据运算处理等模块,下面对云平台中各模块做详细介绍.

1.1 Restful API

根据物联网系统的需求,采用REST风格的Web服务封装用户、设备和数据管理的业务流程接口.REST(Representational State Transfer)是一种分布式软件架构风格,RESTful Web服务是使用HTTP和REST原理实现的Web服务.通常,RESTful Web服务应该定义以下方面:Web服务的基/根URI,支持MIME类型的响应数据(包括 JSON/XML/ATOM 等),以及服务支持的操作集合[5].

在RESTful架构中,建立一套友好的API函数,通过URL描述终端,以HTTP常用操作实现资源的CURD(增删改查)等功能,该系列API既可适应不同平台,具有跨平台、跨语言的优势[6].另外,本系统选用JSON型数据格式[7]实现数据的请求与响应,在不同终端接入云平台时,均需对数据格式进行解析和处理转化为JSON格式,以实现对不同终端的通用性.

1.2 MongoDB数据库

MongoDB 是一种文档型非关系型数据库,它不需要预先定义模式和数据库结构,支持的数据结构较为松散,适合物联网系统中海量的结构化和半结构化数据的存储[8].文档(document)是MongoDB的核心概念,由多个键及其相应的值有序地存放在一起组成.若干个文档便组成集合(collection),集合类似于关系型数据库中的表,可包括多个文档.多个集合可以组成一个数据库,一个 MongoDB的实例可以承载多个数据库,每个数据库之间可以是完全独立的[9].

1.3 MQTT通信

MQTT是基于TCP/IP的即时通讯协议,采用轻量级基于代理的发布/订阅式消息传输模式.MQTT协议具有以下特点:采用发布/订阅消息模式,提供一对多的消息发布,有效解除应用程序耦合;MQTT协议本身的开销很小,帧格式较为精简;具有心跳包机制,可维持与服务器的长连接;支持QoS服务,提供了三种消息发布服务质量[10].

以上MQTT协议的这些特性对计算能力有限,网络低带宽且不可靠的低端嵌入式硬件设备意义巨大,解决了物联网系统中传感设备和控制设备的远程通讯实时性差和可靠性差等关键问题.

1.4 JMS消息服务

JMS(Java Message Service,Java消息服务应用程序接口),是一个Java平台中关于面向消息中间件的API,能够通过消息收发服务从一个 JMS 客户机向另一个 JMS客户机发送消息.用于在两个应用程序之间,或分布式系统中创建、发送、接收和读取消息,进行异步通信[11].JMS应用由JMS提供者、JMS客户端、消息、受管理对象四部分组成,大部分消息传送产品都支持点对点或发布/订阅消息两种传送模式.

由于云平台需要完成各终端数据的接收、解析、存储、反馈等各种复杂操作,而对于一个云平台整体架构设计来说,每一个模块都有其特定的功能,为了协调各模块的工作,保障各模块间通信正常,需要通过消息队列的方式实现各模块间异步通信,保证云平台工作正常进行,同时提高数据的处理效率.在本系统中选用JSM服务器实现云平台各模块间消息传递及异步通信.

2 数据库模型设计

2.1 数据关系分析

为方便物联网系统中对用户和设备的管理,需对数据库中一些概念做明确的解释及规定.将物联网系统中的用户端的信息统称为用户;将设备端信息统称为设备;将某一个硬件系统或某一项目称为产品,产品是同一个硬件系统中所有设备的集合;将传感器采集的温度、湿度、光照、图像等实时数据的抽象描述称为设备的数据点[12],将采集到的数据点的数据称为历史数据.

在MongoDB数据库中建立用户(users)、产品(products)、设备(devices)、历史数据(datas)四个集合,四个集合是依次包含的关系,四个集合的关系结构图如图2所示.每个集合都有自己的主键,作为该集合的唯一标识,集合之间通过将父集合主键嵌入子集合的形式,来确定集合之间的包含关系.

图2 集合关系图

2.2 数据集合设计

通常情况下,MongoDB数据库具有以下设计原则:优先考虑内嵌文档,将子集合以数组形式嵌入父集合中;需要单独访问一个对象时,将父集合的objectId引入到子集合中[13].根据以上设计原则,结合各集合中文档的具体内容,设计各集合如表1所示.根据四个集合的关系,依次将父集合的标识存储在子集合中,便于对子集合的数据进行管理.

表1 数据库集合设计

3 历史数据服务的实现

在完成对用户、产品、设备的创建操作以后,本节就设备数据的采集、对数据点的历史数据进行选择性存储及用户端对历史数据的获取等过程进行方案设计.此部分工作涉及RESTful API、MongoDB数据库、MQTT服务器、JMS消息服务器等多项技术,系统框图如图3所示.

图3 历史数据服务框图

用户端通过访问API接口控制设备数据的保存、取消保存以及删除等操作,API接口将接收到的指令信息通过JMS消息服务器传递给JMS客户端,JMS客户端通过对消息类型进行解析,控制MQTT客户端对设备数据的订阅或取消订阅,同时,MQTT客户端将接收到的设备数据存储在数据库中.

3.1 创建数据点

在进行数据选择性存储之前,首先需要创建数据点,用于对历史数据的过滤和筛选.用户端访问"创建数据点"的URL,通过POST方法将数据点信息发送给云平台.云平台以产品标识productId及设备mac地址为条件,在数据库中的设备集合devices中查询到相应的设备,并添加该数据点信息,包括数据点名称nodeName、类型nodeType,默认数据存储状态为false.数据点成功创建后,将在数据库中生成的数据点唯一标识nodeId返回给用户.

3.2 设置数据点存储状态

用户根据系统需求,设置某个数据点的存储属性,实现对某个数据点历史数据的选择性存储.云平台通过产品标识productId、设备mac地址及数据点标识nodeId为查询条件,在数据库devices集合中查找到相应的数据点信息,并修改数据点的存储Store属性.

通过发布/订阅消息传送方式,建立JMS客户端将产品标识productId、设备mac地址、数据点标识nodeId以及相应的历史数据存储状态(store/unstore)通过JMS服务器传递至JMS客户端.JMS客户端通过对消息进行解析,控制MQTT客户端订阅或取消订阅MQTT服务器中设备端发布的数据点的数据信息.

2.1 过表达B7-H3对乳腺癌细胞活力的影响 将转染了空载体和B7-H3真核表达载体的细胞接种于96孔板中,分别于培养不同时间后用MTT法检测细胞的活力,过表达B7-H3后明显抑制了MDA-MB-231细胞的活力。见图1。

3.3 存储历史数据

为提高数据库的存储利用率,将MQTT客户端接收到的设备端的数据以内嵌文档的形式存储在历史数据(datas)集合中,但由于MongoDB对文档的最大限制为16 M,所以在数据存储时应注意由于文档超限而引起数据库存储故障,因而在数据存储前应对已经存储的历史数据集合进行一些集合长度判断和处理,数据存储过程的流程图如图4所示.

图4 历史数据存储过程流程图

在数据处理过程中,以数据点名称nodeName为条件对MQTT客户端接收到的消息进行筛选.经过长期测试,设置历史数据文档中内嵌文档最大长度为10 000.为提高数据集合的遍历效率,在datas集合中添加count参数,每插入一条数据只需将count值加1,插入数据前判断count值即可.避免采用查询数组的长度的方式,造成MongoDB读写频繁而锁死[15].

3.4 删除历史数据

在执行“删除设备”、“删除产品”或“删除数据点”的命令时,除了在数据库中进行相应的操作外,还需要取消MQTT客户端对设备端数据的订阅,同时删除其相对应的历史数据记录.

通过发布/订阅消息传送方式,建立JMS客户端将产品标识productId、设备mac地址、数据点标识nodeId以及删除操作(delete)通过JMS服务器传递至JMS客户端.JMS客户端控制MQTT客户端取消订阅设备端发布的数据点的数据信息.

在删除历史数据时,在历史数据集合datas中以数据点标识nodeId为查询条件,将其相对应的历史数据记录删除.

3.5 查看历史数据

用户端通过访问“查询历史数据”的API接口将数据点标识nodeId发送到云平台,云平台在历史数据集合中以nodeId作为查询条件,查询到符合条件的历史数据,经过整合后以数组形式反馈给用户端.用户端可以用图表形式整合历史数据,观察数据的走向趋势,并可根据历史数据进行专家系统诊断,发现设备的一些潜在问题等.

4 系统测试

以阿里云服务器为载体,搭建系统测试平台.首先在云服务器上搭建Apache Tomcat服务器(HTTP服务器)、MongoDB数据库、Apache ActiveMQ服务器(JMS服务器)、Apache Apollo服务器(MQTT服务器)[16],然后将编译好的程序部署在云平台上.API接口程序测试利用火狐浏览器的HttpRequester工具,数据库测试采用数据库可视化工具Robomongo,采用MQTT客户端web版测试工具模拟硬件设备,向云服务器发送数据.

4.1 数据选择性存储测试

如图5(a)所示,以“演示设备”中三个数据点temp、hum、light为例,测试数据的选择性存储实现,将temp和light数据点的存储状态设为true(存储),hum数据点的存储状态设置为false(不存储).

如图5(b)所示,通过MQTT客户端测试工具上传temp、hum和light三个数据点的数据值,图5(c)所示历史数据集合(datas)中由数据点标识(nodeId)对比可看出,temp和light的历史数据保存下来,且格子存放在不同文档中,而hum数据点的历史数据未保存.

(a)数据点存储状态设置

(b)MQTT客户端发布数据

(c)历史数据集合存储结果图5 数据选择性存储测试

4.2 数据存储效率测试

以“演示设备”中数据点temp为例,如图6所示,将MQTT客户端接收到数据的时间及数据成功存储在历史数据集合中的时间输出,通过两个时间的时间差为测试标准,分别测试当数据点temp中历史数据的条数为0条、100条、1 000条、5 000条、9 999条时所用的时间进行对比.在此基础上,在“演示设备”中创建10个数据点,并将其存储状态都设为true,采用MQTT客户端测试工具同时上传10个数据点的数据,查看上述数据存储时间变化趋势.如表2所示,当数据增多时,数据存储所用时间呈增长趋势;且随着数据点增多,数据存储时间也增加,但总体变化较小,维持在10 ms到25 ms之内.

图6 数据处理时间输出

已插入内嵌文档个数1个数据点所用时间/ms10个数据点所用时间/ms010151001117100014185000172199992125

4.3 数据库存储利用率测试

本系统历史数据的存储采用内嵌文档的形式,图7(a)、(b)分别为内嵌文档形式存储10 000条历史数据及不使用内嵌文档存储的形式数据库内存大小的对比.由图7可得,使用内嵌文档数据集合内存为1 048 560 byte,而不使用内嵌文档数据集合内存为2 400 000 byte,使用内嵌文档形式存储比不使用内嵌文档存储数据库内存节省56.31%,因此利用内嵌文档存储方式可增加数据库存储利用率.

(a)使用内嵌文档存储

(b)不使用内嵌文档存储图7 数据库存储利用率测试

5 结论

本文结合物联网系统异构型数据存储和通信实时性、可靠性需求,提出一种物联网系统历史数据的管理及存储系统架构.该架构通过RESTful Web Service、MongoDB数据库、JMS消息服务器、MQTT通信等技术实现不同设备节点中,不同数据点的历史数据的选择性存储,通过设置可实现历史数据的有效感知,避免物联网系统中海量数据的冗余.同时利用内嵌文档形式存储历史数据,有效地提高了数据库的存储利用率,除此之外还实现了对历史数据的删除及查询等功能.该架构支持物联网系统中不同规模包括实时的和历史性的数据信息处理及管理功能,并具有通用性,实现不同终端的接入及管理,可广泛应用于不同行业物联网应用中.

[1] 丁治明,高 需.面向物联网海量传感器采样数据管理的数据库集群系统框架[J].计算机学报,2012,35(6):1 175-1 182.

[2] Jeffrey Dean,Sanjay Ghemawat.MapReduce:Simplified data processing on large clusters[J].OSDI,2008,51(1):107-113.

[3] 于宏文.智能电网调度控制系统中历史数据服务优化方案[J].电力系统自动化,2016,40(19):113-117.

[4] 东 辉.物联网通信技术的发展现状及趋势综述[J].通信技术,2014,47(11):1 233-1 239.

[5] 章武媚.基于RESTful Web技术的资源管理系统设计与实现[J].计算机应用与软件,2014,31(5):23-28.

[6] 左文娟,张秋菊.基于REST物联网监控系统设计[J].计算机工程与设计,2016,37(1):21-25.

[7] 龚建华.JSON格式数据在Web开发中的应用[J].办公自动化应用,2013(20):46-48.

[8] 钟 麟,员建厦.一种基于 MongoDB 的大数据管理架构[J].计算机与网络,2016(5):62-74.

[9] Ktistina Cbodorow.MongoDB权威指南[M].程显峰.北京:人民邮电出版社,2011.

[10] 张亚慧.物联网环境下轻量级发布订阅系统的设计与实现[D].北京:北京邮电大学,2015.

[11] Eric Jendrock.Java EE 7 权威指南[M].苏金国,江健.北京:机械工业出版社,2015.

[12] 陈文艺.基于MongoDB的物联网开放平台数据存储设计[J].西安邮电大学学报,2016,21(2):78-82.

[13] 李晓娟.物联网中海量数据管理技术研究[D].广州:广东工业大学,2015.

[14] 韩 陆.Java RESTful Web Service实战[M].北京:机械工业出版社,2014.

[15] David Hows.MongoDB大数据处理权威指南[M].2版.王肖峰.北京:清华大学出版社,2015.

[16] 黄骁飞.异构云平台性能监控与分析研究[J].计算机科学,2013,40(11):147-152.

【责任编辑:蒋亚儒】

Designandimplementationofhistoricaldataserviceforinternetofthingssystem

ZHANG Yu-jie, ZHANG Ting-ting

(College of Electrical and Information Engineering, Shaanxi University of Science & Technology, Xi′an 710021, China)

2017-07-28

陕西省科技厅科技计划项目(2014K07-17); 西安市科技计划项目(CXY1436(1))

张玉杰(1966-),男,陕西武功人,教授,硕士生导师,研究方向:信息采集与处理、模式识别、嵌入式系统开发

2096-398X(2017)05-0178-06

TP311.11

A

猜你喜欢

历史数据文档客户端
浅谈Matlab与Word文档的应用接口
基于设备PF性能曲线和设备历史数据实现CBM的一个应用模型探讨
基于故障历史数据和BP神经网络的接地选线方案研究
有人一声不吭向你扔了个文档
如何看待传统媒体新闻客户端的“断舍离”?
县级台在突发事件报道中如何应用手机客户端
孵化垂直频道:新闻客户端新策略
基于Hadoop技术实现银行历史数据线上化研究
用好细节材料 提高课堂实效
基于RI码计算的Word复制文档鉴别