CN114296885A - 一种基于事务合并的并行执行方法及设备 - Google Patents
一种基于事务合并的并行执行方法及设备 Download PDFInfo
- Publication number
- CN114296885A CN114296885A CN202111501971.0A CN202111501971A CN114296885A CN 114296885 A CN114296885 A CN 114296885A CN 202111501971 A CN202111501971 A CN 202111501971A CN 114296885 A CN114296885 A CN 114296885A
- Authority
- CN
- China
- Prior art keywords
- lsn
- transaction
- parallel
- execution
- thread
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种基于事务合并的并行执行方法及设备。其方法部分主要包括:表操作信息建立步骤;将单事务合并为多事务且设置多事务的提交LSN、并行LSN以及起始LSN,并将多事务注册到执行线程链表;单事务处理步骤;通过对提交操作的判断、表操作信息的冲突检测、并行LSN的判断以及起始LSN的判断来进入相对应的步骤;线程提交步骤。本发明采用的方法可以进行并行处理方法上的优化,以提升多事务执行的并行度,从而提升数据同步的性能。
Description
技术领域
本发明涉及数据库数据处理技术领域,特别是涉及一种基于事务合并的并行执行方法及设备。
背景技术
目前基于日志解析的异构数据库复制技术应用广泛。这种技术在源端捕捉数据库的日志,解析出日志中的INSERT、UPDATE、DELETE操作,然后发送到目标端,目标端对日志信息进行逆向生成,恢复成SQL语句方式,然后使用数据库通用接口,应用到目标数据库,实现数据复制。因此,在数据库实时复制过程中,目标端的执行效率是影响数据同步性能的重要因素之一。
目标端数据库上执行同步事务时,需要以事务的提交顺序为基准来执行事务操作,不然前后有关联的操作执行时就会发生错误,从而影响同步的正确性。为了追求数据同步的性能,执行同步事务时往往会采取事务合并的策略,把小事务合并为大事务,不仅可以通过合并不同事务的相同操作来减少执行的次数,还可以减少事务提交的次数,从而达到提升同步性能的目的。另外还可以通过增加执行事务的线程数,采用多线程并行的策略同时对多个合并以后的事务进行入库,进一步的提升同步的性能。但是在同时采用了事务合并和并行执行的策略以后,还需要防范和解决并行执行时带来的数据冲突问题,确保数据同步的一致性,不然得不偿失。
为了陈述方便,本发明将源端日志中的事务称为“单事务”,多个单事务合并以后形成的事务称为“多事务”。
现有技术中,在数据库运行时,每个单事务中的操作涉及的表有可能都不一样,把这些单事务合并成多事务以后,合并成的多事务涉及的表就是它包含单事务中涉及表的一个集合,那么在多事务并行执行时就会造成数据的冲突。如果不对单事务进行合并,那些涉及不同表的单事务就可以并行执行,这些原本可以并行执行的单事务合并成多事务以后反而降低了并行执行的并行度,从而降低了同步的效率,这种降低可能会抵销掉事务合并带来的性能提升效果。
鉴于此,如何克服现有技术所存在的缺陷,解决上述技术问题,是本技术领域待解决的难题。
发明内容
针对现有技术的以上缺陷或改进需求,本发明提供一种基于事务合并的并行执行方法及设备,针对现有技术中单事务并成多事务以后反而降低了并行执行的并行度,从而降低了同步效率的问题,对其进行并行处理方法上的优化,以提升多事务执行的并行度,从而提升数据同步的性能。
本发明实施例采用如下技术方案:
第一方面,本发明提供了一种基于事务合并的并行执行方法,包括:
表操作信息建立步骤:获取当前操作涉及的表名,判断当前事务中是否已经存在该表的表操作信息,若不存在,则把当前操作的表名和当前操作结合再与当前操作的LSN进行关联后形成表操作信息存入当前事务;
将单事务合并为多事务且设置多事务的提交LSN、并行LSN以及起始LSN,并将多事务注册到执行线程链表;
单事务处理步骤:执行线程提取多事务中的下一个单事务开始执行;
通过对提交操作的判断、表操作信息的冲突检测、并行LSN的判断以及起始LSN的判断来进入相对应的步骤;
线程提交步骤:判断当前单事务是否为最后一个单事务,若是则执行线程提交操作;若不是则重新进入单事务处理步骤。
进一步的,还包括部署准备步骤:
在源端数据库以及目标端数据库均部署数据同步服务;
目标端数据同步服务启动后,初始化待执行链表、执行线程、唤醒链表以及执行线程链表;
目标端数据同步服务接收到源端操作后,按操作的事务ID进行分类管理,若当前操作是提交操作,则将该事务按提交操作的LSN大小顺序存入待执行链表;若不是提交操作,则进入表操作信息建立步骤。
进一步的,所述将单事务合并为多事务且设置多事务的提交LSN、并行LSN以及起始LSN,并将多事务注册到执行线程链表具体包括:
执行线程从待执行链表中按事务提交LSN的顺序摘取N个单事务合并成一个多事务,并将最后一个单事务的提交LSN设置为多事务的提交LSN,然后根据多事务的提交LSN在执行线程链表中进行注册;
在合并单事务时,同时合并单事务中涉及的表操作信息,若多个单事务存在相同的表操作,则以提交LSN最小的单事务的表操作信息为准,并将该提交LSN设置为该表操作信息的并行LSN;
将多事务中涉及每个表的第一个操作的LSN设为起始LSN。
进一步的,所述通过对提交操作的判断、表操作信息的冲突检测、并行LSN的判断以及起始LSN的判断来进入相对应的步骤具体包括:
提交操作判断步骤:根据当前单事务的下一个操作的操作类型来选择进入冲突检测步骤或线程提交步骤;
冲突检测步骤:根据是否存在上一个执行线程以及在上一个执行线程中是否存在对应的表操作信息来进入提交操作判断步骤或并行LSN判断步骤;
并行LSN判断步骤:根据当前操作的LSN以及表操作信息中的并行LSN的大小来选择进入冲突检测步骤或起始LSN判断步骤;
起始LSN判断步骤:根据当前操作的LSN以及表操作信息中的起始LSN的大小来选择进入冲突检测步骤或等待唤醒。
进一步的,所述提交操作判断步骤具体包括:
提取当前单事务中下一个操作,判断操作是否为提交操作;
若是提交操作则进入线程提交步骤,若不是则进入冲突检测步骤。
进一步的,所述冲突检测步骤具体包括:
在执行线程链表中提取上一个执行线程,若没有上一个执行线程则执行当前操作,然后进入提交操作判断步骤;若有,则进行下一步冲突检测;
通过当前操作的表名和操作类型在被检测执行线程中查找对应的表操作信息,若没找到,则重新进入冲突检测步骤;若找到,则进入并行LSN判断步骤。
进一步的,在查找对应的表操作信息时,查找的规则包括:
若当前操作是INSERT操作,则在被检测执行线程中查找UPDATE和DELETE操作的表操作信息;
若当前操作是UPDATE操作,则在被检测执行线程中查找INSERT、UPDATE和DELETE操作的表操作信息;
若当前操作是DELETE操作,则在被检测执行线程中查找INSERT和UPDATE操作的表操作信息。
进一步的,所述并行LSN判断步骤具体包括:
判断当前操作的LSN是否小于被检测执行线程的表操作信息中的并行LSN;
若小于,则重新进入冲突检测步骤;若不小于,则进入起始LSN判断步骤。
进一步的,所述起始LSN判断步骤具体包括:
判断当前操作的LSN是否小于被检测执行线程的表操作信息中的起始LSN;
若小于,则重新进入冲突检测步骤;若不小于,则将当前执行线程添加到被检查执行线程的唤醒链表上,等被检查执行线程提交后再执行。
另一方面,本发明提供了一种基于事务合并的并行执行设备,具体为:包括至少一个处理器和存储器,至少一个处理器和存储器之间通过数据总线连接,存储器存储能被至少一个处理器执行的指令,指令在被处理器执行后,用于完成第一方面中的基于事务合并的并行执行方法。
与现有技术相比,本发明的有益效果在于:通过对每个单事务以及多事务建立表操作信息,从而能通过对表操作信息的对比来决定是否并行执行,以在避免数据冲突的情况下提升并行执行的并行度,从而提升数据同步的性能。
具体的,多事务中的每个单事务有可能操作的表是不同的,为每个单事务记录下它涉及的表操作信息,多个单事务合并为多事务以后,若有多个单事务存在相同的表操作,则以提交LSN最小的单事务的表操作信息为准,并将该提交LSN设置为该表操作信息的并行LSN,执行线程中小于该并行LSN的操作都可以并行执行。这样可以避免将一些不冲突表的操作也排除在并行执行的条件之外,从而避免并行度的降低。
其次,为多事务中涉及的每个表设置一个起始的LSN,排在执行线程链表后面那些后提交的事务,如果它要执行的操作LSN小于这个起始LSN,说明这个事务虽然是比排在前面的执行线程后提交,但是操作却是先执行的,这种情况下,这些操作就可以进行并行执行,起始LSN和并行LSN结合在一起筛选出可以并行执行的操作就可以增加并行度,从而提升事务合并以后数据同步的性能。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍。显而易见地,下面所描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例1提供的一种基于事务合并的并行执行方法流程图;
图2为本发明实施例1提供的部署准备步骤具体流程图;
图3为本发明实施例1提供的步骤200具体流程图;
图4为本发明实施例1提供的步骤400具体流程图;
图5为本发明实施例1提供的步骤500具体流程图;
图6为本发明实施例1提供的步骤600具体流程图;
图7为本发明实施例1提供的步骤700具体流程图;
图8为本发明实施例1提供的具体的事务执行流程图;
图9为本发明实施例4提供的一种基于事务合并的并行执行设备结构示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
本发明是一种特定功能系统的体系结构,因此在具体实施例中主要说明各结构模组的功能逻辑关系,并不对具体软件和硬件实施方式做限定。
此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。下面就参考附图和实施例结合来详细说明本发明。
实施例1:
如图1所示,本发明实施例提供一种基于事务合并的并行执行方法,具体步骤如下。
步骤100(表操作信息建立步骤):获取当前操作涉及的表名,判断当前事务中是否已经存在该表的表操作信息,若不存在,则把当前操作的表名和当前操作结合再与当前操作的LSN进行关联后形成表操作信息存入当前事务。该步骤中,当前操作包括INSERT(插入)操作、UPDATE(更新)操作、DELETE(删除)操作、COMMIT(提交)操作和ROLLBACK(回滚)操作。该步骤代表着当前事务从当前操作的LSN开始后才对涉及的表有相应的操作,而操作类型分为INSERT、UPDATE、DELETE、COMMIT和ROLLBACK操作。
步骤200:将单事务合并为多事务且设置多事务的提交LSN、并行LSN以及起始LSN,并将多事务注册到执行线程链表。
步骤300(单事务处理步骤):执行线程提取多事务中的下一个单事务开始执行。在该步骤中,由于执行线程执行是多个单事务合并而成的多事务,那么它在执行时,要按多事务中合并的顺序来执行单事务。
步骤400-步骤700:通过对提交操作的判断、表操作信息的冲突检测、并行LSN的判断以及起始LSN的判断来进入相对应的步骤。
步骤800(线程提交步骤):判断当前单事务是否为最后一个单事务,若是则执行线程提交操作;若不是则重新进入单事务处理步骤。
上述步骤400-步骤700具体包括步骤400、步骤500、步骤600以及步骤700。各步骤如下:
步骤400(提交操作判断步骤):根据当前单事务的下一个操作的操作类型来选择进入冲突检测步骤或线程提交步骤。
步骤500(冲突检测步骤):根据是否存在上一个执行线程以及在上一个执行线程中是否存在对应的表操作信息来进入提交操作判断步骤或并行LSN判断步骤。
步骤600(并行LSN判断步骤):根据当前操作的LSN以及表操作信息中的并行LSN的大小来选择进入冲突检测步骤或起始LSN判断步骤。
步骤700(起始LSN判断步骤):根据当前操作的LSN以及表操作信息中的起始LSN的大小来选择进入冲突检测步骤或等待唤醒。
通过上述步骤100-步骤700,本发明实施例通过对每个单事务以及多事务建立表操作信息,从而能通过对表操作信息的对比来检测冲突,从而决定是否并行执行,以在避免数据冲突的情况下提升并行执行的并行度,进而提升数据同步的性能。
在本优选实施例中,还包括部署准备步骤,如图2所示,部署准备步骤具体包括:
步骤10:在源端数据库以及目标端数据库均部署数据同步服务。该步骤中,在源端数据库中部署数据同步服务的日志解析模块,负责解析日志操作,在目标端数据库中部署数据同步接收服务,负责接收源端数据同步发过来的操作并入库。
步骤20:目标端数据同步服务启动后,初始化待执行链表、执行线程、唤醒链表以及执行线程链表。该步骤中,待执行链表用于将待执行的单事务按事务提交操作的LSN大小顺序存放在该链表中,等待执行入库。每个执行线程用于从待执行链表中提取多个单事务合并成多事务,把最后一个单事务的提交LSN设为该多事务的提交LSN,然后执行入库,另外,每个执行线程还需要初始化一个唤醒链表,用来存放那些等待自己提交后再唤醒的执行线程。执行线程链表用于将执行线程按当前待执行多事务提交LSN的大小先后顺序在该链表中进行注册,注册完成以后才能开始执行多事务的操作。
步骤30:目标端数据同步服务接收到源端操作后,按操作的事务ID进行分类管理,若当前操作是提交操作,则将该事务按提交操作的LSN大小顺序存入待执行链表;若不是提交操作,则进入表操作信息建立步骤。
如图3所示,在本优选实施例中,步骤200(将单事务合并为多事务且设置多事务的提交LSN、并行LSN以及起始LSN,并将多事务注册到执行线程链表)具体包括:
步骤201:执行线程从待执行链表中按事务提交LSN的顺序摘取N个单事务合并成一个多事务,并将最后一个单事务的提交LSN设置为多事务的提交LSN,然后根据多事务的提交LSN在执行线程链表中进行注册。
步骤202:在合并单事务时,同时合并单事务中涉及的表操作信息,若多个单事务存在相同的表操作,则以提交LSN最小的单事务的表操作信息为准,并将该提交LSN设置为该表操作信息的并行LSN。需说明的是,确定提交LSN最小的单事务的表操作信息为多事务的表操作信息后,将该多事务中其他单事务的表操作信息都丢弃。
步骤203:将多事务中涉及每个表的第一个操作的LSN设为起始LSN。设定完毕后,多事务的表操作信息上会有起始LSN和并行LSN存在。具体的,起始LSN指的是多事务中表对应的某个操作类型(INSERT,UPDATE或DELETE)的第一个操作的LSN。结合步骤100提到的当前事务从当前操作的LSN开始后才对涉及的表有相应的操作,需说明的是,单事务中可能会有多个表的操作,并且当事务规模较大时,这种方法可以把事务中每个表的起始LSN进行细分,这样事务中最后执行操作表的起始LSN就有可能会比单事务的起始LSN大很多,而较大的起始LSN有利于增加比它后提交的事务的并行度。否则,单事务中涉及的表都使用单事务的第一个操作LSN作为起始LSN,那么单事务在执行时和比它后提交事务的并行度就不如前者。
如图4所示,在本优选实施例中,步骤400(提交操作判断步骤)具体包括:
步骤401:提取当前单事务中下一个操作,判断操作是否为提交操作。
步骤402:若是提交操作则进入线程提交步骤,若不是则进入冲突检测步骤。
如图5所示,在本优选实施例中,步骤500(冲突检测步骤)具体包括:
步骤501:在执行线程链表中提取上一个执行线程,若没有上一个执行线程则执行当前操作,然后进入提交操作判断步骤;若有,则进行下一步冲突检测。需说明的是,该步骤的上一个执行线程在第一次检测时指排在本操作执行线程前面一个的执行线程,而在对同一操作的冲突检测中,每当重新进入该步骤时,都会依次向前提取更上一个的执行线程再进行检测。
步骤502:通过当前操作的表名和操作类型在被检测执行线程中查找对应的表操作信息,若没找到,则重新进入冲突检测步骤;若找到,则进入并行LSN判断步骤。在该步骤中,还需先获取当前待执行操作涉及的表名、操作类型和操作LSN,然后再开始进行判断。另外,被检测执行线程代表的是每次进入该步骤后相对应的上一个执行线程。每次重新进入冲突检测步骤后,都是重新提取更上一个的执行线程作为被检测执行线程来重新进行判断。
在本优选实施例中,在查找对应的表操作信息时,查找的规则包括:
(A)若当前操作是INSERT操作,则在被检测执行线程中查找UPDATE和DELETE操作的表操作信息。这是因为INSERT和INSERT操作是兼容的,不会产生冲突,所以不用查找INSERT操作,而UPDATE和DELETE操作会与INSERT操作造成冲突,所以需要查找UPDATE和DELETE操作。
(B)若当前操作是UPDATE操作,则在被检测执行线程中查找INSERT、UPDATE和DELETE操作的表操作信息。这是因为UPDATE操作和这三种操作都会产生冲突,所以都需要查找。
(C)若当前操作是DELETE操作,则在被检测执行线程中查找INSERT和UPDATE操作的表操作信息。这是因为DELETE和DELETE操作是兼容的,不会产生冲突,所以不用查找DELETE操作,而INSERT和UPDATE操作会与DELETE操作造成冲突,所以需要查找。
如图6所示,在本优选实施例中,步骤600(并行LSN判断步骤)具体包括:
步骤601:判断当前操作的LSN是否小于被检测执行线程的表操作信息中的并行LSN。
步骤602:若小于,则重新进入冲突检测步骤;若不小于,则进入起始LSN判断步骤。需说明的是,上述步骤中小于的这种情况是指那些操作LSN大于起始LSN,但是却小于并行LSN的情况,这时,这些操作在源端就处于并行执行的状态,所以在目标端也可以并行,这时可以跳过这个执行线程的检查,继续向前检查前面的执行线程是否存在冲突。
如图7所示,在本优选实施例中,步骤700(起始LSN判断步骤)具体包括:
步骤701:判断当前操作的LSN是否小于被检测执行线程的表操作信息中的起始LSN。
步骤702:若小于,则重新进入冲突检测步骤;若不小于,则将当前执行线程添加到被检查执行线程的唤醒链表上,等被检查执行线程提交后再执行。需说明的是,该步骤中当操作LSN小于被检测执行线程的起始LSN时,代表这个操作在源端就先执行,所以在目标端也可以并行,这时可以跳过这个执行线程的检查,重新进入冲突检测步骤,继续向前检查前面的执行线程是否存在冲突;如果不小于则说明当前操作和被检查执行线程存在冲突的可能,所以需要把当前执行线程添加到被检查执行线程的唤醒链表上,等该被检查执行线程提交以后再执行当前执行线程。
在本优选实施例中,步骤800(线程提交步骤)中在执行线程提交操作后,还将唤醒链表中等待的执行线程全部唤醒,然后把执行线程从执行线程链表中移除,以完成多事务的执行。
以上为对本实施例提供的方法的各个步骤的详细说明,而这些步骤合为一体后具体的事务执行流程则如图8所示,图8的具体事务执行流程如下:开始执行事务;提取当前多事务中的下一个单事务;提取当前单事务的下一个操作,并判断当前操作是否是提交操作;若是提交操作则再判断是否是最后一个单事务,若是最后一个单事务则执行提交并把唤醒链表中的执行线程全部唤醒,然后结束该多事务的执行,若不是最后一个单事务则回到取当前多事务的下一个单事务步骤;若当前操作不是提交操作,则在执行线程链表中取上一个执行线程,判断操作LSN是否小于该上一个执行线程表操作信息的并行LSN,若小于就再取更上一个执行线程进行判断,若不小于就判断操作LSN是否小于表操作信息的起始LSN,若小于就再取更上一个执行线程进行判断,若不小于就将当前执行线程添加到上一个执行线程的唤醒链表中等待对方提交后唤醒;在执行线程链表中取上一个执行线程时,若无上一个执行线程,则执行当前操作,然后回到取当前单事务的下一个操作的步骤。
综上所述,在本实施例中,每个多事务中的每个单事务操作的表都有可能不同,为每个单事务记录下它涉及的表操作信息,多个单事务合并为多事务以后,若有多个单事务存在相同的表操作,则以提交LSN最小的单事务的表操作信息为准,并将该提交LSN设置为该表操作信息的并行LSN,执行线程中小于该并行LSN的操作都可以并行执行。这样可以避免将一些不冲突表的操作也排除在并行执行的条件之外,从而避免并行度的降低。如果不这样,而是将所有的表都统一采用多事务中第一个事务的提交LSN作为并行LSN,就会把一些不冲突表的操作都排除在了并行执行的条件之外,那就大大降低了并行度。
其次,本实施例为每个多事务涉及的表都设置一个起始的LSN,排在执行线程链表后面那些后提交的事务,如果它要执行的操作LSN小于这个起始LSN,说明这个事务虽然是比排在前面的执行线程后提交,但是操作却是先执行的,这种情况下,这些操作就可以进行并行执行。通过起始LSN和并行LSN结合在一起筛选出可以并行执行的操作就可以增加并行度,从而提升事务合并以后数据同步的性能。
实施例2:
基于实施例1提供的基于事务合并的并行执行方法,本实施例2通过一个具体的应用场景来对本发明进行更详细的说明。
本实施例中,以源端数据库表T1(ID VARCHAR(100))和表T2(ID VARCHAR(100))为例,它们各自存在2行数据,它们的数据在数据库中分布如下:
T1表ID列 | T2表ID列 |
T1_1 | T2_1 |
T1_2 | T2_2 |
源端有如下日志操作:
LSN | 事务ID | 操作 |
1 | 1 | UPDATE T1 SET ID='T1_11'WHERE ID='T1_1'; |
2 | 3 | UPDATE T2 SET ID='T2_11'WHERE ID='T2_1'; |
3 | 1 | COMMIT; |
4 | 2 | UPDATE T2 SET ID='T2_22'WHERE ID='T2_2'; |
5 | 3 | UPDATE T1 SET ID='T1_111'WHERE ID='T1_11'; |
6 | 4 | UPDATE T1 SET ID='T1_22'WHERE ID='T1_2'; |
7 | 2 | COMMIT; |
8 | 3 | COMMIT; |
9 | 4 | COMMIT; |
具体的,基于上述应用场景,本实施例2基于实施例1所体现的执行线程的建立步骤如下:
1.创建两个执行线程A和B。
2.目标端数据同步服务接收日志,按照事务ID分类管理并且记录每个表的表操作信息,得到如下结果:
3.其中执行线程A提取单事务ID为1和2的事务合并成一个多事务,把单事务2的提交LSN 7作来该多事务的提交LSN,并在执行线程链表中注册。合并事务时还要合并表操作信息,并设置表操作信息的并行LSN。
4.执行线程B提取单事务ID为3和4的事务合并成一个多事务,把单事务4的提交LSN 9作来该多事务的提交LSN,并在执行线程链表中注册,这时,执行线程链表中已经存在了执行线程A,由于B的提交LSN比A大,所以在执行线程链表中A排在B的前面。合并事务时还要合并表操作信息,并设置表操作信息的并行LSN。
执行线程A和B各自合并形成的多事务表操作信息如下:
5.执行线程A和B开始并行执行。
以上执行线程A和B建立且完成准备工作后,正式进入并行执行阶段,该阶段的执行流程参考如下表格:
上述的这个例子在现有的方案中,单事务合并成多事务的情况下,由于两个多事务中都包含了表T1和表T2的UPDATE操作,执行线程B需要等到执行线程A提交以后才能开始执行,因为执行线程B无法判断它更新的数据和执行线程A有没有冲突,串行执行可以保证数据同步一致性但是牺牲了同步的性能。
而本实施例从上面的并行执行的流程中可以看出,执行线程B执行表T2,操作类型为UPDATE,操作LSN为2的操作时,由于它小于执行线程A中T2表操作信息中的并行LSN(7),所以可以并行,这是提升同步性能的一个点。下一个操作涉及的表T1,操作类型为UPDATE,操作LSN为5,它大于排在前面执行线程A中T1表操作信息中的并行LSN(3),同时也大于T1表操作信息中的起始LSN(1),不能并行,所以执行线程B把自己添加到执行线程A的唤醒链表中,等执行线程A提交以后再执行,从而保证了并行执行数据同步的一致性。
实施例3:
基于实施例1提供的基于事务合并的并行执行方法,本实施例3通过与实施例2不同的另一个具体的应用场景来对本发明进行更详细的说明。
本实施例中,源端数据库有表T1(ID VARCHAR(100))。
源端有如下日志操作:
具体的,基于上述应用场景,本实施例3基于实施例1所体现的执行线程的建立步骤如下:
1.创建两个执行线程A和B。
2.目标端数据同步服务接收日志,按照事务ID分类管理并且记录每个表的表操作信息,得到如下结果:
单事务ID | 表名 | 操作类型 | 起始LSN | 并行LSN |
1 | T1 | INSERT | 1 | / |
2 | T1 | UPDATE | 4 | / |
3 | T1 | INSERT | 2 | / |
4 | T1 | INSERT | 5 | / |
3.其中执行线程A提取单事务ID为1和2的事务合并成一个多事务,把单事务2的提交LSN 6作来该多事务的提交LSN,并在执行线程链表中注册。合并事务时还要合并表操作信息,并设置表操作信息的并行LSN。
4.执行线程B提取单事务ID为3和4的事务合并成一个多事务,把单事务4的提交LSN 8作来该多事务的提交LSN,并在执行链表中注册,这时,执行线程链表中已经存在了执行线程A,由于B的提交LSN比A大,所以在执行线程链表中A排在B的前面。合并事务时还要合并表操作信息,并设置表操作信息的并行LSN。
执行线程A和B各自合并形成的多事务表操作信息如下:
从上面表格可以看出,执行线程A分别拥有表T1的INSERT和UPDATE两种操作类型的表操作信息,它们分别对应不同的并行LSN,这为后面的并行创造了条件。
5.执行线程A和B开始并行执行。
以上执行线程A和B建立且完成准备工作后,正式进入并行执行阶段,该阶段的执行流程参考如下表格:
上述的这个例子在现有的方案中,单事务合并成多事务的情况下,由于两个多事务中都包含了表T1操作,执行线程B需要等到执行线程A提交以后才能开始执行,因为执行线程B无法判断它插入的数据和执行线程A更新的数据有没有冲突,串行执行可以保证数据同步一致性但是牺牲了同步的性能。
而本实施例从上面的并行执行的流程中可以看出,执行线程B执行表T1,操作类型为INSERT,操作LSN为2的操作时,由于它小于执行线程A中T1表UPDATE操作信息中的并行LSN(6),所以可以并行,这是提升同步性能的一个点。下一个操作涉及的表T1,操作类型为INSERT,操作LSN为5,它同样小于排在前面执行线程A中T1表UPDATE操作信息中的并行LSN(6),可以并行,这又是提升同步性能的一个点,从上述执行流程可以看到,执行线程A和执行线程B是完全并行执行,大大的提升了数据同步的效率。
实施例4:
在上述实施例1至实施例3提供的基于事务合并的并行执行方法的基础上,本发明还提供了一种可用于实现上述方法的基于事务合并的并行执行设备,如图9所示,是本发明实施例的设备架构示意图。本实施例的基于事务合并的并行执行设备包括一个或多个处理器21以及存储器22。其中,图9中以一个处理器21为例。
处理器21和存储器22可以通过总线或者其他方式连接,图9中以通过总线连接为例。
存储器22作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块,如实施例1至实施例3中的基于事务合并的并行执行方法。处理器21通过运行存储在存储器22中的非易失性软件程序、指令以及模块,从而执行基于事务合并的并行执行设备的各种功能应用以及数据处理,即实现实施例1至实施例3的基于事务合并的并行执行方法。
存储器22可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器22可选包括相对于处理器21远程设置的存储器,这些远程存储器可以通过网络连接至处理器21。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
程序指令/模块存储在存储器22中,当被一个或者多个处理器21执行时,执行上述实施例1至实施例2中的基于事务合并的并行执行方法,例如,执行以上描述的图1至图8所示的各个步骤。
本领域普通技术人员可以理解实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(ReadOnlyMemory,简写为:ROM)、随机存取存储器(RandomAccessMemory,简写为:RAM)、磁盘或光盘等。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种基于事务合并的并行执行方法,其特征在于,包括:
表操作信息建立步骤:获取当前操作涉及的表名,判断当前事务中是否已经存在该表的表操作信息,若不存在,则把当前操作的表名和当前操作结合再与当前操作的LSN进行关联后形成表操作信息存入当前事务;
将单事务合并为多事务且设置多事务的提交LSN、并行LSN以及起始LSN,并将多事务注册到执行线程链表;
单事务处理步骤:执行线程提取多事务中的下一个单事务开始执行;
通过对提交操作的判断、表操作信息的冲突检测、并行LSN的判断以及起始LSN的判断来进入相对应的步骤;
线程提交步骤:判断当前单事务是否为最后一个单事务,若是则执行线程提交操作;若不是则重新进入单事务处理步骤。
2.根据权利要求1所述的基于事务合并的并行执行方法,其特征在于,还包括部署准备步骤:
在源端数据库以及目标端数据库均部署数据同步服务;
目标端数据同步服务启动后,初始化待执行链表、执行线程、唤醒链表以及执行线程链表;
目标端数据同步服务接收到源端操作后,按操作的事务ID进行分类管理,若当前操作是提交操作,则将该事务按提交操作的LSN大小顺序存入待执行链表;若不是提交操作,则进入表操作信息建立步骤。
3.根据权利要求2所述的基于事务合并的并行执行方法,其特征在于,所述将单事务合并为多事务且设置多事务的提交LSN、并行LSN以及起始LSN,并将多事务注册到执行线程链表具体包括:
执行线程从待执行链表中按事务提交LSN的顺序摘取N个单事务合并成一个多事务,并将最后一个单事务的提交LSN设置为多事务的提交LSN,然后根据多事务的提交LSN在执行线程链表中进行注册;
在合并单事务时,同时合并单事务中涉及的表操作信息,若多个单事务存在相同的表操作,则以提交LSN最小的单事务的表操作信息为准,并将该提交LSN设置为该表操作信息的并行LSN;
将多事务中涉及每个表的第一个操作的LSN设为起始LSN。
4.根据权利要求3所述的基于事务合并的并行执行方法,其特征在于,所述通过对提交操作的判断、表操作信息的冲突检测、并行LSN的判断以及起始LSN的判断来进入相对应的步骤具体包括:
提交操作判断步骤:根据当前单事务的下一个操作的操作类型来选择进入冲突检测步骤或线程提交步骤;
冲突检测步骤:根据是否存在上一个执行线程以及在上一个执行线程中是否存在对应的表操作信息来进入提交操作判断步骤或并行LSN判断步骤;
并行LSN判断步骤:根据当前操作的LSN以及表操作信息中的并行LSN的大小来选择进入冲突检测步骤或起始LSN判断步骤;
起始LSN判断步骤:根据当前操作的LSN以及表操作信息中的起始LSN的大小来选择进入冲突检测步骤或等待唤醒。
5.根据权利要求4所述的基于事务合并的并行执行方法,其特征在于,所述提交操作判断步骤具体包括:
提取当前单事务中下一个操作,判断操作是否为提交操作;
若是提交操作则进入线程提交步骤,若不是则进入冲突检测步骤。
6.根据权利要求5所述的基于事务合并的并行执行方法,其特征在于,所述冲突检测步骤具体包括:
在执行线程链表中提取上一个执行线程,若没有上一个执行线程则执行当前操作,然后进入提交操作判断步骤;若有,则进行下一步冲突检测;
通过当前操作的表名和操作类型在被检测执行线程中查找对应的表操作信息,若没找到,则重新进入冲突检测步骤;若找到,则进入并行LSN判断步骤。
7.根据权利要求6所述的基于事务合并的并行执行方法,其特征在于,在查找对应的表操作信息时,查找的规则包括:
若当前操作是INSERT操作,则在被检测执行线程中查找UPDATE和DELETE操作的表操作信息;
若当前操作是UPDATE操作,则在被检测执行线程中查找INSERT、UPDATE和DELETE操作的表操作信息;
若当前操作是DELETE操作,则在被检测执行线程中查找INSERT和UPDATE操作的表操作信息。
8.根据权利要求6所述的基于事务合并的并行执行方法,其特征在于,所述并行LSN判断步骤具体包括:
判断当前操作的LSN是否小于被检测执行线程的表操作信息中的并行LSN;
若小于,则重新进入冲突检测步骤;若不小于,则进入起始LSN判断步骤。
9.根据权利要求8所述的基于事务合并的并行执行方法,其特征在于,所述起始LSN判断步骤具体包括:
判断当前操作的LSN是否小于被检测执行线程的表操作信息中的起始LSN;
若小于,则重新进入冲突检测步骤;若不小于,则将当前执行线程添加到被检查执行线程的唤醒链表上,等被检查执行线程提交后再执行。
10.一种基于事务合并的并行执行设备,其特征在于:
包括至少一个处理器和存储器,所述至少一个处理器和存储器之间通过数据总线连接,所述存储器存储能被所述至少一个处理器执行的指令,所述指令在被所述处理器执行后,用于完成权利要求1-9中任一项所述的基于事务合并的并行执行方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111501971.0A CN114296885A (zh) | 2021-12-09 | 2021-12-09 | 一种基于事务合并的并行执行方法及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111501971.0A CN114296885A (zh) | 2021-12-09 | 2021-12-09 | 一种基于事务合并的并行执行方法及设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114296885A true CN114296885A (zh) | 2022-04-08 |
Family
ID=80968077
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111501971.0A Pending CN114296885A (zh) | 2021-12-09 | 2021-12-09 | 一种基于事务合并的并行执行方法及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114296885A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2024041191A1 (zh) * | 2022-08-26 | 2024-02-29 | 华为技术有限公司 | 数据处理方法及装置 |
-
2021
- 2021-12-09 CN CN202111501971.0A patent/CN114296885A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2024041191A1 (zh) * | 2022-08-26 | 2024-02-29 | 华为技术有限公司 | 数据处理方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20160292213A1 (en) | Processing transactions in a distributed computing system | |
US20100332471A1 (en) | Bloom Bounders for Improved Computer System Performance | |
CN111694798B (zh) | 一种基于日志解析的数据同步方法及数据同步系统 | |
CN112559626B (zh) | 一种基于日志解析的ddl操作的同步方法和同步系统 | |
CN114296885A (zh) | 一种基于事务合并的并行执行方法及设备 | |
CN111858504B (zh) | 基于日志解析同步的操作合并执行方法和数据同步系统 | |
CN112270290A (zh) | 人脸图像动态聚类方法、装置、电子设备和存储介质 | |
CN111797104A (zh) | 数据变更情况的获取方法、装置及电子设备 | |
CN105045563B (zh) | 一种推测嵌套软件事务存储的冲突管理方法 | |
CN111930692B (zh) | 一种基于日志解析同步的事务合并执行方法及装置 | |
CN111858503B (zh) | 一种基于日志解析同步的并行执行方法和数据同步系统 | |
CN112035222B (zh) | 一种基于日志解析同步的事务操作合并执行方法及装置 | |
US10983839B2 (en) | Method, apparatus, and electronic device for improving CPU performance | |
CN114297291B (zh) | 一种基于事务合并的并行执行方法及设备 | |
CN106649584B (zh) | 一种主从式数据库系统中的索引处理方法和装置 | |
CN114296886A (zh) | 一种基于范围行锁的并行执行方法及设备 | |
CN114296887A (zh) | 一种基于事务合并的并行执行方法及设备 | |
CN111858505B (zh) | 一种基于日志解析同步的并行执行方法和数据同步系统 | |
CN114443659A (zh) | 联接表的方法和装置 | |
CN111930693B (zh) | 一种基于日志解析同步的事务合并执行方法及装置 | |
CN111723061A (zh) | 一种数据库系统的并发控制方法和装置 | |
US10180961B2 (en) | Remote nested join between primary access module processors (AMPs) | |
WO2020106548A4 (en) | Single entry combined functionality | |
CN113377502B (zh) | 事务处理方法、装置、服务器、数据库管理系统及介质 | |
CN111858626B (zh) | 一种基于并行执行的数据同步的方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |