ExtremeDB在实时多传感器数据采集系统中的应用

2010-09-08 02:13松,王
关键词:线程内存调度

韩 松,王 威

(海军工程大学管理工程系,湖北武汉 430033)

实时多传感器数据采集系统对数据有着实时性强、准确性高的要求。如何在大量采样数据接收的情况下,解决系统处理数据的有效性和快速性是该研究的热点也是难点问题。

我国目前对该问题正处在研究阶段,主要的研究文献见参考文献[1-2]。在该文献中,作者主要将ExtremeDB数据库分别应用在故障子系统和现场控制站中,有效提高了系统的使用效率。笔者借鉴其中的一些数据库设计的思想,并结合实际情况,将ExtremeDB应用在实时多传感器数据采集系统中,提高了数据实时处理的速度,增强了系统的快速反应能力。通过与传统数据库接口测试对比,证明ExtremeDB数据库在数据的处理方面具有较大的优势。缩短了系统的开发周期,增强了系统的稳定性。

1 ExtremeDB实时内存数据库

实时数据库系统的主要目标是使尽量多的事务在规定的时间要求内完成,而不是公平地分配系统以使所有的事项都得到执行。由于主要目标的不同,一方面是所有的商用数据库管理系统不能满足实时领域的要求,另一方面又要求人们重新研究数据库的实时实现策略,以保证其主要目标的实现。为了满足上述要求,McObject公司开发了内存嵌入式数据库系统ExtremeDB,该系统适用于各种嵌入式系统和其他需要高性能、小尺寸、紧密存储、零内存分配的应用领域[3-4]。

2 实时数据采集系统构建

在实时数据采集系统的构建中,采用面向对象分析(OOA)的方法进行构建[5-7]。在整个大的系统中按功能划分为3个子系统,即主控系统、数据调度系统和显控系统。由于网络架构的需求,3个子系统分别运行在不同的计算机主机中。主控系统主要负责系统的整体运行情况,如设备参数的调整、系统运行状态检测、数据格式转换、设备状态检测、整体运行方案的选择和根据请求启动其他需要的程序等。显控程序为系统的前台,主要将传输来的数据进行显示。数据调度系统主要负责采集数据的缓存和处理。系统的模块及模块之间的通信如图1所示。

图1 系统的模块及模块之间的通信

由图1可以看出显控模块发出数据操作请求,主控模块收到请求后启动数据调度模块,数据调度模块通过内部各线程功能模块完成数据的计算和处理,并通过组播将处理后的数据传输到显示控制端。

3 需求分析

从实时数据采集系统的总体结构的3个子系统的分析中可知,数据调度模块是主控程序的执行者和显示控制程序的输送者,直接面向数据。

数据调度系统负责接收数据并对采集数据进行处理后发送到显示控制端,其内部包含多个处理数据的线程模块[8],如表1所示。

表1 数据调度系统各线程模块

在数据调度系统的设计中,因实时采集的数据具有变化快、突发性强的特点,实时数据采集系统应具有很高的实时性,应能对采集来的数据进行快速处理,这样才能保证数据的实时性和准确性。因此只有将数据放在内存中减少数据的I/O操作,提高数据的读取速度才能满足要求。ExtremeDB具有尺寸小、微秒级的处理等特点,完全可以满足数据调度系统的要求。

4 ExtremeDB在数据采集系统的应用

(1)对象的抽象分类。实时数据采集系统的相关数据处理模块主要处理两种类型的数据,一类是采样数据的基本信息,一类是采样的具体数据。采样数据的基本信息主要包括采样点控制器的编号、通道序号、包序号、传感器类型和数据的起始时间等。采样的具体数据就是采集得到的波形值。系统应能保存从当前时间开始的几个小时以内的信息,且应能把每个具体的波形值联系到其所对应的基本参数信息上。当数据处理完毕后,新的数据到来时,系统应能及时更新数据库中的采样数据。数据必须被足够快地写入数据库以便能跟上采集速度。系统接收的每个数据对象都会被分配一个传感器唯一标识符。

遵循上述数据库设计方法,可以引入两个类来反映现实生活中的对象,如波形基本信息类和波形具体数据类。波形基本信息必须包括点控制器编号和起始时间等字段。

(2)形式化描述数据。进行分类后就要形式化描述数据,在数据调度系统的设计中主要有2张表。数据库中的表1是关于各个监控点的每时每刻的具体数据值。数据库中的表2是各个监控点基本信息说明。数据库表1的具体数值说明如表2所示。数据库表2的测控点信息说明如表3所示。

