实现实时的增量更新数据源为数据库的三种方法

  • 3
  • 1,165 views
  • A+
所属分类:数据分析

1.通过触发器
在要抽取的表上建立需要的触发器,一般要建立插入、修改、删除三个触发器,每当源表中的数据发生变化,就被相应的触发器将变化的数据写入一个临时表,抽取线程从临时表中抽取数据,临时表中抽取过的数据被标记或删除。
触发器方式的优点是数据抽取的性能较高、可以做到近乎实时;
缺点是要求业务表建立触发器,对业务系统有一定的影响,需要有业务系统数据库权限比较高的账号、用户也不一定会同意。
此外,当需要实时抓取的表列非常多的情况下,生成触发器的过程本身也非常漫长。

2.通过时间戳(特殊数据类型)
在数据库打个标记,下次抽取的时候接着抽取新增的。
它是一种基于快照比较的变化数据捕获方式,在源表上增加一个时间戳字段,系统中更新、修改表数据的时候,同时修改时间戳字段的值。
当进行数据抽取时,通过比较系统时间与时间戳字段的值来决定抽取哪些数据。有的数据库的时间戳支持自动更新,即表的其它字段的数据发生改变时,自动更新时间戳字段的值。有的数据库不支持时间戳的自动更新,这就要求业务系统在更新业务数据时,手工更新时间戳字段。同触发器方式一样,时间戳方式的性能也比较好,数据抽取相对清楚简单,但对业务系统也有很大的倾入性(加入额外的时间戳字段),特别是对不支持时间戳的自动更新的数据库,还要求业务系统进行额外的更新时间 戳操作。另外,无法捕获对时间戳以前数据的delete和update操作,在数据准确性上受到了一定的限制。

3.读取数据库日志的方式
通过一定的开发,实时监听业务系统数据库日志文件,解析出有变化的部分,抓取到数据仓库

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:3   其中:访客  3   博主  0

    • ag

      debezium是一个开源的分布式CDC系统,支持对接各种数据源,将上游已持久化的数据变更捕获后写入消息队列。
      https://github.com/debezium/debezium
      上游是PostgreSQL、MySQL时,支持通过WAL、BINLOG实时捕获已提交事务数据。
      https://github.com/debezium/postgres-decoderbufs

      通过这种方法,可以将数据从MySQL实时同步到PostgreSQL,或者从其他系统,将数据实时同步到PostgreSQL。
      由于PostgreSQL的功能强大,支持并行计算、空间数据处理、文本分析、数据挖掘、机器学习、复杂查询、冷热分离存储、分布式架构(citus, greenplum, xl)等。
      PostgreSQL可以用于这些系统的中心数据库(分析、复杂查询、挖掘),搜索引擎(全文检索、模糊检索、相似检索),实时预警(流式事件处理),空间数据库(PostGIS空间数据实时处理)。

      • ag

        CDC:change data capture。经常被叫做增量数据抽出。实际上这个说法并不严谨,增量只是意味着insert。change data的意思则是 insert,update和delete,变更数据抽取貌似更加合适。

        • ag

          kettle数据同步的五种方案

          数据同步:当数据源发生改变时,其他相关数据也跟着发展变化。根据需求不同可采取以下方案。

          1.触发器

          在数据库建立增删改的触发器。触发器将变更放到一张临时表里。oracle同步cdc
          优点:实时同步
          缺点:影响到业务系统,因为需要在业务系统建立触发器

          2.日志

          通过分析源数据库日志,来获得源数据库中的变化的数据。oracle异步cdc
          优点:不影响业务系统
          缺点:有一定得延时,对于没有提供日志分析接口的数据源,开发的难度比较大

          3.时间戳

          在要同步的源表里有时间戳字段,每当数据发生变化,时间戳会记录发生变化的时间
          优点:基本不影响业务系统
          缺点:要求源表必须有时间戳这一列

          4.数据比较

          通过比较两边数据源数据,来完成数据同步。一般用于实时性要求不高的场景。
          优点:基本不影响业务系统
          缺点:效率低

          5. 全表拷贝

          定时清空目的数据源,将源数据源的数据全盘拷贝到目的数据源。一般用于数据量不大,实时性要求不高的场景。
          优点:基本不影响业务系统,开发、部署都很简单
          缺点:效率低
          总结:
          1. 上面五种数据同步方式,除了第五种都需要业务表有主键。
          2. 对于没有触发器和日志的一些小型数据源,如txt 文本,excel 文件,Aceess,则只能使用后三种方式。

          3. 对于大型数据源,一般优先选择日志方式,如 ORCALE Asynchronized CDC, 对于不能通过日志来实现的情况,可以考虑第1,3,4种方式。

          转载:http://blog.csdn.net/foreverling/article/details/10625701