APP下载

Berkeley DB在家庭能源监控系统中的应用

2010-09-05孙晓洁

关键词:数据管理页面嵌入式

鲍 婧 叶 桦 孙晓洁 厉 剑

(东南大学自动化学院,南京210096)(东南大学复杂工程系统测量与控制教育部重点实验室,南京210096)

Berkeley DB在家庭能源监控系统中的应用

鲍 婧 叶 桦 孙晓洁 厉 剑

(东南大学自动化学院,南京210096)(东南大学复杂工程系统测量与控制教育部重点实验室,南京210096)

为了实现嵌入式系统下的数据统计和管理任务,同时考虑嵌入式微处理器自身的处理速度和内存容量,引入嵌入式数据库.嵌入式数据库具有体积小、功能齐备、可移植性、高效稳定的特点.以家庭能源开发系统中遇到的数据管理问题为例,提出一种分时统计的方法,移植嵌入式数据库Berkeley DB,比较使用Berkeley DB前后系统的资源占用情况和响应速度.测试数据显示:Berkeley DB的引入占用了系统更多的存储资源,但为嵌入式系统提供了高效的数据管理性能.Berkeley DB的应用提高了系统响应速度,为用户提供良好的人机交互.在设备的硬件资源允许的情况下,这种用空间换性能的做法是可取的.

嵌入式数据库;嵌入式系统;家庭能源监控系统;Berkeley DB;数据统计

家庭能源监控系统作为一个监控终端[1],用于家庭中对所有在线家电以及太阳能逆变器的监控管理,有友好的操作界面.用户可以随时查询在线所有家电或逆变器设备的实时和历史用电情况,并画出统计曲线.系统至少能保存两年内的数据.由于是嵌入式平台开发,系统的处理器速度和文件系统存储空间均受到限制.而系统除了保存大量数据外,还需要快速查询和统计所有在线设备的长期用电信息,进行数据管理.若采用文件系统的方式,需要反复进行文件的打开、读、写、关闭的操作,响应慢效率低.数据独立性差,任何对字段的扩充修改都会影响到整个应用程序.并且文件系统不支持文件的并发访问.

所以,引入一个小巧、稳定、高效的嵌入式数据库Berkeley DB来帮助实现大量数据的管理功能.Berkeley DB不是基于C/S结构的关系型数据库,程序通过直接调用API实现对数据库的所有操作.Berkeley DB作为一种嵌入式数据库系统在许多方面有着独特的优势[2]:首先,应用程序和数据库管理系统运行在相同的进程空间中,进行数据操作时可以避免繁琐的进程间通信;其次,Berkeley DB使用简单的函数调用接口来完成所有的数据库操作,而不是SQL语言,避免了对结构化查询语言进行解析和处理所需的开销.

1 Berkeley DB概述

1.1 Berkeley DB的体系结构

Berkeley DB由5个主要子系统构成,包括:存取管理子系统、事物子系统、锁子系统、内存池管理子系统和日志子系统[3].图1是应用程序和各子系统之间的调用关系.

1)存取管理子系统是Berkeley DB的核心组件,它为创建和房屋数据库文件提供基本的支持.

2)内存池管理子系统是Berkeley DB所使用的通用共享内存缓冲区,适用于灵活的机遇页面的、带缓冲的文件共享访问的应用.

3)事物子系统提供事物管理功能,保证操作的原子性、一致性和孤立性.适用于对需要食物保证的数据进行修改的场所.

4)锁子系统提供进程之间以及进程内部的并发管理机制,为系统提供多用户读取和单用户修改同一对象的共享控制.

5)日志子系统采用先写日志的策略来支持事物子系统进行数据恢复,保证数据一致性.

图1 Berkeley DB体系结构

1.2 Berkeley DB的数据库和数据库环境

在Berkeley DB术语中,数据库是记录的集合,也就是SQL中表的概念[4].数据库的每一条记录由主键/数据(key/data)对组成.数据的内容可以是简单的数据类型,也可以是复杂的结构体.DB数据访问算法[5]有BTree算法、Hash算法、Queue算法、Recno算法等.在数据库打开时需设定数据访问算法.

在相同的数据库环境下打开多个数据库,进行任务子系统、锁子系统、内存池管理子系统的配置,能实现强大的数据库管理功能.但嵌入式平台下使用数据库环境的管理功能会消耗CPU大量资源,导致系统响应缓慢,无法正常工作.所以,嵌入式平台下的数据库通常不使用数据库环境.

2 家庭能源监控系统总体设计

家庭能源监控系统采用三星S3C2440微处理器,配置64MB NANDFLASH和64MB SDRAM,移植Linux系统[6].数据库文件存放在外设SD卡中.系统通过485总线与家用电器、电网电表以及太阳能逆变器进行数据通信,协议采用Modbus-RTU方式.

系统的软件体系结构如图2所示.数据链路层主要实现Modbus主站的通信协议.设备抽象层为系统内存划分了一块专用缓存空间,存放485总线上挂接的所有家电、太阳能逆变器、电网电表的信息抽象.这些设备共用同一个C结构体facilitytype作为抽象数据类型.其中,结构体中的paras长整型数组用于存放各种设备的电参数,是数据库记录的主体内容.

