一种数据同步方法及装置的制造方法_3

文档序号:9564605阅读:来源:国知局
到源端变化记录表;
[0108]当源端表发生删除操作且所述源端表为主表时,把所述源端表的主键信息记录到源端变化记录表;当源端表发生删除操作且所述源端表为从表时,根据表间关联关系查询出所述源端表对应主表的主键,并将所述主键信息记录到源端变化记录表;
[0109]当源端表发生更新操作且变化的列是需要同步的列,则先执行删除操作,之后判断本条数据变化是否满足关联条件,如果满足,从关联的源端表中查询获取相应的列的数据插入到源端变化记录表。
[0110]可选的,所述建立模块24,还用于建立中间表、目标变化记录表以及中间表的触发器,
[0111]所述转换模块22,包括中间表上建立的触发器,具体用于根据源端变化记录表数据生成相应的SQL语句;在所述中间表上执行所述SQL语句时,所述中间表上建立的触发器调用字典转换函数和/或数据库常规函数进行数据的字典转换和/或类型转换。
[0112]可选的,如图4所示,该装置还包括第三获取模块25 ;
[0113]所述第三获取模块25,用于根据同步模板和配置信息,获取同步代码,以便上述其他模块根据所述同步代码实现数据同步。
[0114]可选的,如图5所示,该装置还包括第四获取模块26,
[0115]所述第四获取模块用于根据以下一项或多项获取配置信息:
[0116]源端数据库和目的端数据库的链接信息;
[0117]源端表间的关联关系;
[0118]源端和目的端的列对应关系;
[0119]源端和目的端的字典对应关系。
[0120]本发明上述实施例可以应用于源端多个表同步数据到目的端一个表的场景,从而应用范围更加广泛,实用性更高。
[0121 ] 下面通过具体实施例对本发明的技术方案进行详细说明。
[0122]实施例1
[0123]本发明实施例利用数据库的触发器、函数、存储过程等技术,实现数据库表级别的数据同步。除了能实现常规的源端一个表到目的端一个表的数据同步外,还提出了支持源端多个表的关联数据同步到目的端一个表的解决方案,从而应用范围更加广泛,实用性更高。另外,应对源端或者目的端表结构变化等原因引起同步代码的变化,本发明实施例提出了导入配置自动生成同步代码的程序设计和实现方案。
[0124]本实施例中数据同步方案设计原理如图6所示,图6描述多表到一表的数据同步过程,图中表示需要把源端的四个表(A、B、C、D)关联的查询结果同步到目的端表(tarTab)。数据同步涉及到三个层次,分别是源端数据获取层、中间数据转换层和目标结果层。以下分别进行详细阐述:
[0125]1、源端数据获取层
[0126]源端工作主要包括:
[0127]1)根据源端表间关系建立视图;
[0128]这里,根据表间关联关系建立视图。确定出其中的某个表的主键作为整个关联结果的主键,此表我们称其为主表,其他表称为从表。本实施例中建立视图可以采用下所示的方式:
[0129]Create view SourceView as Select a.1d, b.coll, c.col2, d.coin
[0130]from A,B,C,D where a.1d = b.fid and......
[0131]2)根据视图结构建立记录数据变化的中间表sourceSdwTab ;
[0132]需要说明的是,此表含有列cmd, old_id, old_coll, old_col2, old_coln, new_id,new_coll, new_col2, new_coln, inserttime。此表各列的类型按照视图中涉及的列的类型来定义。
[0133]3)在涉及的所有源表上分别建立触发器。
[0134]这里,即对主表和从表分别建立触发器。
[0135]源端获取层主要解决的是如何获取源端多个表关联查询的结果变化的问题。技术上本实施例利用触发器进行实现。这类似于要在源端一个视图的数据集上进行数据的触发,然而因视图上是无法像单个表那样建立触发器的,因此需要在源端视图涉及的所有表上分别建立触发器。
[0136]为实现源端四个表的关联数据的变化记录到变化记录表中,我们需要在四个表中分别建立触发器。本实施例中,触发器的触发原理如图7所示,参考图7,为实现触发器的触发功能,首先需要确定一个表的某个列作为查询条件的唯一标示,例如,A表的id作为查询结果的每条记录的唯一标示。触发器需要拦截各个表的DML操作,并把关联结果的数据记录到源端变化记录表中。三种DML操作的具体处理思路如下:
[0137]插入(Insert)操作:首先判断本条数据是否是满足关联条件的数据,如果不满足不做任何操作。如果满足关联条件,向变化记录表中插入关联语句查询出的数据;这个限制能够做到由最后来数据的那个表把数据触发到源端数据变化记录表中。
[0138]删除(Delete)操作:直接用主表的主键向记录表中插入delete需要的数据。对于主表触发器直接插入带主表主键的数据;对于从表需要关联查询出主表的主键并插入到变化记录表中。
[0139]更新(Update)操作:首先判断变化的列是否是同步需要的列,如果不是需要的列则不进行处理。否则为了简化处理逻辑,先执行先删除后插入操作,具体的删除和插入的代码同上面提到的操作一致。
[0140]本实施例中,主表A上建立触发器可以如图8所示,从表B上建立触发器可以如图9所示,需要说明的是,C、D上的触发器类似于B。
[0141]2、数据变换层
[0142]数据变换层主要解决的是把源端触发的数据进行字典转换和/或数据类型转换等操作,并触发到最终的目标变化记录表。使用的技术是触发器和函数。处理方法如下:
[0143]第一步,建立中间表midTab和目标变化记录表finSdwTab,中间表midTab按照源端视图的类型和长度进行定义。目标变化记录表finSdwTab表结构按目的表的类型和长度进行定义。
[0144]第二步:建立字典转换函数,实现中间表midTab和目标变化记录表finSdwTab的数据字典转换功能。本实施例中,字典转换函数可以如图10所示。
[0145]第三步:在中间表midTab上建立触发器,当源端数据获取层获取的变化数据对应的SQL语句在中间表midTab上中执行的时候,自动通过触发器触发到目标变化记录表finSdwTab表。此触发器会调用字典转换函数和/或数据库常规函数实现数据的字典转换和/或类型转换。本实施例中,该触发器最终结果举例如图11所示。
[0146]3、结果生成层
[0147]在此层可以根据目的端的数据格式需求,生成XML、SQL语句或JMS消息等数据同步信息传输到目的端,并在目的表tarTab上进行相应的操作。此层涉及的技术是常规技术,在此不再赘述。
[0148]实施例2
[0149]本实施例对用于实施例1所述同步过程的同步代码自动生成方案进行描述,同步代码自动生成原理如图12所示,根据图12可以看出,要实现数据的同步,涉及的同步代码包括源端数据变化获取层的视图、数据变化记录表和捕捉源端数据变化的触发器,中间库的中间表midTab、finSdwTab表、类型和字典
当前第3页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1