内蒙古工业大学学报 JOURNAL OF INNER MONGOLIA 第29卷第3期 UNIVERSITY 0F I CHN0L0GY V01.29 No.3 2010 文章编号:1001—5167(2010)03—0004—06 实时数据存储管理的研究与设计 田保军 ,秦 罡2,秦 婷 (1.内蒙古工业大学信息工程学院,内蒙古呼和浩特,010051; 2.呼和浩特禾正软件有限责任公司,内蒙古呼和浩特,010050; 3.呼和浩特市第二职业中专北校,内蒙古呼和浩特,010020) 摘要:对于工业控制实时系统来说,实时数据、历史数据的I/O速度是系统的主要 瓶颈。本文提出一种新的文件组织及数据池管理方式,通过利用数据缓冲池和内 存索引机制对实时数据及海量历史数据进行有效管理,不仅加快实时数据的读/ 取速度,而且提高系统的整体性能,在实际的应用中取得了较好效果。 关键词:实时数据;历史数据;数据池;内存索引 中图分类号:TP311 0 引 言 在工业控制系统中,对大量现场过程生产的实时数据及历史数据的处理是十分重要的,而实时数 据、历史数据的I/O速度是实时系统的主要瓶颈。传统的数据库技术已经无法满足对海量数据实时的 处理,必须借助先进的数据存储技术来解决。实时数据库系统(RTDBS,Real—Time Database System)正 是为满足此类需求而产生的,实时数据库系统是文件技术和实时技术相结合的一种新型数据存储技术, 它能够满足处理这种带有实时性数据的要求,同时,为企业信息管理系统与底层控制系统之间建立了数 据通信。因此,RTDBS在工业控制系统中得到了广泛的应用。 文章分析了工业控制应用对实时数据库的要求,提出一种新的文件组织方式,利用数据缓冲池和内 存索引机制,设计并实现了一个工业实时数据存储管理系统,同时详细介绍了该系统的数据存储和检索 实现中所采用的关键技术。 1 实时数据的存储组织 1.1独立的文件I/O管理方式 专用的实时数据库系统通常由开发人员编写二进制文件和索引文件来实现。这种实时数据库的特 点是实时性和逻辑性强,适应于规模大、逻辑复杂的工控环境。该方式的优点:数据文件采用独占方式, 可增加系统的安全性;基于文件索引机制,增加I/O数据访问速度;同时,由于专为实时系统而设计,数 据的实时性好。如:美国OSI Software公司的PI(Plant Information System)等。 1.2数据库管理方式 使用商业数据库或开源数据库作为实时数据库基础有明显的优点,首先,这些数据库提供完善的管 理工具,编程人员可以很方便的定义实时数据;其次,这些数据库一般都能使用SQL对数据进行访问和 收稿日期:2009—04—26 基金项目:内蒙古工业大学科学研究项目(x200804) 作者简介:田保军(1971一),男,工学硕士,研究方向:软件工程 第3期 田保军等实时数据存储管理的研究与设计 181 存储,编程人员可以很容易实现对实时数据的修改和查询。由于这些数据库并非专为实时数据库而设 计,它们大部分功能并不是实时数据库所需要的,这就严重影响了数据的实时性。如:采用嵌入式关系 型数据库,如Wonderware公司的IndustrialSQL(InSQL)等。 1.3内存管理方式 内存数据库(MMDB:Main Memou Database)的本质特征是事务的”工作数据”常驻内存,消除I/O瓶 颈,以获得非常高的存取速度。从存取时间上看,通常,内存的存取在10—8s数量级,而磁盘在10—3s 数量级。以内存数据库做底层支持,可以满足实时数据库系统的高性能要求。 2 实时数据存储组织的实现 在处理海量实时数据时,除数据压缩算法外,文件I/O即实时(历史)数据的快速检索、读取是系统 主要的性能瓶颈之一。就文件I/0性能而言,通常可以采用内存文件映射(Win32:createFileMapping)方 式来提高读写速度,但当文件存储海量数据(如600M 200个,约120G)时,内存文件映射方式将会因频 繁的内存页面切换处理而导致性能的明显下降。 数据快照和数据缓冲池也是常用的提高数据访问性能的办法,但在实际的数据申请应用中,除组态 图和趋势外,实时数据的最近时间区域化处理(如:报表中的各种整点数据)占有很大的比例。 本文提出通过内存索引和双数据缓冲池的方法以提高数据访问性能,其中内存索引用于改善文件 的I/O性能,而双数据缓冲池用于提高数据访问的命中率。 图1 实时数据存储管理的结构图 Fig.1 the structure diagram of real—time data storage management 2.1数据采集处理(图1中A所示) 数据采集处理用于采集处理实时数据源(如:DCS,PLC)回传的实时数据,在接收实时数据时,可采 用API方式或OPC方式,在接收实时数据时,为提高吞吐性能,实时数据宜采用批量接收的方式,尽量避 免实时数据的单独接收。 实时数据经由各种数据通道进入相互独立数据隔离区,为保证数据的安全性,此隔离区需采用线程 安全同步机制。 缓存用于拼合隔离区的实时数据,即将具备相同时标的实时数据有机的组织成一个整体——时标 数据块,因此,在缓存中可能存在多个不同时标的数据块。 2.2实时数据缓冲池(图1中B所示) 实时数据缓冲池通常保留当前时刻前60分钟或120分钟的无损实时数据(从严格意义上讲,这些 数据应该被称做历史数据)。 在实际应用中,当时时刻前1—2小时的数据需求量较大,例如各种报表、时均值计算、时累计值计 算等。 l82 内蒙古工业大学学报 2010拄 通常情况下,这些数据已被储存于文件中,因此在进行文件l/O读取时,势必会造成性能的下降;不 仅如此,数据从文件读人到历史数据缓冲池时,由于数据源于压缩数据(针对有损压缩算法),因此可能 会导致数据的失真。 由于实时数据缓冲池中数据未经任何有损压缩处理,因此实时数据缓冲池可以确保该时段中实时 数据的准确性。 另外,实时数据缓冲池也是为了降低历史数据缓冲池的负荷而建立的,就实际应用来看,它至少可 以降低历史数据缓冲池20—30%的数据申请负荷。 实时数据缓冲池分为A、B池,这两个池互为备份,其中之一用于向其它应用提供实时数据。另一为 数据压缩提供数据缓存(冲),这两个缓冲池可以相互转化。 2.3数据压缩《图1中C所示) 根据实时数据特性的不同,实时数据可能采用有损压缩或无损压缩方式。 2.4数据文件引擎(图1中D所示) 数据文件引擎用于管理结果数据(即压缩后的实时数据),即文件I1'O引擎。 2.4.1数据组织 一般而言,实时数据须至少具备时标、实时值、状态标签这三个基本属性,但在进行数据组织时可将 同一时标的实时值组合起来以减少储存时标所占用的空间,如图2所示: 时标 }控制区J实时值1(+状态)l …… I实时值n(+状态) 图2实时数据组织图 Fig.2 real—time data organizing diagram 依据算法不同,时标可采用标准双精度浮点数或整型时间偏移量;控制区用记录实时值的个数及检 索偏移量。 2.4.2内存索引 内存索引的设计思路是每一个历史数据文件均设置一张索引表,这张索引表存放于文件的最末端, 在读取文件时,首先将索引表读入内存,在内存中进行检索定位后,直接从文件中通过偏移量获取目标 数据。 内存索引表的检索算法直接影响到数据的读写性能,本文采用了线性链表方式加外部辅助检索的 方式。 内存索引主要核心类(利用Delphi实现): TSearchItem=class(…) Private FSize:LongWord; F伽鼍 t:LongWord; FItemType:Word; fltemName:array[0..255]of Char; Procedure SetItemType(const Value:Word); Procedure SetOffSet(const Value:LongWord); Procedure SetSize(const Value:LongWord); function GedtemName:String; Procedure Setltemname(const Value:Stirng); 第3期 田保军等实时数据存储管理的研究与设计 Protected Public Dirlen:byte; constructor Create; destructor Destroy;override; Procedure LoadFromStream(Strm:TStream); Procedure WriteToStream(Strm:TStream); Property ItemType:Word Read FltemType Write SetltemType: Property OffSet:LongWord Read FOffSet Write SetOffSet; Property Size:LongWord Read FSize Write SetSize; Property ItemName:String Read GetItemName Write SetItemname; Published end; TSearehltems:class(…) Private lftems:T“st; function Getltems(Index:DWORD):TUFDierctoryltem; function GetCount:DWORD; Protected Public DirLen:Byte; constructor Create(AOwner-TComponent); destructor Destroy;override; Procedure ClearItems; Procedure WriteToStream(Strm:TStream); Procedure LoadFromStream(Strm:TStream;Numltems:wo ); Procedure Addhem(Item:TUFDirectoryhem); Procedure Deleteltem(Index:DWORD); Property Items[Index:DWORD]:TUFDierctoryltem Read Getltems; Property Count:DWORD Read GetCount; Published end; 2.5历史数据缓冲池(图l中E所示) 图3内存树结构图 Fig.3 memory tree structure diagram l83 184 内蒙古工业大学学报 20l0年 由于实时数据库须能及时响应客户端海量历史数据的调用需求,因此,如果仅是通过硬盘I/O进行 历史数据的检索与读取势必会造成访问速度的大幅下降。为此,需在内存中开辟独立历史数据缓冲池, 即通过一定的机制将历史数据文件从硬盘预先读人内存,客户发出数据申请时,首先在内存中进行检索 与定位,即通过内存空间换取检索访问时问。 历史数据缓冲池将部分历史数据驻留在内存中,消除了传统的磁盘数据库系统中事务运行的I/O 瓶颈,并且获得CPU直接访问数据库数据的较高存取速度,极大地提高了系统的性能和吞吐量。本文采 用了一种有效的内存历史数据组织方式——内存树(树和队列存储形式,如图3所示)。由于树的结点 移动速度快,数据组织方便,它能更有效的利用有限的内存空间,提高数据的访问命中率。 内存树和队列存储形式,将不同命中率的数据组置于树中不同的分支上,新到的数据放在命中率低 的结点处,随着访问次数的增加,逐步往访问命中率高的结点移动,而叶结点采用链式队列存储数据,采 用传统的LRU(Least Recently Used)算法,即用单链管理所有的用户数据记录,每当一个用户的数据被访 问到时就将其移到链尾,淘汰用户从链头开始,这样可以保证被淘汰的用户是内存数据库中访问率最低 的数据。 2.6数据文件(图1中F所示) 基于数据安全的考虑,数据文件须采用独占方式对其进行管理。且必须采用线程安全同步机制。 2.7数据快照(图1中G所示) 数据快照主要用于组态图、列表等瞬态值的显示。它采用内存管理方式以提供最高效率的数据访 问方式。 2.8接口(API,OPC)(图1中H所示) 所有数据可经由API方式或OPC方式向各种应用提供实时数据。其中API方式包括常规接口方式 和COM接口。 2.9各种应用(图1中I所示) 实时数据可提供基于C/S和B/S的各种应用。 3 总 结 基于数据缓冲池和内存索引机制对实时数据及海量历史数据进行有效的管理,不仅加快实时数据 读/取速度,而且提高系统的整体性能,能满足实时系统对实时数据管理的要求,而且与国内外的实时数 据库系统相比,具有投资小、效率高、实时性强等特点。在实际的应用中取得了较好效果。 参考文献: [1]罗青松,罗蕾.内存数据库的一种数据组织方式[J].计算机应用,2008,28(6):318—323. [2] 叶建位,苏宏业.实时数据库系统关键技术及实现[J].计算机应用研究,2005,3:45—47. [3]林鹏,李航,徐学洲.关键业务中内存数据库的T树索引优化[J].计算机工程,2004,30(9):75—76. [4]宋清昆等.组态软件实时数据库系统的设计[J].自动化技术与应用,2008,27(1):55—57. [5]陆桂明,郑忠洋.组态软件实时数据库研究[J].微计算机信息,2007,23(11):157—159. [6] 王洪海,潘朝华.内存数据库的数据结构分析[J].现代电子技术,2004,3:96—98. [7]蔡瑞强,程浩忠.基于中间件技术的电力市场辅助服务实时数据库设计[J].继电器,2007,35(12):15—22 [8]吴德州,武君胜.面向电力系统的分布式实时数据库设计[J].科学技术与工程,2008,8(4):929—934. 第3期 田保军等实时数据存储管理的研究与设计 l85 THE RESEARCH AND DESIGN OF REAL—TIME DATA SToRAGE/VIANAGEMENT TIAN Baojun ,QIN Gang ,QIN Ting (1.School ofInformation Engineering,Inner Mongolia University of Technology,Hohhot,010051,China 2.Hohhot Triones Software Co Ltd,Hohhot,010050 3.Hohhot No.2 Secondary Vocational School,Hohhot,010020) Abstract:For industrial control systems,the lfO speed of real—time and historical data has always been the main bottle neck.This paper presents a new method for file organization and data pool management. Through the use of data pools and the memo ̄index mechanism,effective management of real—time data and tremendous quantity of historical data is achieved.Thus,not only the reading and writing of real—time data can be speeded up,the entire performance of the real—time systems can also be improved.This method has manifested fairly good effects in applications. Keywords:real—time data,historical data,data pool,memo ̄index.