买专利,只认龙图腾
首页 专利交易 科技果 科技人才 科技服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

【发明授权】一种对数据更新操作进行排序重组的方法及相应的装置_武汉达梦数据库股份有限公司_201910645615.2 

申请/专利权人:武汉达梦数据库股份有限公司

申请日:2019-07-17

公开(公告)日:2020-12-22

公开(公告)号:CN110377612B

主分类号:G06F16/23(20190101)

分类号:G06F16/23(20190101);G06F16/27(20190101)

优先权:

专利状态码:有效-授权

法律状态:2020.12.22#授权;2019.11.19#实质审查的生效;2019.10.25#公开

摘要:本发明公开了一种对数据更新操作进行排序重组的方法及相应的装置,该方法包括:获取源表和参照表,根据源表和参照表得到增量表;对增量表中的多组数据更新操作进行预排序,得到原始操作序列;解析原始操作序列中各数据更新操作之间的冲突情况,根据各数据更新操作之间的冲突情况,选择性对原始操作序列中的部分数据更新操作进行重排序和或建立伪操作,得到目的操作序列。本发明的方法通过对更新操作进行排序,或将原有数据替换为不可能出现值,待冲突数据完成更新后,再将不可能出现值更新为目标值,完成对更新操作的重组,实现了对违反唯一性约束的一组更新操作进行处理,保证能够根据排序重组后的更新操作序列进行数据增量同步。

主权项:1.一种对数据更新操作进行排序重组的方法,其特征在于,所述方法包括:获取源表和参照表,根据所述源表和所述参照表得到增量表,其中,所述增量表中包括多组数据更新操作;对所述增量表中的多组数据更新操作进行预排序,得到原始操作序列;解析所述原始操作序列中各数据更新操作之间的冲突情况,根据各数据更新操作之间的冲突情况,选择性对所述原始操作序列中的部分数据更新操作进行重排序和或建立伪操作,得到目的操作序列,以根据所述目的操作序列进行增量数据同步;所述方法还包括构建新值仓库和旧值仓库,其中,在所述增量表中,一组数据更新操作对应一个操作对象,所述构建新值仓库和旧值仓库的过程包括:获取所述增量表中各操作对象的旧值和新值;将每一操作对象的旧值和相应的数据更新操作建立关联,形成旧值仓库,将每一操作对象的新值和相应的数据更新操作建立关联,形成新值仓库;从所述原始操作序列取出一个数据更新操作,作为目标数据更新操作;判断确定所述目标数据更新操作的状态,当所述目标数据更新操作为未处理状态时,在所述旧值仓库和所述新值仓库中注销所述目标数据更新操作;将所述目标数据更新操作添加至所述目的操作序列的尾部,更新所述目标数据更新操作为头操作和尾操作;根据所述尾操作对应的新值与所述旧值仓库之间的唯一性冲突情况,选择性对所述原始操作序列中的部分数据更新操作进行重排序和或建立伪操作,得到目的操作序列。

