数据库系统的数据同步方法、装置及服务器的制造方法_3

文档序号:9261347阅读:来源:国知局
对数据表TAB的INSERT动作,一次对数据表TABl的INSERT动作:
[0127]BEGIN
[0128]INSERT INTO TAB VALUES (I,,A,,,B,);
[0129]INSERT INTO TABIVALUES(2, ’ A’,’ B’);
[0130]COMMIT
[0131]步骤C2:通过某种LCR抓捕机制,抓取到事务的这2次动作,抓到的LCR内容为:
[0132]BEGIN:事务开始标记
[0133]LCRl 内容:
[0134]表名:TAB操作类型:INSERT
[0135]字段原值列表:无(INSERT动作无原值列表)
[0136]字段新值列表:
[0137]字段I名字:FLD_A字段I类型:INT字段I值:1
[0138]字段2名字:FLD_B字段2类型:CHAR 字段2值:A
[0139]字段3名字:FLD_C字段3类型:VARCHAR 字段3值:B
[0140]LCR2 内容:
[0141]表名:TAB1操作类型:INSERT
[0142]字段原值列表:无(INSERT动作无原值列表)
[0143]字段新值列表:
[0144]字段I名字:FLD_A字段I类型:INT字段I值:2
[0145]字段2名字:FLD_B字段2类型:CHAR 字段2值:A
[0146]字段3名字:FLD_C字段3类型:VARCHAR 字段3值:B
[0147]COMMIT:事务结束标记
[0148]步骤D2:管理线程从BEGIN开始读取LCR直到COMMIT,解析该事务涉及2个数据表的操作,管理线程根据LCR中修改前的值产生undo日志。管理线程通过表名TAB计算得到fun (TAB) =i,通过表名TABl计算得到fun (TABl) =j,分别将LCRl提交给执行线程i,将LCR2提交给执行线程j。
[0149]步骤E2:管理线程等待执行线程i和执行线程j的响应。
[0150]步骤F2:执行线程i将目的库上重做INSERT TAB动作,返回给管理线程成功结果。
[0151]步骤G2:执行线程j将目的库上重做INSERT TABl动作,返回给管理线程成功结果O
[0152]步骤H2:管理接收执行线程i和执行线程j的成功响应后删除undo日志。
[0153]实例三
[0154]本实例说明了在一个典型的应用场景中,一个事务中有2条对不同表的操作LCR,数据同步失败,事务回退:
[0155]步骤A3:数据表结构沿用实例二中的表TAB和表TABl。
[0156]步骤B3:在源数据库中执行一个事务包括I次对数据表TAB的INSERT动作,一次对数据表TABl的INSERT动作:
[0157]BEGIN
[0158]INSERT INTO TAB VALUES (I,,A,,,B,);
[0159]INSERT INTO TABIVALUES(2, ’ A’,’ B’);
[0160]COMMIT
[0161]步骤C3:通过某种LCR抓捕机制,抓取到事务的这2次动作,抓到的LCR内容为:
[0162]BEGIN:事务开始标记
[0163]LCRl 内容:
[0164]表名:TAB操作类型:INSERT
[0165]字段原值列表:无(INSERT动作无原值列表)
[0166]字段新值列表:
[0167]字段I名字:FLD_A字段I类型:INT字段I值:1
[0168]字段2名字:FLD_B字段2类型:CHAR 字段2值:A
[0169]字段3名字:FLD_C字段3类型:VARCHAR 字段3值:B
[0170]LCR2 内容:
[0171]表名:TAB1操作类型:INSERT
[0172]字段原值列表:无(INSERT动作无原值列表)
[0173]字段新值列表:
[0174]字段I名字:FLD_A字段I类型:INT字段I值:2
[0175]字段2名字:FLD_B字段2类型:CHAR 字段2值:A
[0176]字段3名字:FLD_C字段3类型:VARCHAR 字段3值:B
[0177]COMMIT:事务结束标记
[0178]步骤D3:管理线程从BEGIN开始读取事务直到COMMIT,解析该事务涉及2个表的操作,管理线程根据LCR中修改前的值产生undo日志。管理线程通过表名TAB计算得到fun (TAB) =i,通过表名TABl计算得到fun (TABl) = j,将LCRl提交给执行线程i,将LCR2提交给执行线程j。
[0179]步骤E3:管理线程等待执行线程i和执行线程j的响应。
[0180]步骤F3:执行线程i将目的库上重做INSERT TAB动作,返回给管理线程失败结果。
[0181]步骤G3:执行线程j将目的库上重做INSERT TABl动作,返回给管理线程成功结果O
[0182]步骤H3:管理接收执行线程i和执行线程j的响应后,判断事务中任一 LCR执行失败则根据undo日志回退事务。
[0183]步骤13:管理线程在目的库上执行回退操作后删除undo日志。
[0184]从以上的描述中,可以看出,本发明实现了如下技术效果:本发明实施例采用多线程同步方式,提高了同步效率。按数据表分发不同线程,减少了不同线程对表操作的锁竞争以及死锁的发生概率,进一步提升同步性能。根据表将LCR分发到不同的线程执行,保证了目的库中表操作执行顺序与源数据库一致。另外,将具有外键约束关系的不同数据表分发到同一执行线程,避免了由于源数据库和目的数据库执行顺序不同而造成的数据不一致。对于多个不同数据表操作的事务,记录undo日志,若事务中任一LCR同步失败,则根据undo日志回退,保证了事务的原子性。
[0185]显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
[0186]以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
【主权项】
1.一种数据库系统的数据同步方法,其特征在于,包括: 读取源数据库的逻辑变化记录LCR组成的事务段; 将所述事务段中同一数据表对应的LCR分发到多个线程中的同一线程,其中所述多个线程用于执行所述LCR。2.根据权利要求1所述的方法,其特征在于,所述数据表包括有关键约束关系的相关数据表;所述方法还包括:将所述相关数据表对应的LCR分发至同一线程。3.根据权利要求1所述的方法,其特征在于,将所述事务段中同一数据表对应的LCR分发到多个线程中的同一线程,包括: 按照数据表与线程的对应关系从所述多个线程中选择接收LCR的线程; 将数据表对应的LCR分发至选择得到的线程。4.根据权利要求3所述的方法,其特征在于,按照以下方式确定所述对应关系: 对于无外键约束关系的不同数据表,根据数据表的表名通过预定算法得到对应的不同线程,使一个数据表只对应一个线程,一个线程处理一个或多个数据表; 对于有外键约束关系的不同数据表,通过配置对应到同一线程。5.根据权利要求1至4中任一项所述的方法,其特征在于,还包括: 根据所述LCR中修改前的数据记录当前事务的undo日志。6.根据权利要求5所述的方法,其特征在于,还包括:在所述事务中的任一LCR同步失败时,根据所述undo日志进行回退事务。7.一种数据库系统的数据同步装置,其特征在于,包括: 读取模块,用于读取源数据库的逻辑变化记录LCR组成的事务段; 分发模块,用于将所述事务段中同一数据表对应的LCR分发到多个线程中的同一线程,其中所述多个线程用于执行所述LCR。8.根据权利要求7所述的装置,其特征在于,所述分发模块包括: 选择单元,用于按照数据表与线程的对应关系从所述多个线程中选择接收LCR的线程; 分发单元,将数据表对应的LCR分发至选择得到的线程。9.根据权利要求7或8所述的装置,其特征在于,还包括: 记录模块,用于根据所述LCR中修改前的数据记录当前事务的undo日志。10.根据权利要求9所述的装置,其特征在于,还包括: 回退模块,用于在任一所述LCR同步失败时,根据所述undo日志进行回退事务。11.一种服务器,其特征在于,包括: 处理器; 读取模块,用于读取源数据库的逻辑变化记录LCR组成的事务段; 分发模块,用于将所述事务段中同一数据表对应的LCR分发到多个线程中的同一线程,其中所述多个线程用于执行所述LCR。
【专利摘要】本发明公开了一种数据库系统的数据同步方法、装置及服务器,其中,所述数据库系统的数据同步方法包括:读取源数据库的逻辑变化记录(LCR)组成的事务段;将该事务段同一数据表对应的LCR分发到多个线程中的同一线程,其中多个线程用于执行上述LCR。通过本发明,多个线程用于执行事务段中的LCR,使得部分或全部不同数据表的数据同步任务可以并行处理,从而提高了数据库系统的数据同步效率。
【IPC分类】G06F17/30
【公开号】CN104978313
【申请号】CN201410129731
【发明人】乔立秋
【申请人】中兴通讯股份有限公司
【公开日】2015年10月14日
【申请日】2014年4月1日
【公告号】WO2015149461A1
当前第3页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1