基于内存数据库的海量数据实时处理策略

2013-10-13 08:01:18刘宝华
舰船电子对抗 2013年1期
关键词:数据库系统磁盘海量

刘宝华

(连云港杰瑞深软科技有限公司,连云港222006)

0 引 言

随着信息化建设的发展,传统的磁盘数据库(DRDB)在对数据进行维护和管理上扮演了十分重要的角色。然而,在目前的大型作战指挥信息系统中,随着数据和信息量的剧增,不仅要求数据库系统具有强大而完备的功能和复杂的事物处理能力,更需要在指定的时间内对海量数据进行采集、处理,并能实时、高效、快速地做出反应。对于传统的磁盘数据库而言,需要频繁地访问磁盘来进行数据的操作,当处理海量数据时,大量的I/O操作成为海量数据实时处理性能的瓶颈,很难提供高性能的实时处理能力,而内存数据库(MMDB,也叫主存数据库)将应用程序需要的实时数据存储在内存中,由于数据库的操作都在内存中进行,从而有效地解决了磁盘I/O操作的瓶颈问题。当然,内存数据库也有自身特性的限制,很难将大量的数据完全存储到内存数据库中,因此研究一种新的基于内存数据库的海量数据实时处理框架十分必要。

目前,解决海量数据实时处理的问题,一般采用对Oracle数据库的优化策略,并结合共享缓存区来缓解海量数据的压力,然而指挥作战系统对实时处理的要求非常高,简单地将Oracle数据库优化与设立共享缓存区结合很难满足高效、快速的反应能力。为此,本文介绍通过改进内存数据库事务处理、采用订阅分发机制和多模式容灾的高可用性(HA)模式等技术,建立一种新的基于内存数据库的海量数据实时处理框架,并很好地应用在指挥作战系统中,通过试验证明新框架的优势所在。

1 内存数据库的引用

1.1 传统基于Oracle海量数据处理

现有的指挥作战信息系统中,数据维护和处理基于单一Oracle数据库系统,在处理海量实时数据时,通过分区存储、批量存取和分页查询等数据存储访问策略来改善实时性能[1]。在试验过程中,将情报处理后的数据存储到Oracle数据库中,同时各个台位也从Oracle数据库中获取相应的信息;另外,在重演重放过程中,实时报文重演模块从Oracle数据库中提取报文数据。外部情报批量不是很密时,该应用框架能够很好地满足试验数据处理的需要。

随着作战指挥系统中装备种类和数量越来越多,外部情报更加复杂,信息量也越来越大,在密集报文情况下,很容易发生网络阻塞甚至严重的报文丢失[2]。另外,随着试验的频繁进行,数据存储量越来越大,当数据量不断突破GB、TB甚至PB、EB级时,Oracle数据库检索操作越来越慢,相对高时效的要求,基于磁盘存储的Oracle数据库很难在可控的响应时间内完成相应的操作。

1.2 内存数据库技术

磁盘数据库对海量数据实时处理存在大量的I/O操作,而内存数据库将应用程序需要的实时数据存储到内存中。由于数据库的操作都在内存中进行,所以能够对密集报文和海量数据做出及时响应,提高时效性。

1.2.1 内存数据库的概念

对于内存数据库而言,很多人认为将所有的数据库都存储在内存数据库中,而且在对数据库的操作过程中,任何时刻整个数据库都存储在内存中,这样就可以避免I/O操作;然而,这样的设计具有很大的局限性,这种情况只能解决特定要求的实时数据,而对海量数据的处理则无能为力,因为内存数据库根本无法满足在任何时刻都能容纳整个试验过程中的所有数据。

针对海量数据实时处理来说,简单的内存数据库无法解决内存存储量的问题,而内存数据库的本质特征是其主拷贝或“工作版本”常驻内存,故被广泛认可的内存数据库定义为[3]:

