使用DI进行增量数据抽取的几种方式

3年前

增量数据抽取的核心问题是,通过什么办法可以找出上次数据处理完成之后变化的数据。


普元数据集成产品(Primeton DI)提供了以下几种方式可以找出这种数据变化。


u 基于触发器的增量数据抽取


在这种方式下需要在业务数据库中针对增、删、改三种操作建立触发器,并由触发器将变化的数据写入临时表中,最后由DI从临时表中读取数据,实现增量数据抽取


n 优点:借助数据库本身的机制,可靠性强


n 缺点:对源系统有影响,需要建立触发器以及临时表或临时数据存储文件


u 基于日志文件的增量数据抽取


这种方式是使用数据库本身的日志系统,由DI读取并解析数据库的日志文件,然后在目标数据库中进行相应操作。


u 优点:可靠性强,对源系统没有影响。


u 缺点:各数据库系统的日志文件绝大部分都是私有的,例如Oracle数据库的日志文件只有Oracle本身的ETL工具才可以读取。


u 基于时间戳的增量数据抽取


使用这种方式进行增量数据抽取的前提是源数据库与目标数据库都必须有时间戳字段。DI先读取目标数据库中的最大时间,然后以这个时间作为参数从源数据库中读取大于这个时间的所有数据。


u 优点:处理速度快,数据处理逻辑相对简单


u 缺点:源数据库没有时间戳字段的表需要更改表结构,而且需要源数据库来维护时间戳字段;无法实现数据同步,因为使用时间戳字段无法获取删除后的数据。


下图使用DI实现基于时间戳的增量数据抽取:



上图黄色连接线表示将上一组件获取的数据作为参数传给下一组件。

插入/更新:源数据库以目标数据库最大时间作为参数进行数据查询得到的数据有些是新增的、有些是修改的。插入/更新组件根据主键字段进行逻辑判断,如果目标数据库存在这一主键所描述的数据行,那么这条数据就进行更新操作,如果没有就进行新增操作。


u 基于全文比对的增量数据抽取


通过ETL引擎获取某一时刻源数据库与目标数据库的数据快照,然后逐一进行对比,找出新增、删除、修改的数据后进行相应操作。


u 优点:对源系统没有任何影响


u 缺点:面对海量数据(千万级、万万级)进行比对时有一定的性能问题


u 备注:全文比对的核心算法是将每条数据的每一列进行逐一比对,很显然这种频繁的I/O操作以及复杂的比对运算会造成较大的性能开销,在实际的应用过程中,可以事先对数据进行预处理,将每一条数据生成一个唯一的HASH值,然后由DI对这个HASH值进行比对,找出变化的数据。这样既减少了I/0操作又提高了计算效率。


下图使用DI实现基于全文比对的增量数据抽取:



上图实现了人力资源管理系统与财务系统间的数据同步。DI处理逻辑首先获取两个系统的数据快照,根据比对记录组件对数据进行逐一比对,并产生状态字段存储比对的结果,最后由过滤记录组件根据状态字段将数据划分类型并交给相应组件对目标数据库进行操作。

COMMENTS

1 个回应

Normal

dinglm 2015年01月29日 22:38

基于日志的方式 产品本身是否提供对日志文件监听的能力 能否做到根据日志的变化 进行数据实时的传输和抽取?

回复


需要 后方可回复
如果没有账号可以 一个帐号。