APP下载

数据库同步技术中变化数据捕获模式的研究与比较

2012-07-05卫红春

科技视界 2012年9期
关键词:发布者拷贝日志

刘 洋 卫红春

(西安石油大学计算机学院 陕西 西安 710065)

0 前言

随着各行业信息化建设的不断深入,企业各部门信息系统数量不断增加,这些系统之间存在着不同程度的隔离,导致资源无法相互使用,这就使得数据同步成为必然。

通常,目标数据库中所需的共享数据都是由源系统提供的。随着数据量的不断变化增长,资源和时间的消耗都是巨大的,特别是要求实时或近实时的生产库,每次数据同步的间隔时间可能更短。因此如果只是加载自上次提取之后发生变化的数据,那么效率就会明显增加。但是,在数据量巨大的源系统中,识别并提取最新变化的数据即使是可能的,也非常困难。除了识别最新变化数据的挑战之外,从一个源系统到多个目标系统同步改变数据也是一个挑战。

变化数据捕获(Change Data Capture,CDC)就简化了识别上次提取之后发生数据变化的过程,其也就成为解决各系统数据同步的基础。CDC策略有多种,无论从实际应用还是理论研究的角度,对于数据同步技术中变化数据捕获的研究都具有重要的意义。

1 数据变化捕获的基本概念

变化数据捕获(CDC),是用来描述捕获增量变化数据到其他数据库或数据源。CDC能够识别自上次提取之后发生变化的数据,在对源表进行增删改操作的同时就可以提取,并且将变化数据保存在变更表中,然后以一种可控的方式利用视图提供给目标数据库。

CDC是一个发布者/订阅者模型。发布者识别捕获变化数据,将其保存在变更表中,提供给订阅者;订阅者创建订阅者视图,从发布者那里获得授权的变化。一个发布者可以支持多个订阅者用户,也就是通常提到的一对多关系。

变更表中包含了源表中变更的数据。变更表中的数据分为两部分,一部分是变更数据本身,发布者将源表的主键和订阅者指定的数据加入到变更表中;另一部分是变更表中必要的和可选的控制数据,可选的控制数据由发布者在创建变更表时指定。控制数据由CDC来管理。

变更集是一组变更的数据,它作为整体来管理,可以保证事务的一致性。一个变更集属于一个变更源,一个变更源可以包括多个变更集。

2 数据变化的捕获方式

当前CDC有两种捕获数据方式:同步CDC和异步CDC。异步CDC又分为3种模式:异步HotLog模式、异步分布式HotLog模式、异步AutoLog模式。

2.1 同步CDC模式

图1 同步CDC模式

同步CDC模式通常都是在源数据库上配置触发器进行变化数据捕获。由于数据实时、连续在源系统中进行捕获,他是没有任何延迟的。当对同步对象进行数据增删改等操作时,触发器被唤醒,变化数据开始被捕获。同步CDC利用变更表和订阅者试图来实现。变化数据写入变更表,为使用CDC提供了一个可扩展的基础架构,订阅者针对变更表的数据可以获得一致数据变更集视图。用户可以扩展和清除订阅窗户,通过数据库视图隐式的改变数据集。如果没有任何用户订阅变化数据,变更表中的数据可以被清除。同步CDC通过PL/SQL包进行调用。同步CDC的优势在于配置简单,不需要配置复制、传输、提取等功能。

2.2 异步 HotLog模式

在异步HotLog模式中,变化数据捕获是从源数据库的online redo log中提取事务数据。在数据提交和写入日志时存在一定的时间差,这个捕获会有一些延迟。因为我们要设置变更表来存取变化的数据,所以这个变更表一定要在源数据库这端。图 2就是一个简单的 HotLog配置,LGWR(Log Writer)纪录提交的事务到在线重做日志文件 (online redo log)文件中,用Oracle Stream方式自动在HotLog数据源中填入变化数据到变更集中的数据变更表。

图2 异步HotLog模式

2.3 异步分布HotLog模式

在一个异步HotLog模式下,变化数据捕获是从源数据库的online redo log文件中提取事务数据。不像上述的两种模式,异步分布HotLog模式需要创建中间数据库(Staging Database),变化数据捕获的对象和动作横跨源数据库和中间库。变更源在源数据库中被定义,在中间库发布。图3说明异步HotLog分布模式的配置,源数据库的变更源 从在线重做日志文件中捕获变化的数据,写入源数据库的变更源,再用Stream方式填充到中间库的变更集中,数据会保存到变更集的变更表中。

