最近调查了一下从数据库中增量抽取数据的几种方案。下面是一个比较粗的结论。
方法1:基于时间戳
以某个时间字段为条件,检出新增数据。
适用条件:表中有时间字段,并且是事件型的数据,不需要反映数据的删除和更新。
对性能的影响:抽取时增加系统负载
方法2:触发器
数据更新时通过触发器拷贝数据。
适用条件:预先定义触发器
对性能的影响:对更新操作的性能有一定影响
方法3:从redo日志抽取
Oracle可以通过LogMiner从日志中分析出SQL语句,再还原。SQL Server也有类似解决方法。
适用条件:系统运行于归档模式下,并做好相关配置
对性能的影响:总体上对性能的比较小,但部署比较复杂
方法4:全表对比
对性能的影响:比较大,不适用数据量很大的情况
对方法1和方法4可采用以下对策减小性能影响:
1)按时间对数据分区
2)通过备份恢复,在线日志恢复等手段建立备机,在备机上抽取数据。
总结:
在性能影响可以接受的情况下,建议采用方法1或2,比较简单。否则采用方法3。
另外,也可以使用专用抽取工具,如SSIS,ODI等。
专用工具也是基于前几种方法实现的,比如ODI提供基于触发器和基于redo日志抽取方案。
但专用工具比起自己开发,能更快部署。