在要抽取的表上建立需要的触发器,一般要建立I(INSERT)、D(DELETE)、U(UPDATE)三种触发器;每当源表中的数据发生变化,就被相应的触发器将变化的数据写入到一个临时表中,再通过ETL工具从临时表中抽取数据写到目标表中,同时要将临时表中抽取过的数据标记或者删除。
优点:是数据库本身的触发机制,契合度高,可靠性高,不会出现有增量数据没有被捕获到的现象。
缺点:因为要在业务表中简历触发器,对元数据库有影响,可能会对业务系统构成威胁
对比数据的修改时间和上次发起数据同步的时间,将修改时间大于上次数据同步时间之后的数据抽取出来进行同步。
优点:逻辑清楚,流程简单
缺点:业务数据库必须存在不为空的修改时间。若只有创建时间不可行,会导致基某一个时间错(创建时间)之后的修改行为(修改或者逻辑删除)无法捕捉到
为要抽取的表建立一个类似结构的快照库表;每次抽之前,对比源表和快照表,(对比方式可以使用字段一一对照或者布隆过滤器),找出更新的数据;将更新的数据同步到目标库表上;最后更新快照表
优点:逻辑清楚;对源库表没有影响;对目标库影响小
缺点:源表和目标表都需要主键,源表主键用于对比找出增量数据,目标表主键用于同步时跟源表建立映射关系;适用于数量比较小的表
每次操作均删除目标表的数据,再将源表的数据全量同步到目标表中。
优点:简单暴力,速度快
缺点:对目标表之前的存量数据影响较大,每次同步都会将之前的目标库数据完全舍弃,目标库的存量数据即使备份,意义也不大(因为数据不全);不适合需要进行数据修复的场景
数据库同步工具 | 简介 | 优点 | 缺点 |
---|---|---|---|
canal | canal是有Alibaba开源的一个基于binlog的增量日志组件,核心原理是canal伪装成吧Mysql的slave,发送dump协议获取binlog,解析并存储起来给客户端消费 | 可以同步任何非查询类型的操作。DDL和DML语句(除了数据查询语句select)。增量和全量都可以 | 数据源只支持Mysql,因为使用了Mysql的binlog特性 |
otter | otter是一款基于Java且免费、 开源基于数据库增量日志解析,准实时同步到本机房或异地机房的数据库的解决方案 | 支持单向同步,双向同步,文件同步,双A同步等多种同步解决方案 | 同canal,因其使用canal来进行同步的 |
yugong | yugong是Alibaba推出的Oracle数据库迁移同步工具,支持全量和增量两种抽取方案 | 数据库支持oracle作为源,支持异构数据,实现相对简单 | 由于是以oracle物化视图为基础去做的增量方案,类似于trigger机制会对数据库写入造成一定的影响 |
datax | datax是一个异构数据源离线同步工具,致力于实现包括关系型数据库(Mysql、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的同步功能 | 支持非常多种数据库同步,原理是通过select同步的 | 不支持DDL同步 |
参考资料:
https://blog.csdn.net/mochou111/article/details/80995156
https://blog.csdn.net/yangtongli2012/article/details/51725408