图2 系统软件体系结构

监控模块和数据管理模块是后台应用层程序的主体部分.监控模块发起Modbus协议通信,轮询每个家电、逆变器和电网电表,采集电参数到设备抽象层.数据管理模块定时把设备抽象层的电参数存储到数据库文件.当用户通过GUI发出统计用电信息的请求时,数据管理模块查询数据库文件中的相关记录,进行数据处理后交给GUI供数据显示或绘制曲线.GUI是系统的图形用户界面,由液晶屏和触摸屏组成,作为系统的人机交互界面[7].

3 数据管理模块

按原始的基于文件系统的原始数据管理方式,若用户要查询家电设备当月的用电情况,需要读取文件中一个月的所有记录条目,进行累加、求平均、最大值等操作.若用户要查询当年的用电情况,则需要读取文件中一年的记录条目,进行计算.这样系统忙于对文件的反复定位、读取工作,使得处理器、内存在统计页面的跳转响应时刻超负荷工作.系统响应迟缓.同时,统计当年的用电量必然包含了当月的数据,统计内容重复,浪费系统资源.

运用Berkeley DB后,通过配置数据访问算法加速了数据库记录查询.同时采用分时统计的做法,处理器在空闲时刻统计出各个单位时间内的各种用电参数信息,存放在数据库文件中.这样做使得处理器的工作量化整为零.

3.1 数据库设计

根据上文的描述,系统的数据库概念设计十分简单.系统共创建了5个数据库.原始数据库(db_raw.db)存放电网电表、家电、太阳能逆变器的原始电参数.这些参数直接来自设备抽象层中的facilitytype结构体对所有设备的抽象.表1是原始数据库的数据结构.

表1 原始数据库(db_raw.db)数据结构

此外,为方便数据统计,又设计了4个数据库:小时统计数据库(db_hour.db),天统计数据库(db_day.db),周统计数据库(db_week.db),月统计数据库(db_month.db).分别存放电网电表、家电、太阳能逆变器以小时、天、周、月为单位的用电参数统计.表2~表5是各统计数据库的数据结构.

表2 小时统计数据库(db_hour.db)数据结构

表3 天统计数据库(db_day.db)数据结构

表4 周统计数据库(db_week.db)数据结构

表5 月统计数据库(db_month.db)数据结构

3.2 系统的分时统计方法

数据存储和统计工作由一个独立线程在后台应用程序中单独实现.软件流程图见图3.具体做法是:程序轮询RS485总线上每个设备的电参数到硬件抽象层缓存.每5 min添加所有设备的电参数信息到原始数据库.再根据当前时间,若是一整小时、一天、一周或者一个月刚结束,则统计该小时、该日、该星期或该月的信息.小时统计数据库的记录通过查询原始数据库产生;天统计数据库的记录通过查询小时数据库产生;周统计数据库和月统计数据库的记录通过查询天统计数据库产生.

3.3 Berkeley DB数据库的应用

3.3.1 Berkeley DB数据库的基本操作[4]

每次对数据库的操作都需要先创建一个DB句柄,再用句柄的DB->open()函数打开数据库.然后进行数据库的插入、查询、删除记录等操作.最后关闭数据库.现将用到的数据库基本操作列举如下:

1)创建数据库句柄:ret=db_create(&energy_dbs.db_raw,NULL,0);

2)打开数据库:ret=energy_dbs.db_raw->open(energy_dbs.db_raw, //DB pointer

3)查询记录:ret=energy_dbs.db_raw - > get(energy_dbs.db_raw,NULL,& key,& data,0);

4)添加记录:ret=energy_dbs.db_raw - > put(energy_dbs.db_raw,NULL,& key,& data,0);

5)关闭数据库:ret=energy_dbs.db_raw - > close(energy_dbs.db_raw,0);

6)数据库同步:ret=energy_dbs.db_raw->sync(energy_dbs.db_raw,0);sync()函数用来把缓存中的数据库数据写到flash文件上,以防止系统突然掉电.数据库调用close()函数时会首先自动调用sync()函数同步数据库.

图3 数据存储统计流程图

3.3.2 基于光标的数据库查询操作

以小时统计数据库为例,查询某设备在原始数据库中2009年12月10日10时0分到2009年12月10日10时59分的用电参数,统计2009年12月10日10时的电参数,写入小时统计数据库.用Berkeley DB光标实现数据库的快速搜索,pcursor->get()函数的标识DB_SET_RANGE用于搜索主键大于等于某设定值的记录.

GUI需要查询2009年12月10日10时的统计结果时,通过读取小时统计数据库文件的形式直接获得结果.文件读取语句只有 1 条:ret=energy_dbs.db_hour- > get(energy_dbs.db_hour,NULL,&key,&data,0).

4 结果

4.1 资源占用情况对比

Berkeley DB比文件系统记录方式要增加很多资源开销.现就从应用程序大小、有无静态链接库、数据库文件大小3方面,比较使用Berkeley DB和文件系统2种方式的资源占用情况,见表6.以下数据与家庭能源监控系统的实现功能相关,也与程序员的代码质量相关.