表2 数据库表1的具体数值说明

表3 数据库表2的测控点信息说明

打开文本编辑器按照数据库的语法模式来创建数据库定义文件。保存为Text.mco文件格式。Text.mco文件的代码如下:

此段代码说明数据库表1在senid和time上建立一个组合索引,按senid的时间把value列出来;数据库表2表格可以用senid作为关键字建立两个表之间的联系。数据库表2采用唯一树索引并以senid作为关键字进行查找。

编辑完代码内容以后,就需要进行编译从而形成应用程序需要的接口函数,用hostin目录里的mcocomp.exe程序在DOS命令行模式下将test.mco编译生成,设置调用mcocomp.exe的执行路径为:

进入到保存test.mco文件的目录下执行命令mcocomp test.mco。其窗口界面图如图2所示。具体编译过程界面图如图3所示。通过编译将生成.h和.c文件,如图4所示。

图2 test.mco文件的窗口界面图

图4中的test.mco是保存的编译文件,sensor.c和sensor.h是数据库的接口文件。文件的名字和文本编译中声明的数据库名字相同。

5 ExtremeDB内存数据与传统数据库对比

图3 用mcocomp.exe编译test.mco文件界面图

图4 通过编译将生成.h和.c文件

该系统中有一个模块是将采集的数据存储到硬盘,硬盘数据库使用MySql 3.23.54。在用ExtremeDB进行开发后,主要对开发结果进行对比。建立4个线程进行数据库的查询、删除、插入和修改,每个线程单独链接sql service。选用的数据库为MySql 3.23.54,数据库引擎为InnorDB。对10万条记录进行测试。表4为数据库表的键值以及索引占空间的大小。

表4 数据库表键值及占硬盘(内存)空间

测试使用的是MySql缺省参数,用MySql和ExtremeDB提供的API,采用C语言编写测试程序[9]。测试程序为:

ExtremeDB与MySql数据库对比如表5所示。

表5 ExtremeDB与MySql数据库对比

通过数据库对比测试,可以看出ExtremeDB数据库的性能要远远优于MySql。

6 结论

通过ExtremeDB内存数据库和硬盘数据库的对比可以看出ExtremeDB在各个方面都有着卓越的表现。由于其代码体积小易于维护、占用空间少、提高资源利用率等,可有效缩短系统开发周期,提高系统的运算效率。在充分借鉴前人设计ExtremeDB内存数据库思想的基础上,通过实际的操作流程、更加详细的数据库设计和应用,展示了ExtremeDB内存数据库在实时数据采集系统中的开发过程。使用ExtremeDB可提高系统快速处理数据的能力,但由于采集数据量大,系统的数据处理各模块和采集模块的时间上还不是很统一,今后将在这方面进行进一步研究。

[1]SCOTT R L.C++技巧与使用[M].北京:航天航空大学出版社,1995:69-89.

[2]汪翔,袁辉.Visual C++实践与提高:网络编程[M].北京:中国铁道出版社,2001:167-186.

[3]李东江,聂学斌.内存数据库extremeDB在故障信息子站系统的应用研究[J].计算机与信息技术,2008(2):35-37.

[4]王锋,韩璞.ExtremeDB数据库在DCS现场控制站的设计与应用[J].华北电力大学学报,2006,33(4):12-15.

[5]COOD P,YOURDON E.Object-oriented analysis[M].NJ:Prentice-Hall,1991:68-79.

[6]邵维忠,杨芙清.面向对象的系统设计[M].北京:清华大学出版社,2003:160-174.

[7]田宝杰,卓斌,张赛娜.基于面向对象建模技术构建服装企业管理信息系统[J].电脑知识与技术,2008,8(2):280-282.

[8]冯钟.多线程技术在数据采集系统设计中的应用[J].通化师范学院学报,2008,9(8):33-35.

[9]郑惠,范忠诚.零基础学Visual C++[M].北京:机械工业出版社,2008:46-67.

猜你喜欢
线程内存调度
基于C#线程实验探究
《调度集中系统(CTC)/列车调度指挥系统(TDCS)维护手册》正式出版
基于国产化环境的线程池模型研究与实现
基于强化学习的时间触发通信调度方法
一种基于负载均衡的Kubernetes调度改进算法
笔记本内存已经在涨价了,但幅度不大,升级扩容无须等待
“春夏秋冬”的内存
虚拟机实时迁移调度算法
浅谈linux多线程协作
内存搭配DDR4、DDR3L还是DDR3?