当前位置:首页 > 物联网 > 《物联网技术》杂志
[导读]摘要:介绍了内存实时数据库在工业控制DCS组态软件中的应用及其在数据采集过程中的重要性;针对组态软件内存实时数据库的特点,测试了在不同的数据组织形式、内存置换页面大小以及缓存大小下数据库的性能,通过测试,得出了不同的配置组合对内存实时数据库性能的影响,从而为下一步的研究工作打下了基础。

引言

伴随着分布式控制系统DCS(DistributedControlSystem)的出现,以及其在工控领域的广泛应用,组态软件开始逐渐被广大技术人员所熟悉。“组态”的概念最早来自英文Configuration,其含义是使用软件工具对计算机及软件的各种资源进行配置(包括进行对象的定义、制作和编辑,并设定其状态特征属性参数),达到使计算机或软件按照预先设置,自动执行特定任务,满足使用者要求的目的。

组态软件是应用在数据采集和过程控制层面的一种专用软件,应用在分布式控制系统数据监控层一级。通过使用组态软件,可以为DCS工控系统提供良好的用户开发界面以及简洁的使用方法,可以非常容易地实现和完成对分布式工业控制系统各个模块的模拟和监控功能,使计算机图形界面与工控系统真实设备联系起来;通过集成各个硬件厂家的I/O接口以及设备接口,组态软件能够采集到工控设备的现场数据,通过实时数据库进行处理,并存储到历史数据库供查询使用;通过设置,可以对采集数据提供报警和报表功能;同时,组态软件应该能支持各种工控设备和常见的通信协议,并且通常应提供分布式数据管理和网络功能。

组态软件产品于上世纪80年代初出现,并且得到了良好的发展,目前世界上的组态软件有几十种之多,其中主要包括美国Wonderware的Intouch、美国Intellution公司的Fix、澳大利亚Cit公司的Citech、德国Simens的Wince、北京亚控自动化软件有限公司开发的组态王(Kingview)、大庆三维公司的ForceControl以及北京昆仑通态自动化软件科技有限公司开发研制的MCGS等。伴随着国家对工控领域的支持不断加大,

收稿日期:2014-01-14

组态软件将在工控信息化中扮演越来越重要的角色,未来发展的空间也会不断扩大。

1内存实时数据库

大批量生产、连续加工过程、高度自动化程度是流程工业的特点,这需要在过程监控时提供高速的数据处理、长期的数据存储。工业控制系统是一个实时系统,它实时地从外界采集数据进行运算、判断后输出控制量,因此对数据的管理呈现出实时特点[3]。因此,实时数据库是组态软件处理数据、组织数据和管理数据的核心,它能够高效地处理和存储工控系统生产过程中的实时数据,为优化过程控制和企业的经营决策提供完整的实时数据和完备的历史信息叫

根据工控系统的特点,在工业组态软件中需要应用内存实时数据库,分以下几种情况:内存实时数据库整个数据库常驻内存,对数据的存取不需要I/O操作;整个数据库不用常驻内存,但存取数据时,应先进入内存,即数据库的存取在内存中进行;数据库常驻磁盘,增大缓冲区,在一个事务执行之前,所有的数据都已经取到内存,经适当的缓冲区管理减少甚至消除I/O[5],这些特点决定了内存实时数据库能够及时有效地处理和维护大量的共享数据和控制数据,满足工业组态软件对于事务时间性方面的要求。

对于内存实时数据库来说,由于已不再涉及I/O,所以在时间和空间矛盾的处理上,空间是第一位,系统的算法设计目标应该是内存空间和CPU的高效使用。为了达到这一目标,应该对内存实时数据库的数据组织结构、事务处理和数据管理、并发控制及恢复技术、内存置换页面以及缓存大小等方面进行研究与测试[5],使其能够提供更好的性能,满足工业控制组态软件的需求。

2内存实时数据库性能测试

2.1测试目的

针对内存实时数据库的特点和研究与测试方面的要求,设置内存实时数据库的数据组织形式、内存置换页面大小以及缓存大小,通过测试数据,得出不同的配置组合对内存实时数据库性能上的影响,为下一步的研究工作打下基础。2.2测试环境

