1 概述

  中国城市轨道交通产业已步入高速发展时期[1,2],地铁系统中积累了大量的数据,从中挖掘出有用的信息,对于地铁服务水平的提高将有极大裨益。其中实时数据对于战术决策的有效制定至关重要,因此,构建AFC动态数据仓库应用系统,为地铁系统运营管理过程中的战略战术决策制定提供支持。实时数据的有效获取对于动态数据仓库应用系统的构建至关重要,而传统的ETL技术不适用于业务数据库系统中变化数据的实时获取,但可通过相应的变化数据捕获技术来满足实时性需求。本文首先简要介绍数据仓库以及动态数据仓库相关概念,并对动态数据仓库应用系统构建过程中现有的各种变化数据捕获技术进行分析,结合AFC系统的具体应用需求,讨论各方法的优劣,并对实际应用做初步探讨。

2 数据仓库与动态数据仓库

  数据仓库(Data Warehouse, DW)的概念最初由William H. Inmon提出,即数据仓库是一个面向主题的、集成的、稳定的、随时间变化的用来支持管理人员决策的数据集合[3]。数据仓库中的基本数据和综合数据被分成一些不同的层次,包括当前基本数据、历史基本数据、轻度综合数据,高度综合数据与元数据。数据仓库凭借其粒度化数据的易访问性和对数据源的统一集成管理,使之成为体系结构化环境的核心和决策支持系统处理的基础[4]。

  动态数据仓库(Dynamic Data warehouse,DDW)的概念最早由Haisten Michael于1999年首次提出[5],以实现对实时事件的检测和处理以及战略和战术性的决策支持。动态数据仓库中的数据主要由实时性数据与非实时性数据组成,非实时性数据由传统的ETL技术获取,而实时性数据由变化数据捕获(Change Data Capture,CDC)技术获得。CDC技术以最小的时延获知各业务系统中新插入的或被改变了的数据,并将其有效集成,以供系统使用。根据变化数据捕获的时效差异,可将变化数据捕获方法分为两类,即实时性变化数据捕获方法和非实时性变化数据捕获方法,其中,实时性变化数据捕获方法具备实时捕获源系统中变化数据的能力,而非实时性变化数据捕获方法则只能在变化数据的捕获过程允许存在时间延迟的情况下才可以使用。

3 变化数据捕获技术
3.1 变化数据捕获方法

  1)基于文件或表的全扫描比对的方法:不断对文件或表进行全局扫描比对,将变化了的数据信息传递给动态数据仓库,并以同样的方式实现变化数据的写入。

  2)基于触发器的方法:对要进行数据抽取的数据表构建触发器,一旦在源表上有数据变化发生,即唤醒调用触发器以实现变化数据捕获。

  3)基于复制的方法:包括事务复制、快照复制和合并复制3种类型,其中,事务复制可使数据改变发生后数秒以内便可传播到订阅服务器,进而实现变化数据捕获;而快照复制则是依据数据与数据库对象的状态来对它们进行复制和分发,且是周期性的对其进行复制,故常常使用基于快照复制的方法来进行非实时的变化数据捕获。

  4)基于时间戳的方法:是一种基于快照比较的变化数据捕获方法,通过在源表中添加一个时间戳字段,每次对源表中的数据进行插入或更新操作时,也会对该记录所对应的时间戳字段进行更新。源表中变化数据主要是通过比较参照时间点与时间戳字段的值来识别进而抽取。

  5)基于日志的方法:由于大多数的数据库管理系统都具有日志机制,数据库系统中的所有数据操作,不论是数据定义还是数据操作控制,都会被如实的记录在数据库的日志之中,因此,可以通过读取并分析数据库系统中的日志信息来获取数据库源表中的变化数据信息。

  6)基于表刷新的方法:需要把相关表中的所有数据删除掉,重新开始全部的数据抽取和加载过程。此方法适用于没有必要对数据库源表中发生的所有变化进行记录、不用保留数据仓库的历史信息或数据获取过程无时间限制等情况。

  上述各变化数据捕获方法对比情况如表1所示。基于日志的变化数据捕获方法具有实时性好、占用系统资源较少,对源系统的影响较小以及变化数据的捕获性能好等诸多优势,故选用基于日志的方法来实现AFC动态数据仓库应用系统中变化数据的实时捕获。备份日志的读取在对数据库系统性能影响、日志文件的易控制性、易管理性及实时性等方面相对归档日志皆具有明显优势。因此,日志读取来源选定为备份日志文件。