全文数据:一种对数据更新操作进行排序重组的方法及相应的装置技术领域本发明属于数据同步领域,更具体地,涉及一种对数据更新操作进行排序重组的方法及相应的装置。背景技术增量数据的同步,是在源表上进行增删改操作时,可以通过增量数据抽取,同步到目的表中。在第一次将源表数据全量抽取到目的表中后,可以通过重复地执行增量数据抽取,将源表上的增删改操作产生的变化数据,无遗漏地同步到目的表中,从而实现源表和目的表的长期同步,避免每次都同步全量数据。当全量数据巨大,而每次变化数据较少时,可以大幅提升数据同步的效率。当前主流的增量数据抽取方式,按照增量数据的内部产生方式分为两类:过程记录产生方式,包括触发器增量和日志解析增量;比较产生方式,包括影子表增量、MD5增量和时间戳增量。过程记录产生增量的方式,是通过在增量表中记录所有发生在源表上的数据增删改操作过程,执行增量数据同步时,将这些数据操作过程在目的表上重复进行一遍,即可将源表中产生的变化同步到目的表中。比较产生增量的方式,通过建立一张“参照表”例如,影子表、MD5表或时间戳表,“参照表”包含源表中的唯一列;执行增量数据同步时,基于唯一列进行定位,若某一行数据在源表中,而不在“参照表”中,则该行数据为一行新插入的数据;反之,若某一行数据不在源表中,而在“参照表”中,则该行数据为一行已删除的数据;若某一行数据既在源表中,也在“参照表”中,但其他列的数据不一致,则该行数据为一行修改过的数据。以过程记录产生增量的方式进行增量同步操作时,只要能在源表中顺利完成的操作过程,都可以在目的表中顺利完成;而以比较产生类型的增量方式进行增量同步操作时,由于通过比较源表和“参照表”的差异产生的增量数据只能反映操作的结果,而无法反映操作的过程,这就导致在涉及数据修改操作时,如果目的表中存在唯一索引列,能在源表中顺利完成的操作序列,在目的表中不一定能顺利完成。如图1和图2所示,其中,“参照表”中的数据为修改前的旧值,源表中的数据为修改后的新值,D代表删除操作;UN、UO代表修改操作,UN代表修改后的值新值,UO代表修改前的值旧值,I代表删除。在执行增量数据同步操作时,对目的表进行如下操作,即可使目的表与源表保持同步:1删除ID=5这行数据;2在ID=7这行数据上进行修改操作:[7,'小军',1876666007,'中山路7号','男']----[7,'小军',1876666007,'中山路7号','男'];3插入数据[11,'老刘',1876666011,'中山路11号','男']。在进行增量数据同步时,能在源表中顺利完成的操作序列,在目的表中也能顺利完成。如图3和图4所示,当目的表的PHONE电话号码列不存在唯一约束索引时,按照A--B--C--D--E--F--G--H--K的顺序执行更新操作可完成增量同步;当目的表的PHONE列存在唯一约束索引时,上述操作序列无法顺利执行:1A与H存在单向冲突,当H先执行,A后执行时,可解除冲突;2B与G存在循环冲突,无法通过调整二者执行顺序解除冲突;3C、D、E存在循环冲突,无法通过调整三者执行顺序解除冲突。在进行增量数据同步时,能在源表中顺利完成的操作序列,在目的表中不能顺利完成。鉴于此,克服该现有技术所存在的缺陷是本技术领域亟待解决的问题。发明内容针对现有技术的以上缺陷或改进需求,本发明提供了一种对数据更新操作进行排序重组的方法及相应的装置,其目的在于本发明的方法通过对更新操作进行排序,或将原有数据替换为不可能出现值,待冲突数据完成更新后,再将不可能出现值更新为目标值,完成对更新操作的重组,从而实现了对违反唯一性约束的一组更新操作进行处理,使其能顺利完成执行,保证能够根据排序重组后的更新操作序列进行数据增量同步,由此解决更新操作序列产生违反唯一性约束的冲突问题。为实现上述目的,按照本发明的一个方面,提供了一种对数据更新操作进行排序重组的方法,所述方法包括:获取源表和参照表,根据所述源表和所述参照表得到增量表,其中,所述增量表中包括多组数据更新操作;对所述增量表中的多组数据更新操作进行预排序,得到原始操作序列;解析所述原始操作序列中各数据更新操作之间的冲突情况,根据各数据更新操作之间的冲突情况,选择性对所述原始操作序列中的部分数据更新操作进行重排序和或建立伪操作,得到目的操作序列,以根据所述目的操作序列进行增量数据同步。优选地,解析所述原始操作序列中各数据更新操作之间的冲突情况,根据各数据更新操作之间的冲突情况,选择性对所述原始操作序列中的部分数据更新操作进行重排序和或建立伪操作,得到目的操作序列,以根据所述目的操作序列进行增量数据同步包括:解析所述原始操作序列中各数据更新操作之间的冲突情况;当各数据更新操作之间存在单向冲突时,调整存在单向冲突的数据更新操作的执行顺序,以解除单向冲突;和或当各数据更新操作之间存在循环冲突时,在存在循环冲突的数据更新操作中,建立一数据更新操作的伪操作,并将所述伪操作添加至目的操作序列中,以解除循环冲突。优选地,在所述增量表中,一组数据更新操作对应一个操作对象,所述方法还包括:获取所述增量表中各操作对象的旧值和新值;将每一操作对象的旧值和相应的数据更新操作建立关联,形成旧值仓库,将每一操作对象的新值和相应的数据更新操作建立关联,形成新值仓库。优选地,解析所述原始操作序列中各数据更新操作之间的冲突情况,根据各数据更新操作之间的冲突情况,选择性对所述原始操作序列中的部分数据更新操作进行重排序和或建立伪操作,得到目的操作序列包括:从所述原始操作序列取出一个数据更新操作,作为目标数据更新操作;判断确定所目标述数据更新操作的状态,当所述目标数据更新操作为未处理状态时,在所述旧值仓库和所述新值仓库中注销所述目标数据更新操作;将所述目标数据更新操作添加至所述目的操作序列的尾部,更新所述目标更新操作为头操作和尾操作,更新所述目标更新操作对应的序号为头序号;根据所述尾操作对应的新值与所述旧值仓库之间的唯一性冲突情况,以及所述头操作对应的旧值与所述新值仓库之间的唯一性冲突情况,选择性对所述原始操作序列中的部分数据更新操作进行重排序和或建立伪操作,得到目的操作序列。优选地,根据所述尾操作对应的新值与所述旧值仓库之间的唯一性冲突情况,以及所述头操作对应的旧值与所述新值仓库之间的唯一性冲突情况,选择性对所述原始操作序列中的部分数据更新操作进行重排序和或建立伪操作,得到目的操作序列包括:判断确定在所述旧值仓库中,是否存在与所述尾操作对应的新值存在唯一性冲突的第一数据更新操作;若存在,则在旧值仓库中注销所述第一数据更新操作,在所述原始操作序列中,更新所述第一数据更新操作的状态为已处理;将所述第一数据更新操作添加在所述目的操作序列的末尾,更新所述第一数据更新操作为尾操作。优选地,根据所述尾操作对应的新值与所述旧值仓库之间的唯一性冲突情况,以及所述头操作对应的旧值与所述新值仓库之间的唯一性冲突情况,选择性对所述原始操作序列中的部分数据更新操作进行重排序和或建立伪操作,得到目的操作序列还包括:若不存在,则判断确定在所述新值仓库中,是否存在与所述头操作对应的旧值存在唯一性冲突的第二数据更新操作;若存在,则在所述新值仓库中注销所述第二数据更新操作;判断确定所述头操作与所述第二数据更新操作之间的冲突类型;当所述头操作与所述第二数据更新操作之间的冲突类型为循环冲突时,建立所述第二数据更新操作对应的第一伪操作和第二伪操作,将所述第二伪操作添加至所述目的操作序列的头序号对应的数据更新操作之前,用所述第一伪操作替换所述目的操作序列中尾端的数据更新操作。优选地,建立所述第二数据更新操作对应的第一伪操作和第二伪操作包括:将所述第二数据更新操作对应的新值更换为预设的替换值,得到第一伪操作;将所述第二数据更新操作对应的旧值更换为预设的替换值,得到第二伪操作。优选地,根据所述尾操作对应的新值与所述旧值仓库之间的唯一性冲突情况,以及所述头操作对应的旧值与所述新值仓库之间的唯一性冲突情况,选择性对所述原始操作序列中的部分数据更新操作进行重排序和或建立伪操作,得到目的操作序列还包括:当所述头操作与所述第二数据更新操作之间的冲突类型为单向冲突时,在所述原始操作序列中,更新所述第二数据更新操作的状态为已处理;从所述旧值仓库中注销与所述第二数据更新操作的新值存在唯一性冲突的数据更新操作;将所述第二数据更新操作添加至所述目的操作序列的头序号对应的数据更新操作之前,更新所述第二数据更新操作为头操作。优选地,判断确定所述头操作与所述第二数据更新操作之间的冲突类型包括:判断确定所述第二数据更新操作是否已存在与所述目的操作序列中;若存在,则所述头操作与所述第二数据更新操作之间的冲突类型为循环冲突;若不存在,则所述头操作与所述第二数据更新操作之间的冲突类型为单向冲突。按照本发明的另一方面,提供了一种装置,包括至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被程序设置为执行本发明所述的方法。总体而言,通过本发明所构思的以上技术方案与现有技术相比,具有如下有益效果:本发明提供一种对数据更新操作进行排序重组的方法,该方法包括:获取源表和参照表,根据源表和参照表得到增量表,其中,增量表中包括多组数据更新操作;对增量表中的多组数据更新操作进行预排序,得到原始操作序列;解析原始操作序列中各数据更新操作之间的冲突情况,根据各数据更新操作之间的冲突情况,选择性对原始操作序列中的部分数据更新操作进行重排序和或建立伪操作,得到目的操作序列,以根据目的操作序列进行增量数据同步。本发明的方法通过对更新操作进行排序,或将原有数据替换为不可能出现值,待冲突数据完成更新后,再将不可能出现值更新为目标值,完成对更新操作的重组,从而实现了对违反唯一性约束的一组更新操作进行处理,使其能顺利完成执行,保证能够根据排序重组后的更新操作序列进行数据增量同步。附图说明为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍。显而易见地,下面所描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1是本发明实施例提供的一种源表与参照表的结构示意图;图2是本发明实施例提供图1中源表与参照表对应的增量表的结构示意图;图3是本发明实施例提供的另一种源表与参照表的结构示意图;图4是本发明实施例提供的图3中源表与参照表对应的增量表的结构示意图;图5是本发明实施例提供的一种对数据更新操作进行排序重组的方法的流程示意图;图6是本发明实施例提供的一种对数据更新操作进行排序重组的具体过程示意图;图7是本发明实施例提供的图4中增量表对应的旧值仓库和新值仓库;图8a是对图4中的原始操作序列进行排序重组时的第一过程图;图8b是对图4中的原始操作序列进行排序重组时的第二过程图;图8c是对图4中的原始操作序列进行排序重组时的第三过程图;图8d是对图4中的原始操作序列进行排序重组时的第四过程图;图8e是对图4中的原始操作序列进行排序重组时的第五过程图;图8f是对图4中的原始操作序列进行排序重组时的第六过程图;图8g是对图4中的原始操作序列进行排序重组时的第七过程图;图8h是对图4中的原始操作序列进行排序重组时的第八过程图;图8i是对图4中的原始操作序列进行排序重组时的第九过程图;图8j是对图4中的原始操作序列进行排序重组时的第十过程图;图8k是对图4中的原始操作序列进行排序重组时的第十一过程图;图9是对图4中的原始操序列进行排序重组后的目的操作序列的结构示意图;图10是本发明实施例提供的一种装置的结构示意图。具体实施方式为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。实施例1:本实施例提供一种对数据更新操作进行排序重组的方法,通过该方法,解决了更新操作序列产生违反唯一性约束的冲突问题。参阅图5,本实施例的方法包括如下步骤:步骤10:获取源表和参照表,根据所述源表和所述参照表得到增量表,其中,所述增量表中包括多组数据更新操作。其中,源表中记录着每个操作对象当前最新的值,参照表也可称作影子表,记录着每个操作对象在数据更新过程中的过程值,针对同一操作对象,参照表中的值可能与源表中的值相等,也可能不相等,具体由数据是否被更新过而定。其中,数据更新操作为修改操作,每一组数据更新操作记录相应操作对象的新值和旧值。在本实施例中,增量表为通过唯一列进行定位,对比源表和参照表的数据差异而得到的。其中,唯一列为一操作对像的唯一标识,可以理解为ID号,例如,在图3和图4中,“ID列”中对应的编号,即为每个操作对象的唯一标识,以区分不同的操作对象。在进行增量数据同步之前,参照表与目的表中的值相同,在进行数据更新时,根据参照表和增量表对数据进行更新,以使目的表和源表相同,实现数据同步。步骤11:对所述增量表中的多组数据更新操作进行预排序,得到原始操作序列。其中,所述增量表中包含多组数据更新操作,对每一组数据更新操作进行赋值,作为该数据更新操作在原始操作序列中的唯一标识,以区分不同的数据更新操作。其中,每组数据更新操作包括修改前UO的旧值和修改后UN的新值,具体可以根据每个操作对象的唯一列进行关联。如图4,原始操作序列包括数据更新操作A~K,其中,A~K即为每个数据更新操作所赋的值,针对每一个数据更新操作,包括修改前UO的旧值和修改后UN的新值。例如,数据更新操作A,PHONE列修改前的旧值为1876666001,修改后的新值为1876666008。其中,可以按照每组数据更新操作对应的操作对象的ID唯一列编号大小进行预排序,或者,通过其他方式进行预排序,在此,不做具体限定。如图4,原始操作序列的顺序为A-K。在本实施例中,在原始操作序列中,存在前面执行的数据更新操作与后面执行的数据更新操作之间产生冲突的情况,亦即前面操作中的新值与后面操作中的旧值相同,而旧值是参照表目的表中已存在的值,且与前述新值在同一唯一约束列,当按照原始操作序列进行增量数据同步,会产生数据冲突,导致数据同步失败。步骤12:解析所述原始操作序列中各数据更新操作之间的冲突情况,根据各数据更新操作之间的冲突情况,选择性对所述原始操作序列中的部分数据更新操作进行重排序和或建立伪操作,得到目的操作序列,以根据所述目的操作序列进行增量数据同步。为了更清楚地理解本发明的方案,首先对单向冲突和循环冲突进行解释。单向冲突:在存在唯一约束索引列中,针对某一数据更新操作,该数据更新操作对应的新值与另一数据更新操作对应的旧值相等,且该数据更新操作对应的旧值与前述另一数据更新操作对应的新值不相等时,这两个数据更新操作存在单向冲突。例如,图4中,数据更新操作H的旧值187666008与数据更新操作A的新值187666008相等,且数据更新操作H的新值187666018与数据更新操作A的旧值187666001不相等,则数据更新操作H与数据更新操作A存在单向冲突,先执行数据更新操作H,再执行数据操作A可以解除单向冲突。循环冲突:两个数据更新操作之间会产生循环冲突,三个数据更新操作之间也会产生循环冲突,甚至更多个数据更新操作之间也会产生循环冲突。两个数据更新操作之间的循环冲突:在存在唯一约束索引列中,针对某一数据更新操作,该数据更新操作对应的新值与另一数据更新操作对应的旧值相等,且该数据更新操作对应的旧值与前述另一数据更新操作对应的新值相等时,这两个数据更新操作存在循环冲突。例如,图4中,数据更新操作B的旧值187666002与数据更新操作G的新值187666002相等,且数据更新操作B的新值187666007与数据更新操作G的旧值187666007相等,则数据更新操作B与数据更新操作G存在循环冲突,需要建立伪操作,解除循环冲突。三个数据更新操作之间的循环冲突:在存在唯一约束索引列中,针对某一数据更新操作,该数据更新操作对应的新值与另一数据更新操作对应的旧值相等,该数据更新操作对应的旧值与又一数据更新操作对应的新值相等,前述另一数据更新操作的新值与前述又一数据更新操作的旧值相等,则这三个数据更新操作存在循环冲突。例如,数据更新操作C的新值187666004与数据更新操作D的旧值1876660004相等,数据更新操作C的旧值187666003与数据更新操作E的新值1876660003相等,数据更新操作D的新值187666005与数据更新操作E的旧值1876660005相等,数据更新操作C、数据更新操作D和数据更新操作E之间存在循环冲突。在本实施例中,针对存在唯一性约束的数据更新中,原始操作序列中各数据更新操作之间可能存在冲突情况,需要根据各数据更新操作之间的冲突情况,解除各数据更新操作之间的冲突,以保证能够进行增量数据同步。在可选的方案中,当各数据更新操作之间存在单向冲突时,调整存在单向冲突的数据更新操作的执行顺序,以解除单向冲突,得到目的操作序列,然后根据目的操作序列进行增量数据同步。例如,图4中,数据更新操作A和数据更新操作H存在单向冲突,当先执行数据更新操作A时,唯一约束索引列PHONE中的1876666008会存在唯一性冲突,导致数据同步操作无法执行,为了解决此问题,需要调整数据更新操作A和数据更新操作H的执行顺序,先执行数据更新操作A,再执行数据更新操作H,即可解除单向冲突。在另一可选的方案中,当原始操作序列中存在循环冲突时,仅仅调整数据更新操作的顺序是无法解除冲突的。具体地,当各数据更新操作之间存在循环冲突时,在存在循环冲突的数据更新操作中,建立一数据更新操作的伪操作,并将所述伪操作添加至目的操作序列中,以解除循环冲突。其中,伪操作是指将数据更新操作中存在唯一性冲突的值替换为不可能出现的值,例如,将电话号码对应的值替换为0。在可选的方案中,伪操作包括第一伪操作和第二伪操作,其中,第一伪操作是将该数据更新操作对应的新值更换为预设的替换值,得到第一伪操作如图4和图9,将ID为7的操作对象的电话号码的新值更换为0,即图9中的G伪1;第二伪操作是将该数据更新操作对应的旧值更换为预设的替换值,得到第二伪操作如图4和图9,将ID为7的操作对象的电话号码的旧值更换为0,即图9中的G伪2。将第一伪操作和第二伪操作分别添加至相应的位置处,使得通过第一伪操作解除循环冲突,通过第二伪操作将预设的替换值还原为该数据更新操作的新值,从而使整个目的操作序列能够顺利完成执行。在实际应用场景下,在原始操作序列中,可能会同时出现单向冲突和循环冲突,此时需要结合前述两种方案对原始操作序列进行处理,得到目的操作序列。本实施例的方法通过对更新操作进行排序,或将原有数据更换为不可能出现值,待冲突数据完成更新后,再将不可能出现值更新为目标值新值,完成对更新操作的重组,从而实现了对违反唯一性约束的一组更新操作进行处理,使其能顺利完成执行,保证能够根据排序重组后的更新操作序列进行数据增量同步。本发明的方法主要具有如下优势:1通过对存在单向冲突的更新操作序列进行排序,让阻碍其它更新操作顺利执行的更新操作优先执行,使整个更新操作序列能够顺利完成执行。2对于存在循环冲突的更新操作序列,单纯的排序无法解决问题;此时,通过对相关数据更新操作进行重组,将循环冲突中的某一数据更新操作分解为两个更新操作伪操作,先将该数据更新操作中的旧值修改为不可能出现值,避免其对循环冲突中的其它数据更新操作造成阻碍;待循环冲突中的其它数据更新操作执行完毕,再将不可能出现值修改为该数据更新操作中的新值,从而使整个更新操作序列能够顺利完成执行。结合图6,下面具体说明本实施例的方法的可实现方式之一。首先,构建目的操作序列、旧值仓库和新值仓库,其中,在本步骤中,目的操作序列为空的操作序列。构建旧值仓库和新值仓库的过程如下:获取所述增量表中各操作对象的旧值和新值;将每一操作对象的旧值和相应的数据更新操作建立关联,形成旧值仓库,将每一操作对象的新值和相应的数据更新操作建立关联,形成新值仓库。在所述增量表中,一组数据更新操作对应一个操作对象,一组数更新操作包括修改前的旧值和修改后的新值。如图7所示,左侧的图表为图4对应的增量表中,各数据更新操作对应的操作对象修改前的值旧值,在旧值仓库中,对于原始操作序列中的所有数据更新操作,以数据更新操作中的唯一约束列中的旧值的hashCode值为键,以数据更新操作为值,构成键值对,存放在旧值仓库中。其中,旧值仓库的数据结构见图7的右侧图表。如图7所示,右侧的图表为图4对应的增量表中,各数据更新操作对应的操作对象修改后的值新值,在新值仓库中,对于原始操作序列中的所有数据更新操作,以数据更新操作中的唯一约束列中的新值的hashCode值为键,以数据更新操作为值,构成键值对,存放在新值仓库中。其中,新值仓库的数据结构见图7的右侧图表。在创建好旧值仓库的数据结构和新值仓库的数据结构后,将原始操作序列中的所有数据更新操作注册到新值仓库和旧值仓库中。在本实施例中,步骤13具体包括如下步骤:判断原始操作序列是否为空,若原始操作序列不为空,则解析数据更新操作之间的冲突关系,以便进行重排序和重组,得到目标操作序列。其中,每对一个数据更新操作序列进行排序后,会更新该数据更新操作的状态,当所述原始操作序列中的所有数据更新操作均为已处理状态时,所述原始操作序列为空,即,所有的数据更新操作均注册到目的操作序列中。在本实施例中,若原始操作序列为空,说明排序与重组过程已经完成,所有操作都已经转移到目的操作序列中,则返回目的操作序列,从目的操作序列中倒序依次执行数据更新操作,以进行数据增量同步。下面具体说明,解析数据更新操作之间的冲突关系,以便进行重排序和重组,得到目标操作序列的实现过程。在所述原始操作序列不为空时,从所述原始操作序列取出一个数据更新操作,作为目标数据更新操作;然后,判断确定所目标述数据更新操作的状态,当所述目标数据更新操作为未处理状态时,在所述旧值仓库和所述新值仓库中注销所述目标数据更新操作。其中,前述的注销指的是将所述目标数据更新操作从所述旧值仓库和所述新值仓库删除。当某一数据更新操作为“已处理”状态,则说明该操作已经被转移至目的操作序列中并已作处理,直接从原始操作序列中移除即可。然后,将所述目标数据更新操作添加至所述目的操作序列的尾部,更新所述目标更新操作为头操作和尾操作,更新所述目标更新操作对应的序号为头序号。最后,根据所述尾操作对应的新值与所述旧值仓库之间的唯一性冲突情况,以及所述头操作对应的旧值与所述新值仓库之间的唯一性冲突情况,选择性对所述原始操作序列中的部分数据更新操作进行重排序和或建立伪操作,得到目的操作序列。在本实施例中,首先执行“从旧值仓库中搜索与尾操作存在唯一性冲突的操作”的判断支路,具体过程如下:判断确定在所述旧值仓库中,是否存在与所述尾操作对应的新值存在唯一性冲突的第一数据更新操作;若存在,说明尾操作的新值与第一数据更新操作的旧值相同,尾操作若在所述第一数据更新操作之前执行,会产生冲突,需要进行处理。则在旧值仓库中注销所述第一数据更新操作,在所述原始操作序列中,更新所述第一数据更新操作的状态为已处理,并从新值仓库中注销与所述第一数据更新操作存在唯一性冲突的数据更新操作。将所述第一数据更新操作添加在所述目的操作序列的末尾,更新所述第一数据更新操作为尾操作。然后继续执行“从旧值仓库中搜索与尾操作存在唯一性冲突的操作”所对应的过程,形成循环支路,直至在所述旧值仓库中,不存在与所述尾操作对应的新值存在唯一性冲突的第一数据更新操作。在所述旧值仓库中,不存在与所述尾操作对应的新值存在唯一性冲突的第一数据更新操作时,说明所述尾操作在执行时不会产生冲突,则执行“从新值仓库中搜索与头操作存在唯一性冲突的操作”对应的判断支路,具体实现过程如下:判断确定在所述新值仓库中,是否存在与所述头操作对应的旧值存在唯一性冲突的第二数据更新操作;若不存在,则重新回到“判断原始操作序列是否为空”的步骤处,按照图6所示的流程执行。若存在,则在所述新值仓库中注销所述第二数据更新操作,判断确定所述头操作与所述第二数据更新操作之间的冲突类型。当所述头操作与所述第二数据更新操作之间的冲突类型为循环冲突时,建立所述第二数据更新操作对应的第一伪操作和第二伪操作,将所述第二伪操作添加至所述目的操作序列的头序号对应的数据更新操作之前,用所述第一伪操作替换所述目的操作序列中尾端的数据更新操作,然后,继续执行“从新值仓库中搜索与头操作存在唯一性冲突的操作”对应的判断支路,形成循环支路,直至在所述新值仓库中,不存在与所述头操作对应的旧值存在唯一性冲突的第二数据更新操作。其中,建立所述第二数据更新操作对应的第一伪操作和第二伪操作包括:将所述第二数据更新操作对应的新值更换为预设的替换值,得到第一伪操作;将所述第二数据更新操作对应的旧值更换为预设的替换值,得到第二伪操作。其中,预设的替换值为不可能出现在唯一约束列中的值,例如,当唯一约束列为电话号码时,预设的替换值为0,具体可以依据实际情况而定,在此,不做具体限定。当所述头操作与所述第二数据更新操作之间的冲突类型为单向冲突时,在所述原始操作序列中,更新所述第二数据更新操作的状态为已处理;从所述旧值仓库中注销与所述第二数据更新操作的新值存在唯一性冲突的数据更新操作;将所述第二数据更新操作添加至所述目的操作序列的头序号对应的数据更新操作之前,更新所述第二数据更新操作为头操作,然后,继续执行“从新值仓库中搜索与头操作存在唯一性冲突的操作”对应的判断支路,形成循环支路,直至在所述新值仓库中,不存在与所述头操作对应的旧值存在唯一性冲突的第二数据更新操作。在可选的方案中,可以按照如下方式判断确定所述头操作与所述第二数据更新操作之间的冲突类型。具体地,判断确定所述第二数据更新操作与当前目的操作序列中的尾操作是否为同一数据更新操作;若是,则所述头操作与所述第二数据更新操作之间的冲突类型为循环冲突;若不是,则所述头操作与所述第二数据更新操作之间的冲突类型为单向冲突。前述方案在在实际使用中,针对比较复杂的序列,会存在不准确的问题,在优选的方案中,可以按照如下方式判断确定所述头操作与所述第二数据更新操作之间的冲突类型。具体地,判断确定所述第二数据更新操作是否已存在于所述目的操作序列中;若存在,则所述头操作与所述第二数据更新操作之间的冲突类型为循环冲突;若不存在,则所述头操作与所述第二数据更新操作之间的冲突类型为单向冲突。在此,需要说明的是,前述的第一数据更新操作和所述第二数据更新操作均为原始操作序列中的数据更新操作,只是为了便于描述存在唯一性冲突的操作,方才通过“第一”和“第二”的区分。在此,需要强调的是,在流程执行过程中,本实施例的目标数据更新操作、第一数据更新操作好和第二数据更新操作会根据流程的执行过程而发生改变,不过,目标数据更新操作、第一数据更新操作好和第二数据更新操作均为存在于原始操作序列中的操作。同时,头操作、尾操作以及头序号的位置也会随着流程的执行而动态发生变化,具体由本实施例的方法以及实际需要排序重组的原始操作序列而定。区别于现有技术,本发明的方法通过对更新操作进行排序,或将原有数据替换为不可能出现值,待冲突数据完成更新后,再将不可能出现值更新为目标值,完成对更新操作的重组,从而实现了对违反唯一性约束的一组更新操作进行处理,使其能顺利完成执行,保证能够根据排序重组后的更新操作序列进行数据增量同步。实施例2:前述主要描述了本发明的方法的实现过程,为了更形象化的解释本发明,下面以图3所示出的源表和参照表,图4所示出的增量表和图7所示出的旧值仓库和新值仓库,举例说明上述实施例的实现过程。下述的操作指的是数据更新操作,为便于描述简写为操作。过程一:从原始操作序列中取出操作A目标数据更新操作,操作A不为“已处理”,在旧值仓库中和新值仓库中注销操作A,标记A为头操作、尾操作,头序号为操作A在目的操作序列中的序列号。此过程的更新图如图8a所示。过程二:在旧值仓库中搜索与尾操作A的新值存在唯一性冲突的操作,找到操作H第一数据更新操作,从旧值仓库中注销操作H,在原始操作序列中标记操作H已处理,从新值仓库中注销与操作H存在唯一性冲突的操作操作A在前述过程中已注销,更新尾操作为H。此过程的更新图如图8b所示。过程三:在旧值仓库中搜索与尾操作H的新值存在唯一性冲突的操作,没有找到,在新值仓库中搜索与头操作A的旧值存在唯一性冲突的操作,没找到,从原始操作序列中取出操作B目标数据更新操作,标记操作B为头操作、尾操作,头序号为操作B在目的操作序列中的序列号。此过程的更新图如图8c所示。过程四:在旧值仓库中搜索与尾操作B的新值存在唯一性冲突的操作,找到操作G第一数据更新操作,从旧值仓库中注销操作G,在原始操作序列中标记操作G已处理,从新值仓库中注销与操作G的旧值存在唯一性冲突的操作操作B在前述过程中已经被注销,更新尾操作为G。此过程的更新图如图8d的所示。过程五:从旧值仓库中搜索与尾操作G的新值存在唯一性冲突的操作,未找到,从新值仓库中搜索到与头操作B的旧值存在唯一性冲突的操作,找到操作G第二数据更新操作,在新值仓库中注销操作G,循环冲突,创建伪操作G1第一伪操作和伪操作G2第二伪操作,将伪操作G2添加到目的操作序列的头序号处相当于是将操作G2添加到操作B之前,用伪操作G1替换目的操作序列的尾端。此过程的更新图如图8e的所示,其中,G伪1为第一伪操作伪操作G1,G伪2为第二伪操作伪操作G2。过程六:从新值仓库中搜索与头操作B的旧值存在唯一性冲突的操作,没有找到,从原始操作序列中取出操作C目标数据更新操作,操作C不为已处理状态,在旧值仓库和新值仓库中注销操作C,在原始操作序列中标记操作C已处理,更新操作C为尾操作、头操作,将头序号更新为操作C在目的操作序列中的序号,将操作C添加到目的操作序列的尾端。此过程的更新图如图8f的所示。过程七:从旧值仓库中搜索与操作C的新值存在唯一性冲突的操作,找到操作D第一数据更新操作,从旧值仓库中注销操作D,在原始操作序列中标记操作D已处理,从新值操作库中注销与操作D的旧值存在唯一性冲突的操作C,将操作D更新为尾操作。此过程的更新图如图8g的所示。过程八:从旧值仓库中搜索与尾操作D的新值存在唯一性冲突的操作,找到操作E第一数据更新操作,从旧值仓库中注销操作E,在原始操作序列中标记操作E已处理,从新值仓库中注销与操作E的旧值存在唯一性冲突的操作D,将操作E更新为尾操作。此过程的更新图如图8h的所示。过程九:从旧值仓库中搜索与尾操作E的新值存在唯一性冲突的操作,没找到,从新值仓库中搜索与头操作C的旧值存在唯一性冲突的操作,找到操作E第二数据更新操作,从新值仓库中注销操作E,循环冲突,创建操作E的伪操作E1第一伪操作和伪操作E2第二伪操作,将伪操作E2添加到操作C之前,将伪操作E1替换为目的操作序列的尾端。此过程的更新图如图8i的所示,其中,E伪1为第一伪操作伪操作E1,E伪2为第二伪操作伪操作E2。过程十:从新值仓库中搜索与头操作C的旧值存在唯一性冲突的操作,未找到,取出操作F目标数据更新操作,在旧值仓库和新值仓库注销操作F,将操作F添加至目标操作序列的尾端,更新操作F为头操作、尾操作,头序号为操作F在目的操作中的序号。此过程的更新图如图8j的所示。过程十一:从旧值仓库中搜索与尾操作F的新值存在唯一性冲突的操作,未找到,从新值仓库中搜索与操作F的旧值存在唯一性冲突的操作,找到操作K第二数据更新操作,在新值仓库中注销操作K,单向冲突,标记操作K已处理,从旧值仓库中注销与操作K的新值存在唯一性冲突的操作,将操作K添加在操作F之前,更新操作K为头操作。此过程的更新图如图8k的所示。过程十二:从新值仓库中搜索与头操作K的旧值存在唯一性冲突的操作,未找到,判断原始操作序列是否为空,操作A~操作K均标记为已处理,则所述原始操作序列为空,返回目的操作序列,将所述目的操作序列按照倒序依次执行数据更新操作,以进行数据增量同步。如图9,是按照本发明的方法进行重组排序后的目的操作序列,在得到目的操作序列后,按照目的操作序列的倒序顺序执行,以进行增量数据同步。结合实施例1的方法和实施例2的具体实施例,本发明详细阐述了对数据更新操作进行排序重组的方法,本发明的方法主要具有如下优势:1通过对存在单向冲突的更新操作序列进行排序,让阻碍其它更新操作顺利执行的更新操作优先执行,使整个更新操作序列能够顺利完成执行。2对于存在循环冲突的更新操作序列,单纯的排序无法解决问题;此时,通过对相关数据更新操作进行重组,将循环冲突中的某一数据更新操作分解为两个更新操作伪操作,先将该数据更新操作中的旧值修改为不可能出现值,避免其对循环冲突中的其它数据更新操作造成阻碍;待循环冲突中的其它数据更新操作执行完毕,再将不可能出现值修改为该数据更新操作中的新值,从而使整个更新操作序列能够顺利完成执行。实施例3:请参阅图10,图10是本发明实施例提供的一种装置的结构示意图。本实施例的装置包括一个或多个处理器41以及存储器42。其中,图10中以一个处理器41为例。处理器41和存储器42可以通过总线或者其他方式连接,图10中以通过总线连接为例。存储器42作为一种基于对数据更新操作进行排序重组的方法的非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块,如实施例1中的对数据更新操作进行排序重组的方法以及对应的程序指令。处理器41通过运行存储在存储器42中的非易失性软件程序、指令以及模块,从而执行对数据更新操作进行排序重组的方法的各种功能应用以及数据处理,实现实施例1的对数据更新操作进行排序重组的方法的功能。其中,存储器42可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器42可选包括相对于处理器41远程设置的存储器,这些远程存储器可以通过网络连接至处理器41。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。关于对数据更新操作进行排序重组的方法请参照图1~图3及相关的文字描述在此,不再赘述。值得说明的是,上述装置和系统内的模块、单元之间的信息交互、执行过程等内容,由于与本发明的处理方法实施例基于同一构思,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。本领域普通技术人员可以理解实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器ReadOnlyMemory,简写为ROM、随机存取存储器RandomAccessMemory,简写为RAM、磁盘或光盘等。本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