在这种模式中,有两个发布者,一个是在源数据库、一个是在中间数据库。源数据库发布者定义一个数据库链接(DB Link)连接到中间数据库作为中间数据库的发布者,同时在中间数据库发布者也定义一个反向的数据库链接到源数据库作为源数据库的发布者。中间库发布者执行所有的发布操作,也就是源数据库操作引起的。

在这种模式下,反向的数据库链接创建是必须存在的,主要是为了创建、修改、删除中间数据库中的变更源、变更集、变更表使用的,在变化捕获的时候这个反向数据库链接并没有起作用。一旦中间库中的变化数据源、变更集、变更表启用后,这个数据库链接是可以被删除的,若要重新建立中间库,就需要重新启用这个数据库链接了。

图3 异步分布HotLog模式

2.4 异步 AutoLog模式

在异步AutoLog模式下,数据变化通过重做传输服务(Redo Transport Services)服务从重做日志文件或者归档日志文件(Archived Log Files)中进行捕获。重做传输服务自动捕获日志从源数据库到中间库。配置这种模式,需要设置数据库参数LOG_ARCHIVE_DEST_n做本地日志的归档目录。源数据库的发布者配置日志传输服务,然后从源数据库拷贝重做日志文件到中间库,在中间库自动注册重做日志文件进行数据同步。异步AutoLog模式中,异步AutoLog online模式是从重做日志文件中进行捕获,异步Autolog Archive模式是从归档日志文件中进行捕获。如果设置了AutoLog Online模式,重做日志传输服务会从源库拷贝重做日志到中间库或者目的库的备用重做日志(Standby Redo Log)文件中。源数据库提交事务后,中间库的变更集被填充数据。在中间库,只能有一个AutoLog Online变更源,也只能包含一个变更集。如果设置了AutoLog Archive模式,日志传输服务是拷贝归档日志到中间库,等中间库接受到归档日志后,变更集将被填充。

图4 异步Autolog Archive模式

图4显示的是AutoLog online配置模式,LGWR进程拷贝重做日志文件到中间库的备用重做日志文件。LGWR进程是用Oracle Net网络发送数据给中间库的远程文件服务(remote file server,RFS)进程。中间库的RFS进程会写重做日志数据到备用重做日志文件。变化数据再通过Oracle Stream downstream的方式填充变化数据到变更表中。

图5 异步AutoLog Archive模式

图5显示的是AutoLog Archive配置模式,归档进程归档重做日志到LOG_ARCHIVE_DEST_1,然后再拷贝数据到LOG_ARCHIVE_DEST_2指定的中间库。归档进程也是通过Oracle Net发送重做日志数据给RFS进程。在中间库,RFS进程将重做日志数据写到被拷贝的日志文件。再通过Streams downstream方式填充变化数据到变更表中。

3 变化数据捕获的比较与选择

上述共研究4类变化数据的捕获方式,各种方式都有其优缺点,各自依托于实际的技术领域和运行的业务环境,没有哪一种方式能取代其他方式成为通用标准。通过表1我们将各种方式对实际系统的特点及影响做一个简单比较。

通过比较,我们可以看出各类CDC模式的技术特点。比如,同步CDC模式通过在源数据库上建立触发器的方式来获取增量数据,因此可以做到实时抽取,但是对源系统影响较大;异步HotLog模式需要直接从源数据库解析日志文件,会有一段时间的延时,并会对源数据库有一定的压力;异步AutoLog模式则是直接把源数据库的日志文件传到中间库,然后进行日志分析,这样的方式对源库性能影响最小、数据传递性能最大。

表1

因此,根据数据库规模,合理的利用变化数据捕获技术能使我们更好的达到数据快速抽取的目标,以满足业务需求。

[1]尤玉林,张宪民.一种可靠的数据仓库中ETL策略与架构设计[J].计算机工程与应用,2005,41(10):172-174.

[2]张震.异构数据库同步系统的研究与实现[J].计算机应用,2002,22:43-45.

[3]Ooi B C,Shu Y F,Tan K L.Relational data sharing in peer-based data management systems[J].ACM SIGMOD Record,2003,32:59-64.

猜你喜欢

发布者拷贝日志
一名老党员的工作日志
新加坡新法规引争议
扶贫日志
唐氏综合征是因为“拷贝”走样了
基于NDN的高效发布/订阅系统设计与实现
游学日志
广告发布者的著作权审查义务问题研究
加权映射匹配方法的站内搜索引擎设计
Windows系统下强化容错拷贝命令的实现
一种基于粗集和SVM的Web日志挖掘模型