测试对象采用BerkeleyDB内存实时数据库系统。BerkeleyDB历史悠久,主要应用在Unix/Linux操作系统上,其设计思想是简单、小巧、可靠、高性能。它可为应用程序提供可伸缩的、高性能的、有事务保护功能的数据管理服务。同时BerkeleyDB为数据的存取和管理提供了一组简洁的函数调用API接口。BerkeleyDB对接收到的实时数据采用关键词(Key)和数据(Value)的存储结构,这两者构成的Key/Value对组成了数据库中的一个基本结构单元,而整个数据库实际上就是由许多这样的结构单元所构成的。通过使用这种方式,简化了实时数据的存储逻辑关系,同时,简便的数据库查询和访问方式也能够满足工业组态软件的需求。所以,在此测试中,所有的数据插入的都是Key=int,Value=int,在循环中递增的。

本机配置如下:

OS为Windows7旗舰版;RAM=8GB;CPU=IntelCorei7-3770CPU3.4GHz;Disk=500GB;NTFS的默认簇大小为4KB。

测试的实际数据量为:

300*10000*2*sizeof(int)/1024/1024丝22.89MB;编译器:VisualC++6.0;BerkeleyDB内存实时数据库版本为db-5.3.21.NC2.3测试方法

循环插入int类型的数据,同时设置BerkeleyDB的参数,测试在不同存储方循环插入int类型的数据,同时设置BerkeleyDB的参数,测试在不同数据组织形式、内存置换页面大小以及Cache缓存大小的设置下,数据库读写的性能,以确定组态软件实时数据库部分的存储方式。

2.4测试代码

内存实时数据库性能的测试代码如下:

#include“stdafx.h”

#include"db.h”

#include“db_cxx.h”

#include“windows.h”

#include“winbase.h”

intmain(intargc,char*argv[])

{

size_tpsize=1;//设置页面大小,单位为KBsize_tcsize=10;//设置cache大小,单位为MBinttcount=300;//设置数据插入数量,单位为万次Dbdb(NULL,0);

db.set_pagesize(1024*psize);

db.set_cachesize(0,1024*1024*csize,0);u_int32_toFlags=DB_CREATE;try

{

db.open(NULL,"test.db",NULL,DB_

BTREE,oFlags,0);

}

catch(DbException&e)

{

}

catch(std::exception&e)

{

}

//实时数据插入

Dbtkey,data;

inti,ret,count=10000*tcount;

longt1=GetTickCount();//开始时间

for(i=0;i<count;i++)

{

Dbtkey(&i,sizeof(int));

Dbtdata(&i,sizeof(int));

db.put(0,&key,&data,DB_

NOOVERWRITE);

}

longt2=GetTickCount();//结束时间

printf("插入结束%d万记录,全部用时:%.2f秒\r\n",

tcount,(t2-t1)/(float)1000);

longtick1=GetTickCount();

try

{

Dbc*dbcp;

db.cursor(NULL,&dbcp,0);

Dbtkey;

Dbtdata;

while(dbcp->get(&key,&data,DB_NEXT)==0)

{

key.get_data();

data.get_data();

}

dbcp->close();

printf("遍历结束%d万记录,全部用时:%.2f秒\r\n",tcount,(GetTickCount()-tickl)/(float)1000);

db.sync(0);

}

catch(DbException&dbe){}

db.close(0);

return0;

}

2.5测试结果

代码运行界面如图1所示。

组态软件内存实时数据库性能测试

代码运行后所得到的结果如表1――表3所列。

表1页尺寸列表

(记录数量:300万,缓存尺寸:0MB单位:s)

读写
1KB
2KB
4KB
8KB
16KB
32KB
B+写
33.71
30.28
26.85
28.30
34.09
50.59
HASH写
50.92
46.32
48.64
54.10
67.44
91.39
B+读
2.03
2.00
2.03
2.11
2.20
2.34
HASH读
4.24
4.51
3.85
3.70
3.67
3.32

表2Cache缓存大小列表(1)

(记录数量:300万;页尺寸:4KB;数据库文件大小:80.2MB;单位:s)

读写
0MB
10MB
20MB
40MB
80MB
160MB
320MB
B+写
31.78
17.04
16.04
15.12
11.50
11.37
11.33
HASH写
46.85
30.39
22.2
16.49
12.65
12.92
13.39
B+读
2.46
2.65
2.61
2.65
2.59
2.54
2.56
HASH读
3.73
3.54
3.2
3.21
3.12
3.18
3.25

表3Cache缓存大小列表(2)