设有数据库系统(DBS),DB为DBS中的数据库,DDBM(t)为在t时刻DB在内存的数据集,DDBM(t)是DB的子集。Ts为DBS中所有可能的事务的集合,A(t)为在时刻t处于活动状态的事务集,A(t)是Ts的子集。Dt(T)为事务T在时刻t所操作的数据集,Dt(T)是DB的子集。若在任何一时刻t,均有:对任意T∈A(t),Dt(T)是DDBM(t)的子集成立,则称DBS为一个内存数据库系统(MMDBS),DB为一个内存数据库(MMDB)。

也就是说,内存数据库并不是存储整个试验的所有数据,但在任何时刻至少能存储一个事务所要求的数据集。

1.2.2 内存数据库和Oracle数据库的结合

要达到MMDBS的要求,只把数据存储到内存数据库中是无法实现的,一定要有外部存储。在作战指挥信息系统中,随着试验的频繁启动,系统中的数据是在不断地变化和积累的,尤其在试验阶段结束时需要将数据存储到磁盘数据库Oracle中,而下次试验开始后又需要从Oracle数据库中提取实时性要求高的数据到内存数据库中,这就涉及内存数据库和Oracle数据库的结合。因为在试验过程中,有些后台程序的事务操作是直接针对Oracle数据库的,这样就出现Oracle和内存数据库中数据的同步问题。保证Oracle数据到内存数据库的同步可以采用增量表的方式,当Oralce中新增或更新需要实时处理的数据时,在增量表中添加1条记录,同步处理模块发现增量表为非空时就将这些数据更新到内存数据库对应的表中。

2 新型基于内存数据库的海量数据处理方案

2.1 内存数据库系统的改进

根据MMDBS的定义可以看出,由于内存数据库很难保证在任何时刻都存储整个数据库,毕竟内存数据库开辟的内存容量是有限的,所以MMDBS提出,内存数据库存储的是“工作版本”,也就是在任何时刻都能存储1个或多个事务所需要的数据集,并不要求存储整个数据库,这样也就解决了内存容量的问题。当然,要保证任何时刻都能使事务操作有效,就要事先做好优化策略。

在作战指挥信息系统中,根据数据的使用特性可以分为实时数据和动态数据2种。实时数据主要是由实时报文信息组成,这类数据在同一时间会非常密集,甚至每秒可能会达到成千上万批次,对其响应的速度将直接影响系统的可用性;动态数据是那些变更频繁的数据,而且其数据量可能会很大,甚至包括一些历史数据,所以这些数据一般存储在磁盘数据库Oracle中,但其频繁的变更也会要求较高的实时性。实时数据除了应用层实时处理外,有时也会要求存储到Oracle数据库中作为历史数据,而磁盘历史数据也会在重演、重放模式下由Oracle数据库导入到内存数据库中成为实时数据。在大型作战指挥信息系统中,由于海量数据的存储,MMDBS要求在内存数据库和Oracle数据库之间寻求最佳的平衡点,来达到对海量数据实时处理的要求。

要达到内存数据库和Oracle数据库的平衡,最主要的目的是保证任何时刻内存数据库中都能找到至少1个事务所要求的数据集。

2.1.1 实时数据处理

对实时数据而言,由于报文的处理效率略低于报文载入的效率,而其在试验过程中,报文基本是密集型的,这样在内存数据库中会保证处理事务操作的有效性。在作战指挥信息系统中,这样的实时报文数据为非持久性数据,也就是说在对这些数据处理结束后将其在内存数据库中清除,或者根据需求转存到Oracle数据中成为历史数据,从而保证内存的可用。当然,这种实时报文处理的方式有可能会出现2种情况:一是内存数据库中的数据为空,这说明信息处理端将所有的数据处理完毕,而内存数据库中没有新的报文信息载入,这时信息处理需要进入等待状态;另一种是内存数据库被写满,出现这种情况的主要原因是信息处理程序未启动,这时就需要一种淘汰算法,如用先进先出(FIFO)算法淘汰内存驻留时间最长的数据、用最近最少使用(LRU)算法淘汰最近最少使用的数据,或者根据具体需求自定义淘汰算法。

