ORACLE物化视图解决CMS数据同步一例 与 来不及的DATA PIPLELINE

2019-06-21 16:34:32 浏览数 (1)

为啥要牵扯仅DataPiple Line, 因为如果有DataPipe Line,我下面的故事就不用写了。所以一项新技术和软件的开发可以解决不少头疼的问题。那下面就先来看看问题。

人有多少想法,其实就有能满足你需求的东西,例如Dta Pipleline ,它能解决的问题我现在就能想到几个

1 异构数据库的灰度发布,更换数据库系统的麻烦事就可以通过这个数据管道系统解决。

2 大数据的实时分析。

3 数据同步与单库对多库数据下发,并能解决可能出现的性能问题。

4 生产库到测试库的数据脱敏与数据实时同步

当然还有他本身的功能,数据管道。

故事是开始最近由于要拆分原有ORACLE数据库的部分功能,到MYSQL上,需要数据同步,数据库同步方法很多,但找到一个合适的确不容易,不是技术上困难,而是方法太多,可能会有选择恐惧症。而且我发现一个问题,就是怎么想都是简单的事情,到真做的时候,就变得不那么单纯了,各种问题出现,其实干了这么多年,大风浪还是见过的,所以一直不敢说,这个没问题,那个很一般,这个一定能行(当然打气,鼓励别人或自己的时候,还是要说的)。

任何一项技术的使用其实都要根据业务来决定,单纯从技术出发的方式来决定某项技术的使用,嗯...... 这次的任务的一开始其实想的很简单,就是使用Kettle 来进行数据的抽取从ORACLE 到 MYSQL ,而问题既不在KETTLE 也不在数据库的层面,问题的发生还是在非技术的层面,问题的在对CMS 系统的某些表的数据更改的触发点还不清楚,而如果以不清楚的方式来面对如何撰写相关的提取语句,则这样的结果就会引起一个关联的效应, 1 由于抽取数据的变化点无法找到,所以提取数据的点就无法找到,2 无法找到点,则就无法进行SQL语句的增量的提取 3 无法增量提取数据,开发的同学就无法获取正确的数据 4 无法有正确的数据则整个项目就要出现问题, 连锁反应。

解决问题从来不缺技术的方案,而是缺靠谱的和稳定的方案,所以一个方案的出台,尤其是一个没有尝试过的方案,则困难的程度和失败的可能性都是有的。我们一定要找到一个能从,业务,开发,运维,三方能都承受和认可的方案来进行方案的确定。

既然是某些取数的点和数据的变化还吃不准,怎么通过技术的手段让变化能被捕捉到,方法很多。

最近我们在开始测试 DATA PIPLELINE 如果通过DATA PIPLELINE 来做这个数据同步方案,其实事情将变得简单的多,首先是从底层来进行数据的抽取,同时也能定期的进行刷新等等,所以ORACLE 到 MYSQL 数据的流就像打开水龙头那么简单,数据和水一样要来就来,要关就关。当然有了DATAPIPLE LINE 我们的KETTLE 一大部分的功能都可以不再使用。

但好事其实都需要等,项目不会等,目前的需求还是得传统的方式获得变化的数据,并且在一个时间点,这就想到了 物化视图,通过物化视图 ON DEMAND 时间点的方式,我们就可以很方便的知道我们关切的表在一天当中数据的变化情况。

说道物化视图,ORACLE 还是传统数据库里面最强悍的,其他的都没有ORACLE 来的功能多,方式多,所以各个数据库其实也应该学习,SQL SERVER 就在2016 搞出了一个 temporal Table, 虽然可以搞定部分问题,但本身对并发时的事务的BUG 也绝对够繁忙的系统喝一壶。

话归整体ORACLE 怎么能满足我们本次KETTLE 的数据物理的方式提取方式。

首先CMS 系统所在的ORACLE 需要将需要复制的表,建立物化视图,并且建立物化视图的日志。并且要求是表和物化视图都应该有 primary key,否则就要考虑其他的方法了。

貌似问题好像解决了,但其实出其不意的问题就在你觉得没有问题的时候发生了。

我们是通过 MLOG$_CMS_TEST 里面的ID

来进行判断数据是否为增量。

那问题就来了,

问题

1 数据在操作过程中,会有 I U D 三类的操作,但如果是D 则这条数据应该是被清除了,所以我们在复制的过程中,应该从我们的复制的语句中剔除这个ID。

2 那解决这个问题就用下面的语句,直接将已经删除的记录滤除,存在的只有 insert 和 update 两种语句,那问题貌似解决了,其实呢

3 实际上,没有,如果这时我在插入数据,因为按照主键的方式,则我还插入原来的已经删除的主键,则上面的语句就会出错,因为新插入的数据被过滤了。

所以忽略业务的方案都不大是一个稳重的方案,这里假设删除的数据不会再会补,并且也不会按照原来的主键进行插入。那上面的方案就不会有问题,否则还有漏洞。

最后,我还是期待用新技术来将某些业务中问题解决掉,快速,安全,稳定,例如我期待的 Data Pipleline 能增加 postgresql 目的端的功能,则那些期待从Oracle ,sql server ,转移到Postgresql 的项目人员的头发还能茂盛更长一段时间。

0 人点赞