缺点:
时间戳维护需要由业务系统完成,对业务系统也有很大的侵入性(加入额外的时间戳字段),特别是对不支持时间戳的自动更新的数据库,还要求业务系统进行额外的更新时间戳操作;
另外,无法捕获对时间戳以前数据的delete和update 操作,在数据准确性上受到了一定的限制。
全量同步又叫全表删除插入方式,是指每次抽取前先删除目标表数据,抽取时全新加载数据。该方式实际上将增量抽取等同于全量抽取。对于数据量不大,全量抽取的时间代价小于执行增量抽取的算法和条件代价时,可以采用该方式。
同步流程:
优点:
对已有系统表结构不产生影响,不需要修改业务操作程序,所有抽取规则由ETL完成,管理维护统一,可以实现数据的递增加载,没有风险。
缺点:
ETL 比对较复杂,设计较为复杂,速度较慢。与触发器和时间戳方式中的主动通知不同,全表比对方式是被动的进行全表数据的比对,性能较差。当表中没有主键或唯一列且含有重复记录时,全表比对方式的准确性较差。
日志比对的方式是通过获取数据库层面的日志来捕获到变化的数据,不需要改变源业务系统数据库相关表结构,数据同步的效率比较高,同步的及时性也比较快,最大的问题就是前面所提到的不同的数据库的数据库日志文件结构存在较大的差异性,实施分析起来难度比较大,同时需要具备访问源业务库日志表文件的权限,存在一定的风险性,所以这种方式有很大的局限性。
日志比对方式中比较成熟的技术是Oracle的CDC(Changed Data Capture)技术,作用同样是能够捕获到上一次抽取之后的产生的相关变化数据,当CDC对源业务表进行新增、更新和删除等相关操作的时就可以捕获到相关变化的数据,相对于增量字段方式,CDC方式能够较好的捕获到删除数据,并写入相关数据库日志表,然后再通过视图或者别的某种可操作的方式将捕获到的变化同步到数据仓库当中去。
优点:
ETL同步效率较高,不需要修改业务系统表结构,可以实现数据的递增加载。
缺点:
业务系统数据库版本与产品不统一,难以统一实现,实现过程相对复杂,并且需深入研究方能实现。或者通过第三方工具实现,一般都是商业软件,而且费用较高。
触发器 关系型数据库 高 优 高 高 容易
增量字段 关系型数据库.具有”字段”结构的其它数据格式 低 较优 低 高 容易
全表同步 任何数据格式 高 极差 中 无 容易
日志比对 关系型数据库(oracle/mysql) 高 较优 中 中 较难
ETL 工具 为什么要使用ETL工具
当数据来自不同的物理主机,这时候如果使用SQL语句去处理的话就显得比较吃力且开销也更大
数据来源可以是各种不同的数据库或者文件,这时候需要先把他们整理成统一的格式后才可以进行数据的处理,这一过程用代码实现显然有些麻烦
在数据库中我们当然可以使用存储过程去处理数据,但是处理海量数据的时候存储过程显然比较吃力,而且会占用较多数据库的资源,这可能会导致数据库资源不足,进而影响数据库的性能。
ETL工具选择依据对平台的支持程度
抽取和装载的性能是不是较高,且对业务系统的性能影响大不大,侵入性高不高
对数据源的支持程度
是否具有良好的集成性和开放性
数据转换和加工的功能强不强
是否具有管理和调度的功能
主流ETL工具推荐 PDI(KETTLE)DATASTAGE免费 IBM商业软件
开源产品,使用纯JAVA代码编写的ETL工具 专业的ETL工具,价格不菲
跨平台 适合大规模的ETL应用
扩展性好