2.1.2 动态数据处理

对于动态数据而言,数据量非常大,所以一定要依据特定的数据交换策略,将数据在内存数据库和Oracle数据之间装入和换出,并确保信息处理事务执行时无I/O操作,为达到这个目标,要做到以下几点[4]:

(1)建立事务表,并根据事务等级建立优先级;

(2)根据事务表,采集事务数据,并以事务数据集作为基本装入单位,进行内存数据库载入;

(3)接纳新事物时,事务优先级重新排序,并调整事务集数据的换入;

(4)启动定时数据载入;

(5)建立增量表,记录数据新增或更新的数据,一致性处理模块通过读取增量表保证Oracle数据库和内存数据库中数据的一致性。

2.2 分布式内存数据库

根据对内存数据的改进,可以很好地解决内存数据库和磁盘数据库Oracle的平衡,保证实时处理程序在内存数据中完成各种事务处理。然而在大型作战指挥信息系统中,情报处理目标越来越多,导致磁盘数据库中的数据量逐渐增大,在处理海量数据时,内存数据库和Oracle数据库的简单结合已经无法满足实时性的要求,必须寻找一种新型的基于内存数据库的海量数据实时处理方案。

在大型作战指挥信息系统中,根据试验要求把系统分为很多功能台位,每个台位处理相应的任务,这样根据各个台位的功能建立分布式内存数据库系统。分布式数据库是指物理上分散在计算机网络的各个结点上、而逻辑上属于同一个系统的数据集合[5]。在这个系统中,要满足:

(1)各结点内存数据库有其自治性;

(2)分发给各结点内存数据库的数据具有排他性,这样可以减少相同数据的多次载入;

(3)各结点内存数据库间相互协调,最好的办法是每个内存数据库都可以作为其他结点的服务端;

(4)保持数据分布的透明性。

这样分布式内存数据库系统就能很好地满足数据的分布性和数据库间的协调性两大特点[6],再结合内存数据库和Oracle之间平衡的改进,就能很好地解决海量数据实时处理的要求了。

3 作战指挥信息系统中实时数据的处理

在作战指挥信息系统中,根据台位功能的不同,将来自外部情报的报文和Oracle数据库中的实时信息采集到传输总线,同步处理模块再根据各台位订阅的信息主题,将总线中的实时信息按照主题分类,并载入到对应的内存数据库中,这个过程通过订阅/分发来实现。

3.1 应用框架设计

内存数据应用于作战指挥信息系统中的模型框架(如图1所示),各台位中的软件模块订阅本模块需要的信息主题,将这些订阅信息存储到订阅表中统一维护[7]。当外部有情报发送或者Oracle数据库中有需要提升为实时处理的数据时,将这些信息传送给数据总线,然后订阅分发模块根据订阅表中的信息,将这些信息按照主题存储到相应的内存数据库中,并通知各台位中的应用端软件模块到内存数据库中提取相应信息。

图1 内存数据库应用于作战指挥系统的应用框架

3.2 订阅分发

订阅分发(又称为发布/订阅)是一种匿名服务机制,依据语义特性将事件流从发送者传播到接收者。发布消息的客户端只需要简单地将消息以主题的形式发送出去,而订阅客户端只需要订阅需要的信息主题,发送者和订阅者之间并不需要建立直接的专用信息通道。他们之间的通信通过消息代理来完成,消息代理可以参照Java消息服务(JMS)规范,一个特定的JMS实现可以提供基于传输控制协议/互联网协议(TCP/IP)、超文本传输协议(HTTP)、安全套接层(SSL)等其它通讯协议[4]。在订阅分发模式下,用户被分为2类:发布者和订阅者。发布者不关心信息流向何方,只需要发出信息就可以了;而订阅者只关心自己需要的信息,并订阅这些信息,也就是提出信息申请,当有发布者发布该信息的时候,信息就可以送达订阅者。当然1个用户也可以作为发布者和订阅者,订阅分发模型框架如图2所示。

