一种基于sql语句的数据同步方法和装置制造方法

文档序号:6628711阅读:224来源:国知局
一种基于sql语句的数据同步方法和装置制造方法
【专利摘要】本发明实施例公开了一种基于SQL语句的数据同步方法和装置,所述方法包括:依次捕获待处理SQL语句;分别将所述待处理SQL语句转化成通用键值数据对象,所述通用键值数据对象具有事务标识;将存在预设第一关系的事务标识对应的通用键值数据对象划分为同一通用事务键值数据对象,所述通用事务键值数据对象具有业务标识;将存在预设第二关系的业务标识对应的通用事务键值数据对象划分为同一业务;分别将各个业务中的通用事务键值数据对象并行同步至目标数据源。与现有技术相比,本发明能够提高基于SQL语句的数据同步效率。
【专利说明】—种基于SQL语句的数据同步方法和装置

【技术领域】
[0001]本发明涉及数据同步【技术领域】,具体涉及一种基于SQL语句的数据同步方法和装置。

【背景技术】
[0002]目前,在数据集成的应用场景中,对同步到目标数据源的各个业务有严格顺序要求,也就是要求写入目标数据源的业务发生顺序与真实业务一致。目前,解决这种数据同步的方法主要是捕获数据库中顺序执行的SQL语句,然后将SQL语句转换成不同目标数据源可执行的格式来同步数据。
[0003]由于现有技术中不存在一种能够使各个目标数据源可执行的SQL语句类型,而是在每次写入SQL语句之前均需要将SQL语句转换成该目标数据源可执行的格式类型。这使得现有技术中处理SQL语句的效率明显降低。
[0004]另外,现有技术中基于SQL语句的数据同步过程是以单个SQL语句为处理对象,按照获取SQL语句的顺序逐个将数据写入目标数据源。也就是说,将基于SQL语句将数据写入目标数据源的过程为全程单线程处理的。可见,利用上述方法同步数据的效率较低。


【发明内容】

[0005]本发明提供了一种基于SQL语句的数据同步方法和装置,能够提高基于SQL语句的数据同步效率。
[0006]本发明提供一种基于SQL语句的数据同步方法,所述方法包括:
[0007]依次捕获待处理SQL语句;
[0008]分别将所述待处理SQL语句转化成通用键值数据对象,所述通用键值数据对象具有事务标识;
[0009]将存在预设第一关系的事务标识对应的通用键值数据对象划分为同一通用事务键值数据对象,所述通用事务键值数据对象具有业务标识;
[0010]将存在预设第二关系的业务标识对应的通用事务键值数据对象划分为同一业务;
[0011]分别将各个业务中的通用事务键值数据对象并行同步到目标数据源。
[0012]优选地,所述分别将待处理SQL语句转化成通用键值数据对象,所述通用键值数据对象具有事务标识,包括:
[0013]分别将待处理SQL语句逐一转化成SQL键值数据对象,所述SQL键值数据对象具有事务标识;
[0014]分别将同一事务标识的所述SQL键值数据对象转化成通用键值数据对象,并将所述SQL键值数据对象的事务标识设置为所述通用键值数据对象的事务标识。
[0015]优选地,所述分别将各个业务中的通用事务键值数据对象并行同步到目标数据源,包括:
[0016]分别为各个业务开启预设个数的工作线程,所述个数由所述业务的业务量决定;
[0017]各个工作线程并行将各个业务中的通用事务键值数据对象同步到目标数据源。
[0018]优选地,所述分别将各个业务中的通用事务键值数据对象并行同步到目标数据源,包括:
[0019]并行将所述业务中的通用事务键值数据对象预写入目标数据源,所述通用事务键值数据对象具有提交标识;
[0020]根据所述提交标识,控制预写入目标数据源的通用事务键值数据对象依次提交至所述目标数据源。
[0021]本发明还提供了一种基于SQL语句的数据同步装置,所述装置包括:
[0022]捕获模块,用于依次捕获待处理SQL语句;
[0023]转化模块,用于分别将所述待处理SQL语句转化成通用键值数据对象,所述通用键值数据对象具有事务标识;
[0024]第一划分模块,用于将存在预设第一关系的事务标识对应的通用键值数据对象划分为同一通用事务键值数据对象,所述通用事务键值数据对象具有业务标识;
[0025]第二划分模块,用于将存在预设第二关系的业务标识对应的通用事务键值数据对象划分为同一业务;
[0026]同步模块,用于分别将各个业务中的通用事务键值数据对象并行同步到目标数据源。
[0027]优选地,所述转化模块,包括:
[0028]第一转化子模块,用于分别将待处理SQL语句逐一转化成SQL键值数据对象,所述SQL键值数据对象具有事务标识;
[0029]第二转化子模块,用于分别将同一事务标识的所述SQL键值数据对象转化成通用键值数据对象,并将所述SQL键值数据对象的事务标识设置为所述通用键值数据对象的事务标识。
[0030]优选地,所述同步模块,包括:
[0031]开启子模块,用于分别为各个业务开启预设个数的工作线程,所述个数由所述业务的业务量决定;
[0032]处理子模块,用于各个工作线程并行将各个业务中的通用事务键值数据对象同步到目标数据源。
[0033]优选地,所述同步模块,包括:
[0034]预写入子模块,用于并行将所述业务中的通用事务键值数据对象预写入目标数据源,所述通用事务键值数据对象具有提交标识;
[0035]提交子模块,用于根据所述提交标识,控制预写入目标数据源的通用事务键值数据对象依次提交至所述目标数据源。
[0036]本发明依次捕获待处理SQL语句;分别将所述待处理SQL语句转化成通用键值数据对象,所述通用键值数据对象具有事务标识;将存在预设第一关系的事务标识对应的通用键值数据对象划分为同一通用事务键值数据对象,所述通用事务键值数据对象具有业务标识;将存在预设第二关系的业务标识对应的通用事务键值数据对象划分为同一业务;分别将各个业务中的通用事务键值数据对象并行同步到目标数据源。与现有技术相比,本发明将待处理SQL语句转化成通用键值数据对象,使其能够将数据写入到不同类型的数据库。另外,本发明将待处理SQL语句按照事务和业务依次划分,使待处理SQL语句能够并行写入到目标数据源,大幅度提高了数据写入到目标数据源的效率。
[0037]另外,本发明在并行写入通用事务键值数据对象的同时,根据各个通用事务键值数据对象的提交标识,控制预写入目标数据源的通用事务键值数据对象的提交顺序,使待处理SQL语句能够成功完成写入过程。