权利要求:1.一种对数据更新操作进行排序重组的方法,其特征在于,所述方法包括:获取源表和参照表,根据所述源表和所述参照表得到增量表,其中,所述增量表中包括多组数据更新操作;对所述增量表中的多组数据更新操作进行预排序,得到原始操作序列;解析所述原始操作序列中各数据更新操作之间的冲突情况,根据各数据更新操作之间的冲突情况,选择性对所述原始操作序列中的部分数据更新操作进行重排序和或建立伪操作,得到目的操作序列,以根据所述目的操作序列进行增量数据同步。2.根据权利要求1所述的方法,其特征在于,解析所述原始操作序列中各数据更新操作之间的冲突情况,根据各数据更新操作之间的冲突情况,选择性对所述原始操作序列中的部分数据更新操作进行重排序和或建立伪操作,得到目的操作序列,以根据所述目的操作序列进行增量数据同步包括:解析所述原始操作序列中各数据更新操作之间的冲突情况;当各数据更新操作之间存在单向冲突时,调整存在单向冲突的数据更新操作的执行顺序,以解除单向冲突;和或当各数据更新操作之间存在循环冲突时,在存在循环冲突的数据更新操作中,建立一数据更新操作的伪操作,并将所述伪操作添加至目的操作序列中,以解除循环冲突。3.根据权利要求1所述的方法,其特征在于,在所述增量表中,一组数据更新操作对应一个操作对象,所述方法还包括:获取所述增量表中各操作对象的旧值和新值;将每一操作对象的旧值和相应的数据更新操作建立关联,形成旧值仓库,将每一操作对象的新值和相应的数据更新操作建立关联,形成新值仓库。4.根据权利要求3所述的方法,其特征在于,解析所述原始操作序列中各数据更新操作之间的冲突情况,根据各数据更新操作之间的冲突情况,选择性对所述原始操作序列中的部分数据更新操作进行重排序和或建立伪操作,得到目的操作序列包括:从所述原始操作序列取出一个数据更新操作,作为目标数据更新操作;判断确定所目标述数据更新操作的状态,当所述目标数据更新操作为未处理状态时,在所述旧值仓库和所述新值仓库中注销所述目标数据更新操作;将所述目标数据更新操作添加至所述目的操作序列的尾部,更新所述目标更新操作为头操作和尾操作,更新所述目标更新操作对应的序号为头序号;根据所述尾操作对应的新值与所述旧值仓库之间的唯一性冲突情况,以及所述头操作对应的旧值与所述新值仓库之间的唯一性冲突情况,选择性对所述原始操作序列中的部分数据更新操作进行重排序和或建立伪操作,得到目的操作序列。5.根据权利要求4所述的方法,其特征在于,根据所述尾操作对应的新值与所述旧值仓库之间的唯一性冲突情况,以及所述头操作对应的旧值与所述新值仓库之间的唯一性冲突情况,选择性对所述原始操作序列中的部分数据更新操作进行重排序和或建立伪操作,得到目的操作序列包括:判断确定在所述旧值仓库中,是否存在与所述尾操作对应的新值存在唯一性冲突的第一数据更新操作;若存在,则在旧值仓库中注销所述第一数据更新操作,在所述原始操作序列中,更新所述第一数据更新操作的状态为已处理;将所述第一数据更新操作添加在所述目的操作序列的末尾,更新所述第一数据更新操作为尾操作。6.根据权利要求5所述的方法,其特征在于,根据所述尾操作对应的新值与所述旧值仓库之间的唯一性冲突情况,以及所述头操作对应的旧值与所述新值仓库之间的唯一性冲突情况,选择性对所述原始操作序列中的部分数据更新操作进行重排序和或建立伪操作,得到目的操作序列还包括:若不存在,则判断确定在所述新值仓库中,是否存在与所述头操作对应的旧值存在唯一性冲突的第二数据更新操作;若存在,则在所述新值仓库中注销所述第二数据更新操作;判断确定所述头操作与所述第二数据更新操作之间的冲突类型;当所述头操作与所述第二数据更新操作之间的冲突类型为循环冲突时,建立所述第二数据更新操作对应的第一伪操作和第二伪操作,将所述第二伪操作添加至所述目的操作序列的头序号对应的数据更新操作之前,用所述第一伪操作替换所述目的操作序列中尾端的数据更新操作。7.根据权利要求6所述的法,其特征在于,建立所述第二数据更新操作对应的第一伪操作和第二伪操作包括:将所述第二数据更新操作对应的新值更换为预设的替换值,得到第一伪操作;将所述第二数据更新操作对应的旧值更换为预设的替换值,得到第二伪操作。8.根据权利要求6所述的方法,其特征在于,根据所述尾操作对应的新值与所述旧值仓库之间的唯一性冲突情况,以及所述头操作对应的旧值与所述新值仓库之间的唯一性冲突情况,选择性对所述原始操作序列中的部分数据更新操作进行重排序和或建立伪操作,得到目的操作序列还包括:当所述头操作与所述第二数据更新操作之间的冲突类型为单向冲突时,在所述原始操作序列中,更新所述第二数据更新操作的状态为已处理;从所述旧值仓库中注销与所述第二数据更新操作的新值存在唯一性冲突的数据更新操作;将所述第二数据更新操作添加至所述目的操作序列的头序号对应的数据更新操作之前,更新所述第二数据更新操作为头操作。9.根据权利要求6~8任一项所述的方法,其特征在于,判断确定所述头操作与所述第二数据更新操作之间的冲突类型包括:判断确定所述第二数据更新操作是否已存在于所述目的操作序列中;若存在,则所述头操作与所述第二数据更新操作之间的冲突类型为循环冲突;若不存在,则所述头操作与所述第二数据更新操作之间的冲突类型为单向冲突。10.一种装置,其特征在于,包括至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被程序设置为执行如权利要求1~9任一项所述的方法。

百度查询: 武汉达梦数据库股份有限公司 一种对数据更新操作进行排序重组的方法及相应的装置

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。