表6 Berkeley DB与文件系统方式下的资源对比

4.2 页面响应

实验测试了连续添加10 000条记录,耗时13.4 s.查询一条记录耗时0.8 ms;连续查询500条记录耗时0.55 s.测试用户点击进入GUI的统计页面时,背景页面跳转响应时间 <0.1 s,统计图表绘制时间<0.4 s.文件系统方式下,用户点击进入统计页面,页面背景跳转响应时间 <0.1 s,统计图表绘制时间<1 s,肉眼可以明显看到统计图表在页面打开后经短暂延时才显示在画面上.统计页面效果如图4所示.

由以上数据可以看出,Berkeley DB的引入占用了系统更多的flash资源.但Berkeley DB为嵌入式系统提供了高效的数据管理性能.在设备的硬件资源允许的情况下,这种用空间换性能的做法是可取的.

图4 家庭能源监控系统统计页面

5 结语

本文以家庭能源监控系统为背景,给出了一种基于嵌入式数据库的数据管理方法.家庭用电监控系统中的数据库设计并不复杂.数据管理的难点主要体现在:数据量大、统计内容多、响应快速的要求上.嵌入式数据库Berkeley DB解决了嵌入式设备的数据管理问题,优化了存储的数据结构,使用更好的数据搜索算法,从而能够提高系统的响应性能,实现数据的可靠存储.最后与文件系统存储数据方式的实验比较,体现了嵌入式数据库的优越性.

References)

[1]刘智,付保川,奚雪峰.基于Berkeley DB的监控系统的设计与实现[J].科技广场,2007(1):82-84.Liu Zhi,Fu Baochuan,Xi Xuefeng.Design and implementation of supervisory system based on Berkeley DB[J].Science Mosaic,2007(1):82-84.(in Chinese)

[2]王京谦,万莅新.开源嵌入式数据库BerkeleyDB和SQLite的比较[J].单片机与嵌入式系统应用,2005(2):5-7.Wang Jingqian,Wan Lixin.Comparison between open source database BerkeleyDB and SQLite[J].Microcontroller&Embedded System,2005(2):5-7.(in Chinese)

[3]刘巍巍,徐成,李仁发.嵌入式数据库Berkeley DB的原理和应用[J].科学技术与工程,2005,5(2):86-90.Liu Weiwei,Xu Cheng,Li Renfa.The mechanism and applications of Berkeley DB[J].Science Technology and Engineer,2005(2):86-90.(in Chinese)

[4]Oracle Berkeley DB.Getting started with Berkeley DB for C,release 4.6[EB/OL].(2007-06)[2010-04-30].www.oracle.com.

[5]施聪.嵌入式数据库系统 Berkeley DB[EB/OL].(2005-04-01)[2010-04-30].http://www.ibm.com/developerworks/cn/linux/l-embdb/index.html#author.

[6]孙继坤,张小全.嵌入式Linux系统开发技术详解——基于ARM[M].北京:人民邮电出版社,2006:8-27

[7]万威,叶桦.一种嵌入式微型可配置GUI的设计及实现[J].东南大学学报:自然科学版,2008,38(增刊Ⅱ):115-118.Wan Wei,Ye Hua.Design and realization of a micro configurable embedded GUI[J].Journal of Southeast University:Natural Science Edition,2008,38(SupⅡ):115-118.(in Chinese)

Applications of Berkeley DB in home energy monitor system

Bao Jing Ye Hua Sun Xiaojie Li Jian
(School of Automation,Southeast University,Nanjing 210096,China)(Key Laboratory of Measurement and Control of Complex Systems of Engineering of Ministry of Education,Southeast University,Nanjing 210096,China)

In order to achieve the goal of data statistic and task management under the embedded systems,together with the consideration of processing speed and the internal storage capacity,the embedded database is introduced.The features of embedded database are small in size,multi-functional,portable,highly efficient and stable.Taking the data management in the home energy monitor system as an example,a statistical method of time sharing is proposed.The embedded database Berkeley DB is transplanted,and the resource occupancy and response speed before and after using Berkeley DB are compared.Testing data show that although taking up more storage resources,the use of Berkeley DB provides more efficient data management capabilities.The application of Berkeley DB improves the system response,and provides a better human-computer interaction.Under the allowance of the hardware resources of device,this practice of using space for performance is feasible.

embedded database;embedded system;home energy monitor system;Berkeley DB;data statistics

TP274

A

1001-0505(2010)增刊(I)-0092-06

2010-05-18. 作者简介:鲍婧(1986—),女,硕士生;叶桦(联系人),男,博士,教授,博士生导师,zhineng@seu.edu.cn.

国家自然科学基金资助项目(60904020).

猜你喜欢

数据管理页面嵌入式
刷新生活的页面
企业级BOM数据管理概要
定制化汽车制造的数据管理分析
海洋环境数据管理优化与实践
CTCS-2级报文数据管理需求分析和实现
搭建基于Qt的嵌入式开发平台
嵌入式软PLC在电镀生产流程控制系统中的应用
Altera加入嵌入式视觉联盟
倍福 CX8091嵌入式控制器
Web安全问答(3)