张玉生,刘炜东,党引弟,胡爱兰
(华北计算机系统工程研究所,北京 100083)
摘要:为了适应国产化指挥显示控制系统中对大批量过程数据的实时快速存储管理的需求,结合实时系统技术和数据库技术,在自主研究设计的力数实时数据库系统的基础上,研究设计了适合当前背景的内存数据的存储结构、磁盘历史数据的存储结构及数据模型,它能够更好地满足当前指挥显示系统的实际需求。
0引言
数据存储与管理作为指挥显示控制系统中的核心部分,承担着整个系统中各个环节产生的大批量数据的实时存储任务,为指挥显示系统提供了稳定的数据支撑。一方面,现有的关系型数据库难以满足日益增长的大规模数据的实时存储需求;另一方面,由于工程的特定相关性,商用的实时数据库系统很难满足特定工程数据和业务逻辑的特殊性要求。
现有实时数据库只支持单点较少类型的测试数据存储,完全不能满足现在各种类型数据存储的需求,所以研究一种能够支持多种数据类型、支持大批量数据存储的实时数据库十分必要。
因此本文在力数实时数据库的基础上,结合实际需要和实时数据库的特点,对内存数据库存储结构与模型、磁盘数据存储结构进行了重新设计,使其既支持关系型数据库的多种组合类型的测点数据,同时也有实时数据库的海量实时存储性能。
1研究现状
实时数据库的研究设计始于20世纪80年代中期。实时数据库系统一般是商业企业信息化建设和工业控制智能化的基础,在商业化的实时数据库产品开发上,国外有不少著名公司在原有自营业务的基础上推出了相应的实时数据库产品[1]。
国内的实时数据库研究开始得晚一些。随着国内工业界对分布式控制系统(Distributed Control System,DCS)的广泛引进和应用,教育科技界率先进行研究实时数据库理论的研究。目前对实时数据库系统(RealTime Database System,RTDBS)的研究主要来解决实时系统中的数据管理问题或为RTDBS提供时间驱动调度和资源分配算法,而且目前的实时数据库基本上只适用于特定的应用领域和开发环境。
2实时数据库特点
实时数据库是数据库技术和实时数据处理技术相结合的产物,需要同时满足数据一致性和实时性这两个要求。实时数据库系统主要目标是保证在规定的时间内尽可能多地完成任务,而不像传统数据库那样尽量公平地为所有任务分配系统资源。内存数据库是实时数据库的重要部分,它一般用来处理实时数据,进行事务调度和报警,并与安全控制部分和上层应用及用户进行交互[2]。
磁盘历史数据库一般用来保存实时过程数据的历史记录,即过时的过程数据。其中文件的索引和数据组织结构、内存缓存策略及磁盘I/O模型等是制约历史数据库发展的瓶颈,这些对整个实时数据库系统的效率和性能都有着至关重要的影响[3]。
概括起来,实时数据库系统有以下几个特点[4]。
(1)时间约束:实时数据库无论对数据有效性还是事务都有明确的时间限制。实时系统中,大量的过程数据体现着当前外部环境的实时状态。因此实时数据库中的数据大多是短暂的,当数据不再能反映外部的状态时,就成了无效数据。
(2)事务调度:实时数据库系统的正确性需要同时依赖于事务的逻辑结果和产生该逻辑结果所需要的时间。需要综合考虑事务的执行所需时间、截止时间以及紧急程度等有关影响因素。
(3)数据存储:实时数据的存储和管理,为系统内外的相关功能提供准确高效的实时数据服务。实时数据库的过程数据处理模块需要以服务进程常驻内存,以保证读取的实时性。对于随着时间推移转变成无效的过程数据,可存放在磁盘等永久性存储介质中,以便于后续的查看或者数据的统计分析等应用。因此在研究设计实时数据库时时候,需要平衡存储空间和所需时间之间的矛盾,以确保系统的实时性要求。
(4)数据压缩:在真实应用的数据存储系统中,还要考虑如何高效处理海量数据。如果对原始数据进行原样存储,将会有大量内存、磁盘空间和CPU时间的耗费,因此需要对数据进行高效压缩,以提高实时数据库的存储性能。
(5)具有开放性:一个完整的实时数据库系统是数据统一管理的平台,可以在不同产品间传送信息。例如,实时数据库对不同厂商的不同产品有丰富的数据采集以及专用的实时服务的接口。
3内存数据库的数据结构设计
实时内存数据库的物理组织包括存储结构、索引结构等[5]。内存数据库的数据结构主要包括ID索引结构(用来把关系型的联合主键映射成实时数据库的唯一ID)、块内数据参考结构(数据块内把一组测点的数据按固定顺序可扩展的灵活格式组织成一条类关系型的数据记录)以及单个测点数据块内数据组织结构。
3.1ID索引结构
该背景项目中一般由任务号、设备号、目标号及时间戳共同标识一组测点数据值,并由数据类型type字段来标识属于何种数据,所以由此4个字段可以映射索引成数据库的唯一ID主键。其中ID占4 B,其他各字段各占1 B,如表1所示。
按表1 ID映射结构,采集来的各测点数据均可由以上几个联合字段映射生成唯一ID主键,用于后面各阶段的处理和存储。
3.2各类型数据块内数据参考结构
各过程测点数据块内数据结构设计由不同种类型的数据组成,各种类型数据对应的个数按照固定顺序排列,分别为double型、int型、char型、float型、short型,在数据块内按此顺序及个数进行数据打包和解析。各种类型数据的个数均使用1 B的unsigned char型数据表示(1 B最多可以表示255个,足以适用绝大多数的数据格式),各种类型所占用的长度及表示个数的字段长度如表2所示。
例如,表2各字段值分别为1203,1453429819116,2,3,0,1,2即表示类型ID为1203的测点数据,依次由2个double型字段、3个int型字段、0个char型字段、1个float型字段和2个short型字段组成。
3.3内存数据库块内数据组织结构
单个测点数据的数据组织结构由数据头基本信息、测点数据值组成。其中数据头包括ID(占用4 B,上文已说明)、时间戳(占用8 B,表示为long型,取值为自1970年1月1日0时起到该时间的毫秒数,精确到毫秒)、测点值个数nums(占用1 B,即表2中的一共由多少个上述类型的数据值组成),测点数据值组由具体的共nums个对应上述类型的数据值组成,结构图如图1所示。
各测点块内数据按照图1结构组织数据,按ID检索块内数据参考结构,按其对应格式及顺序进行组织、打包、存储和解析。
4磁盘历史数据存储结构
实时数据库内核服务系统对实时数据进行打包缓存并同时写入磁盘文件系统,单个数据包大小为1 024×4=4 09图2数据包内部数据组织结构6 B,一个包映射到文件系统和磁盘中的一个block数据块,数据块结构如图2所示。
其中包ID占用4 B,开始时间占用8 B(同上),截止时间为最后一测点数据的时间减去开始时间所得的差值,表示为4 B整型。此时打包数据包内的各数据块数据格式则和内存数据库中的单个测点数据块格式略有不同,在其基础上省略了ID,时间戳也同样表示为与开始时间的时间差值,占用4 B。这样相当于对块内ID和时间戳进行了压缩,以减少空间。
5结论
本文在力数实时数据库的基础上,对现有内存测点数据结构和历史数据归档打包结构进行了重新研究设计,能够灵活扩展存储各种数据类型的测点数据,满足当前系统需求。在研究过程中,本文也还存在一些不足,比如内存数据索引结构的优化、历史数据块的进一步压缩等,这些都是本课题后续将要继续深入研究的问题。
参考文献
[1] 徐国风. 实时数据库关键技术研究[D]. 西安:西安建筑科技大学, 2006.
[2] 王焱, 徐新国, 朱廷劭. 一种工控领域内存数据库的设计与实现[J]. 微电子学与计算机, 2012, 29(8):98101.
[3] 曾强. 实时历史数据库的设计与分析[D]. 成都:电子科技大学, 2006.
[4] 钱笑宇, 张彦武. 工业实时数据库的研究和设计[J]. 计算机工程,2005, 31(1):9899.
[5] 梁巧玉. 实时内存数据库数据组织结构优化策略研究[D]. 太原:太原科技大学,2010.(收稿日期:20160320)