【专利附图】

【附图说明】
[0038]为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0039]图1为本发明实施例一提供的基于SQL语句的数据同步方法流程图;
[0040]图2为本发明实施例一提供的测试结果对比示意图;
[0041]图3为本发明实施例一提供的测试结果对比示意图;
[0042]图4为本发明实施例二提供的基于SQL语句的数据同步装置示意图。

【具体实施方式】
[0043]下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
[0044]实施例一
[0045]参考图1,图1为本发明实施例提供的基于SQL语句的数据同步方法流程图,所述方法包括:
[0046]SlOl:依次捕获待处理SQL语句。
[0047]本实施例中,按照各个SQL语句的执行顺序,依次捕获各个正在执行的SQL语句。其中,将系统正在执行的SQL语句确定为本实施例中的待处理SQL语句。
[0048]实际应用中,可以利用SQL捕获器对待处理SQL语句进行捕获。具体的捕获方法本实施例不做限制。
[0049]S102:分别将所述待处理SQL语句转化成通用键值数据对象,所述通用键值数据对象具有事务标识。
[0050]本实施例中,捕获待处理SQL语句后,将捕获的待处理SQL语句分别转化成通用键值数据对象。其中,所述通用键值数据对象为不同的目标数据源均可执行的通用数据类型。另外,各个通用键值数据对象均具有事务标识,所述事务标识用于标识所述通用键值数据对象所属的事务。
[0051]实际应用中,在捕获待处理SQL语句的过程中,系统可以处理已经捕获到的待处理SQL语句。具体的,在捕获到待处理SQL语句后,首先,分别将待处理SQL语句转化成SQL键值数据对象,所述SQL键值数据对象具有事务标识。其中,所述SQL键值数据对象为所述待处理SQL语句转化为通用键值数据对象的中间产物。其次,分别将所述SQL键值数据对象转化成通用键值数据对象,并将所述SQL键值数据对象的事务标识设置为所述通用键值数据对象的事务标识。
[0052]S103:将存在预设第一关系的事务标识对应的通用键值数据对象划分为同一通用事务键值数据对象,所述通用事务键值数据对象具有业务标识。
[0053]本实施例中,在确定各个待处理SQL语句的通用键值数据对象后,确定存在第一关系的事务标识对应的通用键值数据对象。所述第一关系可以为相等的关系。具体的,可以首先确定具有相同事务标识的通用键值数据对象,其次,将具有相同事务标识的通用键值数据对象划分为同一通用事务键值数据对象。最后,为各个通用事务键值数据对象设置业务标识,所述业务标识用于标识通用事务键值数据对象所属的业务。
[0054]S104:将存在预设第二关系的业务标识对应的通用事务键值数据对象划分为同一业务。
[0055]本实施例中,由于各个通用事务键值数据对象均具有业务标识,则可以根据所述业务标识确定属于同一个业务的通用事务键值数据对象。其中,所述第二关系也可以为相等的关系。
[0056]另外,具体的,本实施例还可以将各个通用事务键值数据对象需要引用的表项确定为所述通用事务键值数据对象的业务标识。由于任意一个业务中需要引用的表项的名称是预先确定的,所以,如果任意一个通用事务键值数据对象需要引用某个业务的表项,则说明所述通用事务键值数据对象就属于所述业务。也就是说,可以通过各个通用事务键值数据对象中表项的引用关系确定各个业务中包含的通用事务键值数据对象。
[0057]S105:分别将各个业务中的通用事务键值数据对象并行同步到目标数据源。
[0058]本实施例中,确定各个业务中包含的通用事务键值数据对象后,分别处理各个业务。
[0059]实际应用中,各个业务的执行之间是彼此没有影响的,所以,系统可以并行处理各个业务,一定程度上提高了数据处理的效率。
[0060]具体的,本实施例可以分别为各个业务开启预设个数的工作线程,所述个数由所述业务的业务量决定。当任一业务的业务量较大时,系统可以为其分配较多个数的工作线程,用于处理所述业务中的通用事务键值数据对象。当任一业务的工作线程分配完成时,所述业务的工作线程可以并行处理所述业务中的通用事务键值数据对象。
[0061]本实施例中,如果需要将各个业务中的通用事务键值数据对象写入目标数据源,则可以并行将所述业务中的通用事务键值数据对象预写入目标数据源,所述通用事务键值数据对象具有提交标识,所述提交标识用于标识预写入目标数据源的通用事务键值数据对象的提交顺序。本实施例还可以根据各个通用事务键值数据对象的提交标识,控制预写入目标数据源的通用事务键值数据对象依次提交至所述目标数据源。
[0062]本实施例中,由于将业务中的通用事务键值数据对象预写入目标数据源需要消耗的时间,远远长于将预写入目标数据源的通用事务键值数据对象提交至所述目标数据源的过程。所以,为了提高数据写入目标数据源的效率,本实施例采用并行写入的方式,将各个业务中的通用事务键值数据对象预写入目标数据源,等待系统将其提交至所述目标数据源。当系统将预写入目标数据源的通用事务键值数据对象提交至所述目标数据源,以完成数据的写入过程。
[0063]与现有技术相比,本实施例将待处理SQL语句转化成通用键值数据对象,使其能够将数据写入到不同类型的数据库。另外,本实施例将待处理SQL语句按照事务和业务依次划分,使待处理SQL语句能够并行写入到目标数据源,大幅度提高了数据写入到目标数据源的效率。
[0064]另外,本实施例在并行写入通用事务键值数据对象的同时,根据各个通用事务键值数据对象的提交标识,控制预写入目标数据源的通用事务键值数据对象的提交顺序,使待处理SQL语句能够成功完成写入过程。
[0065]本实施例提供一种将各个业务中的通用事务键值数据对象写入目标数据远的【具体实施方式】,但实现的方式不仅仅局限于这种方式。
[0066]首先,将属于同一业务的通用事务键值数据对象依次存入一个队列中。其次,根据所述业务的业务量,为所述业务分配一定数量的工作线程,并为各个工作线程配置同一个控制对象,所述控制对象用于控制各个通用事务键值数据按照顺序预写入目标数据源。各个工作线程从所述业务的队列中依次各读取一个通用事务键值数据对象,同时获取所述通用事务键值数据对象的提交标识。当任一工作线程完成通用事务键值数据对象的预写入过程后,所述控制对象根据其所持有的提交标识确定是否能够开始提交。只有在其所持有的提交标识之前的通用事务键值数据对象均完成提交后,所述工作线程才能提交所述通用事务键值数据对象。
[0067]在同样硬件条件下,本实施例与传统的基于SQL语句的数据同步方法进行对比测试,所述测试的结果参考图2。
[0068]根据图2中的测试数据可知,传统的SQL语句处理方法是随着事务的增大,其每秒处理事务的数量呈明显下降趋势。而本实施例的方法中系统的性能并未受到影响,其始终维持在每秒100个事务左右的处理速度。通过所述测试并计算后得出,在事务最小时,本实施例的方法中系统性能是传统方法中系统系能的1.4倍;在事务最大时,本实施例的方法中系统性能是传统方法中系统系能的2.5倍。也就是说,本实施例的SQL语句处理方法能够大大提高数据处理效率,改善系统性能。
[0069]在同样硬件条件下,将捕获的SQL语句划分成多个独立业务,本实施例与传统的SQL语句处理方法在性能方面对比测试,所述测试的结果参考图3。
[0070]根据图3中的测试数据可知,传统处理方法的处理能力与图2中的传统方法相比基本相同,也是随事务的增大,系统性能依然呈现下降趋势。而本实施例提供的方法,随着独立业务数量的增加,系统性能呈线性递增趋势。通过所述测试并计算后,在业务数量最少时,本实施例提供的处理方法中的系统性能是传统处理方法中系统性能的1.4倍;在业务数量最大时,本实施例提供的处理方法中的系统性能是传统处理方法中系统性能的18倍。
[0071]综上,本实施例的主要优势如下:
[0072]1、在同样硬件条件下,本实施例提供的方法中的系统处理性能始终处于领先地位,而且随着事务的增大,系统的性能越稳定,而传统解决方案中系统性能会越来越低。
[0073]2、在同样硬件条件下,将捕获的SQL语句按业务进行划分,本实施例提供的方法中的系统性能将进一步得到提高。同时,随着业务数量的增加,系统性能呈线性递增趋势。
[0074]实施例二
[0075]参考图4,图4为本实施例提供的基于SQL语句的数据同步装置结构图,所述装置包括:
[0076]捕获模块401,用于依次捕获待处理SQL语句;
[0077]转化模块402,用于分别将所述待处理SQL语句转化成通用键值数据对象,所述通用键值数据对象具有事务标识;
[0078]第一划分模块403,用于将存在预设第一关系的事务标识对应的通用键值数据对象划分为同一通用事务键值数据对象,所述通用事务键值数据对象具有业务标识;
[0079]第二划分模块404,用于将存在预设第二关系的业务标识对应的通用事务键值数据对象划分为同一业务;
[0080]同步模块405,用于分别将各个业务中的通用事务键值数据对象并行同步到目标数据源。
[0081]其中,所述转化模块可以包括:
[0082]第一转化子模块,用于分别将待处理SQL语句逐一转化成SQL键值数据对象,所述SQL键值数据对象具有事务标识;
[0083]第二转化子模块,用于分别将同一事务标识的所述SQL键值数据对象转化成通用键值数据对象,并将所述SQL键值数据对象的事务标识设置为所述通用键值数据对象的事务标识。
[0084]其中,所述同步模块可以包括:
[0085]开启子模块,用于分别为各个业务开启预设个数的工作线程,所述个数由所述业务的业务量决定;
[0086]处理子模块,用于各个工作线程并行处理各个业务中的通用事务键值数据对象。
[0087]其中,所述同步模块可以包括:
[0088]预写入子模块,用于并行将所述业务中的通用事务键值数据对象预写入目标数据源,所述通用事务键值数据对象具有提交标识;
[0089]提交子模块,用于根据所述提交标识,控制预写入目标数据源的通用事务键值数据对象依次提交至所述目标数据源。
[0090]本实施例依次捕获待处理SQL语句;分别将所述待处理SQL语句转化成通用键值数据对象,所述通用键值数据对象具有事务标识;将存在预设第一关系的事务标识对应的通用键值数据对象划分为同一通用事务键值数据对象,所述通用事务键值数据对象具有业务标识;将存在预设第二关系的业务标识对应的通用事务键值数据对象划分为同一业务;分别将各个业务中的通用事务键值数据对象并行同步到目标数据源。与现有技术相比,本实施例将待处理SQL语句转化成通用键值数据对象,使其能够将数据写入到不同类型的数据库。另外,本实施例将待处理SQL语句按照事务和业务依次划分,使待处理SQL语句能够并行写入到目标数据源,大幅度提高了数据写入到目标数据源的效率。
[0091]另外,本实施例在并行写入通用事务键值数据对象的同时,根据各个通用事务键值数据对象的提交标识,控制预写入目标数据源的通用事务键值数据对象的提交顺序,使待处理SQL语句能够成功完成写入过程。
[0092]对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
[0093]需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
[0094]以上对本发明实施例所提供的基于SQL语句的数据同步方法和装置进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在【具体实施方式】及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
【权利要求】
1.一种基于SQL语句的数据同步方法,其特征在于,所述方法包括: 依次捕获待处理SQL语句; 分别将所述待处理SQL语句转化成通用键值数据对象,所述通用键值数据对象具有事务标识; 将存在预设第一关系的事务标识对应的通用键值数据对象划分为同一通用事务键值数据对象,所述通用事务键值数据对象具有业务标识; 将存在预设第二关系的业务标识对应的通用事务键值数据对象划分为同一业务; 分别将各个业务中的通用事务键值数据对象并行同步到目标数据源。
2.根据权利要求1所述的方法,其特征在于,所述分别将待处理SQL语句转化成通用键值数据对象,所述通用键值数据对象具有事务标识,包括: 分别将待处理SQL语句逐一转化成SQL键值数据对象,所述SQL键值数据对象具有事务标识; 分别将同一事务标识的所述SQL键值数据对象转化成通用键值数据对象,并将所述SQL键值数据对象的事务标识设置为所述通用键值数据对象的事务标识。
3.根据权利要求1所述的方法,其特征在于,所述分别将各个业务中的通用事务键值数据对象并行同步到目标数据源,包括: 分别为各个业务开启预设个数的工作线程,所述个数由所述业务的业务量决定; 各个工作线程并行将各个业务中的通用事务键值数据对象同步到目标数据源。
4.根据权利要求1所述的方法,其特征在于,所述分别将各个业务中的通用事务键值数据对象并行同步到目标数据源,包括: 并行将所述业务中的通用事务键值数据对象预写入目标数据源,所述通用事务键值数据对象具有提交标识; 根据所述提交标识,控制预写入目标数据源的通用事务键值数据对象依次提交至所述目标数据源。
5.一种基于SQL语句的数据同步装置,其特征在于,所述装置包括: 捕获模块,用于依次捕获待处理SQL语句; 转化模块,用于分别将所述待处理SQL语句转化成通用键值数据对象,所述通用键值数据对象具有事务标识; 第一划分模块,用于将存在预设第一关系的事务标识对应的通用键值数据对象划分为同一通用事务键值数据对象,所述通用事务键值数据对象具有业务标识; 第二划分模块,用于将存在预设第二关系的业务标识对应的通用事务键值数据对象划分为同一业务; 同步模块,用于分别将各个业务中的通用事务键值数据对象并行同步到目标数据源。
6.根据权利要求5所述的装置,其特征在于,所述转化模块,包括: 第一转化子模块,用于分别将待处理SQL语句逐一转化成SQL键值数据对象,所述SQL键值数据对象具有事务标识; 第二转化子模块,用于分别将同一事务标识的所述SQL键值数据对象转化成通用键值数据对象,并将所述SQL键值数据对象的事务标识设置为所述通用键值数据对象的事务标识。
7.根据权利要求5所述的装置,其特征在于,所述同步模块,包括: 开启子模块,用于分别为各个业务开启预设个数的工作线程,所述个数由所述业务的业务量决定; 处理子模块,用于各个工作线程并行将各个业务中的通用事务键值数据对象同步到目标数据源。
8.根据权利要求5所述的装置,其特征在于,所述同步模块,包括: 预写入子模块,用于并行将所述业务中的通用事务键值数据对象预写入目标数据源,所述通用事务键值数据对象具有提交标识; 提交子模块,用于根据所述提交标识,控制预写入目标数据源的通用事务键值数据对象依次提交至所述目标数据源。
【文档编号】G06F17/30GK104268234SQ201410506039
【公开日】2015年1月7日 申请日期:2014年9月26日 优先权日:2014年9月26日
【发明者】李东鸽, 牟晓光 申请人:东软集团股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1