Cache缓存大小(记录数量:600万;页尺寸:4KB;数据库文件大小:160MB;单位:s)

读写
0MB
10MB
20MB
40MB
80MB
160MB
320MB
B+写
71.07
44.60
43.41
41.95
36.13
24.77
24.49
HASH写
102.21
85.82
67.00
52.56
43.51
28.24
27.75
B+读
5.21
5.48
5.51
5.49
5.41
5.30
5.24
HASH读
8.24
8.22
7.91
7.52
7.11
6.74
6.75

4 结 语

根据以上运行结果,可以看出组态软件内存实时数据库BerkeleyDB在采用B+树存储方式的时候,其写入和读取性能明显高于HASH存储方式;当页面尺寸为4KB时,BerkeleyDB的存储效率最高,随着页面尺寸的不断增大,效率反而逐渐降低;当确定了页面尺寸为4KB后,逐渐改变Cache缓存大小,比较300万与600万两种记录数量,发现无论是B+树的存储方式还是HASH的存储方式,当缓存很小的时候,效率都很差,而当缓存大小大于等于数据库文件大小时,效率最高,之后随着缓存逐渐增大,对效率的影响很小。

通过该测试可以得出,不同的数据组织形式、内存置换页面大小以及Cache缓存大小对内存实时数据库的效率性能影响很大,本文只针对B+树和HASH存储方式进行了测试,测试的内容并不完善,下一步应该对数据的组织形式进行深入的研究,挖掘更适合键值对形式的工业组态软件内存实时数据组织结构。

20211120_6197d95914a30__智能家居虚拟场景设1计与实现

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读

物联网设备普遍面临内存资源高度受限的困境。以STM32F103为例,其20KB RAM需同时承载任务栈、通信协议栈及业务逻辑。传统FreeRTOS默认的heap_3策略(封装标准库malloc/free)存在三大致命缺陷...

关键字: 物联网 内存

2026 年 3 月 5 日,爱达荷州博伊西市 — 美光科技股份有限公司(纳斯达克股票代码:MU)近日宣布开始向客户送样业界容量领先的 LPDRAM 模块 256GB SOCAMM2,进一步巩固其在低功耗服务器内存领域的...

关键字: 数据中心 服务器 内存

3月2日消息,三星电子的内存、闪存芯片业务靠着这一年的大涨价实现了巨额利润,现在三星还在亏损的主要业务就是芯片代工了。

关键字: 内存 闪存芯片

2月27日,魅族科技发布战略转型公告,正式宣布暂停国内手机新产品自研硬件项目,引发行业震动。

关键字: 魅族 手机 内存 AI软件

Linux内存管理是操作系统的核心机制之一,通过虚拟内存与物理内存的分离设计,实现了多进程内存隔离、高效资源利用和系统稳定性保障。

关键字: Linux 内存

在一个智能电表项目曾因结构体布局不当导致RAM使用量超出硬件限制23%,最终通过结构体重排算法将内存占用降低19%。这种优化技术基于一个简单却深刻的原理:通过调整结构体字段的排列顺序,可以显著减少内存对齐带来的填充空间浪...

关键字: 结构体重排 内存

2月23日消息,半导体是韩国的支柱产业,尤其是内存及闪存芯片领域是世界第一大,堪称韩国的国本,而日本现在要挖韩国墙角,拉拢三星、SK海力士去日本建厂生产。

关键字: 内存 DDR5

应用材料公司总裁兼首席执行官盖瑞·狄克森表示:“得益于行业加速在人工智能计算领域的投资,应用材料公司在本财年第一季度业绩表现强劲。市场对更高性能、更高能效芯片的需求正推动着前沿逻辑、高带宽内存和先进封装的高速增长。这些领...

关键字: 人工智能 计算 内存

芯片巨头高通的股价应声暴跌超 8%。这一跌幅的背后,表面看是公司发布的远低于市场预期的业绩指引,而核心诱因直指席卷行业的内存芯片短缺危机。

关键字: 内存 消费电子 高通

1月18日,美国商务部部长霍华德・卢特尼克(Howard Lutnick)在美光纽约工厂奠基仪式上的表态,为本已沸腾的全球内存市场投下又一颗 “炸弹”:存储芯片制造商若不选择在美国本土建厂,将面临高达 100% 的惩罚性...

关键字: 内存 存储 AI算力
关闭