图2 订阅分发模型框架

在作战指挥信息系统中,除了实时报文外,还需要解决大量来自Oracle数据库中的实时数据,所以形成一种特殊的订阅分发形式,一方面处理实时报文,另一方面提取Oracle中的数并转换为基于主题的形式,从而实现统一的订阅分发。另外,为了支持异步方式,将实时发送的报文和来自Oracle的数据以主题的形式存储到内存数据库中图1所示的整体框架,直到所有的订阅者收到信息。如果订阅者离线,则在下次启动时由消息代理通知订阅者去读取信息。

3.3 内存数据库的安全处理

内存数据库系统的安全隐患主要来自于数据的永久性存储和断电等异常处理。在嵌入式系统中,系统资源紧凑,常规数据库无法使用,导致可以选择的数据管理方案少。而且要保证数据的持久性,通过内存数据库的引擎技术,将对数据库的操作信息存储到日志缓冲区中,然后由后台进程同步到磁盘上的日志文件中。同时每隔一段时间将内存中变化的数据增量写到磁盘上的数据文件中,最后清除已经同步的日志文件,这样,当数据库重启后可以通过这些文件进行自动恢复。另外为了防止异常掉电数据丢失引起的整个作战指挥信息系统的崩溃,采用多模式容灾的HA模式,将内存数据库进行一对多或者多对多的备份,当主站异常掉电后,会有其它副站自动升级为主站,维持系统的正常运作。主站和副站之间通过初始同步定时器、心跳检测定时器、发送定时器和接收定时器来保证主站和复杂的同步。

4 结束语

在大型的作战指挥信息系统中,根据对庞大的雷达情报、指挥控制、模拟仿真等信息以及来自磁盘数据库中的数据实时处理的要求,本文提出基于内存数据库的海量实时处理新方案,对内存数据库系统进行改进,并结合内存数据库的集群处理,将海量数据分担到多个内存数据库中并发控制;另外,根据订阅分发将实时数据按照主题的形式存储到相应的内存数据库中,保证了海量数据的实时处理,同时也解决了系统的通讯问题。目前,基于内存数据库的海量数据实时处理模型成功地应用于作战指挥系统中,证明了其高效性和可靠性。

[1]唐志军.基于Oracle的海量实时报文存储访问策略[J].指挥信息系统与技术,2011(3):41-48.

[2]张未平.指挥信息系统体系作战结构研究[M].北京:国防大学出版社,2011.

[3]Hector Garcia Molina,Kenneth Salem.Main memory database system:an overview[J].IEEE Transactions on Knowledge and Data Engineering,1992,4(6):509-516.

[4]廖国琼.嵌入式移动实时数据库事务处理技术[M].北京:中国铁道出版社,2010.

[5]欧阳京武.分布式数据库系统概论[M].北京:航天工业出版社,1989.

[6]肖迎元.分布式实时数据库技术[M].北京:科学出版社,2009.

[7]夏火松.数据仓库与数据挖掘技术[M].北京:科学出版社,2011.

猜你喜欢
数据库系统磁盘海量
一种傅里叶域海量数据高速谱聚类方法
解决Windows磁盘签名冲突
电脑爱好者(2019年2期)2019-10-30 03:45:31
海量快递垃圾正在“围城”——“绿色快递”势在必行
当代陕西(2019年14期)2019-08-26 09:42:00
修改磁盘属性
数据库系统shell脚本应用
电子测试(2018年14期)2018-09-26 06:04:24
微细铣削工艺数据库系统设计与开发
磁盘组群组及iSCSI Target设置
创建VSAN群集
实时数据库系统数据安全采集方案
电信科学(2016年10期)2016-11-23 05:12:00
一个图形所蕴含的“海量”巧题