3.2 日志读取与解析

  日志文件中的记录信息并不是以事务为单位顺序写入的,相邻两条日志记录很可能分别属于不同的事务,因此,为实现对各事务中涉及到的变化数据提取,需要对日志文件中的记录进行逐行扫描,并通过构建事务链表的方式来完整记录同一事务中的操作,由此得到的数据结构如图1所示。

  若读取到某事务的日志记录中存在rollback字段,则将该事务所对应的链表删除(如图1中的T3);若读取到某事务的记录中出现Commit字段,则将该事务链表数据导出至中间文件存储,并将原数据结构中该节点的链表移除(如图1中的T2);若读取到某事务中增删改操作的日志记录,则将相应的日志记录信息追加存储到该事务所对应的链表中(如图1中的T1和Tm),此时,若该事务尚未在存储数据结构中建立链表节点,则新建链表节点并追加存储相关操作信息;若未读取到任何记录信息,则保存各未完成事务的链表数据,并停止日志文件读取。具体日志记录信息抽取过程如图2所示。

  对于已完成提交的事务,日志信息抽取模块会将此类事务所对应的链表数据信息传至中间文件保存。通过正则匹配的方式对事务记录中的数据信息进行分析,提取出其中的相关数据信息,并将所得数据信息发送至数据队列中,此即为业务数据库系统中的变化数据捕获过程。

4 数据调度策略

  动态数据仓库系统中的变化数据捕获模块将及时对其中的变化数据进行捕获,但用户对不同类型数据的时效性要求不一样,有些数据(如客流量数据)的时效性要求较高,因此需要将这些数据优先导入到动态数据仓库系统之中,因此,数据实时调度策略至关重要。可以应用基于模糊控制的任务调度方法[6,7]来对数据队列中从ACC业务库系统中实时捕获到的变化数据进行实时调度,以满足系统需求。基于模糊控制的实时调度方案架构如图3所示。

  该实时调度方案架构主要由数据队列、调度控制器、挂起队列、优先级控制器、检测器等几部分内容组成,具体的实时调度策略如下:

  1)轮询数据队列,如果数据队列中有任务导入,则转至2)。

  2)在调度控制器中预先设定好所有任务的优先级,并根据系统当前的执行状态,将任务加载到任务队列,或将某些任务加载到挂起队列中,以待后续调度。

  3)应用优先级控制器检测任务队列的状态并对各任务进行分类,然后根据优先级的不同,将各任务分发到不同的运行队列中。

  4)使用循环判断的方法来调度和执行任务。首先判断任务表中是否存在需要优先执行的任务,若存在,则首先执行需优先执行的任务。若不存在,判断是否有新任务加入,若是,则转至2)。若无新的捕获数据进入任务队列,则依照任务优先级依次处理,期间若有新的数据进入队列,则在当前任务执行完成后,把运行队列中其余未完成的任务转移至挂起队列,然后转至1)。

  5)若运行队列中的全部任务均已完成,则转而执行挂起队列中的任务,此过程中,若检测到新的任务进入,则中止挂起队列任务执行并转至1)。

  由此得到的变化数据捕获方案架构如图4所示。

5 结语

  本文分析各变化数据捕获方法的技术原理及其适用范围,基于地铁AFC系统应用需求,选用基于日志的方法实现业务系统中的变化数据实时捕获,并给出日志信息提取和解析方法。根据时效性要求的不同,采用基于模糊控制的任务调度方法来实现对所捕获到的变化数据进行调度,以满足应用系统的数据应用需求,为AFC动态数据仓库应用系统的构建奠定数据基础,更好地服务于地铁系统运营管理。

参考文献

  [1]毛保华,姜帆,刘迁,等.城市轨道交通[M].北京:科学出版社,2001.

  [2]韩飞.对地铁明挖车站的防降水施工的探讨[J].城市建设理论研究,2014(24):854.

  [3] Inmon W H.数据仓库[M].3版.王志海,译.北京: 机械工业出版社,2003.

  [4]姜智远.动态数据仓库的研究与应用[D].太原:太原理工大学,2008.

  [5] Haisten M.Real-Time Data Warehouse:The Next Stage in Data Warehouse Evolution[M].DM Review,1999.

  [6]金宏,王宏安,傅勇,等.模糊反馈控制实时调度算法[J].软件学报, 2004, 15(6):791-798.

  [7] Shi J G,Bao Y B,Leng F L,et al.Study on Log-Based Change Data Capture and Handling Mechanism in Real-Time Data Warehouse[C]//International Conference on Computer Science and Software Engineering.IEEE,2008:478-481.