一种数据库修改方法、装置、设备及介质与流程

文档序号:30583832发布日期:2022-06-29 14:16阅读:91来源:国知局
1.本发明涉及计算机
技术领域
:,尤其涉及一种数据库修改方法、装置、设备及介质。
背景技术
::2.数据库系统允许多个用户并发访问和修改数据,不同用户的并发操作最终体现为不同事务的并发执行,有可能会出现多个事务同时访问或修改同一行数据的情况,现有技术中,为了保证数据的正确性和一致性,数据库系统必须要进行并发控制,其中最常用的方式就是封锁,在修改数据之前,先对数据库对象进行x封锁,在此期间其他事务的访问和修改动作都会被阻塞住,在数据修改完成后再释放x锁,以此来保证并发情况下数据的正确性和一致性。3.现有技术中,为了降低数据库行锁的资源消耗和维护代价,其中一种行锁优化方式是将事务标识号(transactionidentifier,事务标识号)作为封锁目标进行封锁,以此来替代传统的行级封锁。事务启动时首先以当前事务号为封锁目标,采用x封锁模式封锁当前事务号tid,另外在执行插入、删除、更新操作后,只要将当前事务号写入记录的tid字段中,就相当于对这一行记录也进行了x封锁,减少了行锁资源的消耗。在事务结束之前,另一个事务要修改相同记录时,先从记录中读出tid值,根据多版本并发控制技术的可见性规则判断记录对其是否可见,由于事务1还未提交,因此这条记录对事务2是不可见的,事务2对记录中当前的tid值进行x封锁时会被阻塞住,直到事务1结束时将其唤醒,从而达到多个事务并发控制的目的,这种封锁策略在没有产生记录更新冲突时不需要额外的封锁,但是,在现有技术中的很多场景下,还是会存在多个更新冲突的事务仍然可能被同时唤醒的情况,会造成不必要的并发冲突,增加了数据库行锁的资源消耗以及维护代价,使得系统执行的效率低下。4.公开内容5.有鉴于此,本发明提供一种数据库修改方法、装置、设备及介质,能够避免冲突事务被同时唤醒后,执行无效的数据查询及修改,提升系统并发执行的效率。6.根据本发明的一方面,本发明实施例提供了一种数据库修改方法,该方法包括:7.在释放目标事务的事务锁对象以及唤醒等待事务之时,确定冲突事务登记表内等待事务目标记录的封锁信息的登记情况;8.根据所述登记情况确定所述等待事务的执行策略;9.按照所述执行策略控制所述等待事务修改数据。10.根据本发明的另一方面,本发明实施例还提供了一种数据库修改方法装置,该装置包括:11.登记确定模块,用于在释放目标事务的事务锁对象以及唤醒等待事务之时,确定冲突事务登记表内等待事务目标记录的封锁信息的登记情况;12.策略确定模块,用于根据所述登记情况确定所述等待事务的执行策略;13.数据修改模块,用于按照所述执行策略控制所述等待事务修改数据。14.根据本发明的另一方面,本发明实施例还提供了一种电子设备,所述电子设备包括:15.至少一个处理器;以及16.与所述至少一个处理器通信连接的存储器;其中,17.所述存储器存储有可被所述至少一个处理器执行的计算机程序,所述计算机程序被所述至少一个处理器执行,以使所述至少一个处理器能够执行本发明任一实施例所述的数据库修改方法。18.根据本发明的另一方面,本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,所述计算机指令用于使处理器执行时实现本发明任一实施例所述的数据库修改方法。19.本发明实施例的技术方案,通过在释放目标事务的事务锁对象以及唤醒等待事务之时,确定冲突事务登记表内等待事务目标记录的封锁信息的登记情况;根据登记情况确定等待事务的执行策略;按照执行策略控制等待事务修改数据。本发明实施例,通过在释放目标事务的事务锁对象以及唤醒等待事务之时,确定冲突事务登记表内等待事务目标记录的封锁信息的登记情况,并根据登记情况确定等待事务的执行策略,避免了冲突事务被同时唤醒后,执行无效的数据查询及数据修改,提升了系统并发执行的效率。20.应当理解,本部分所描述的内容并非旨在标识本发明的实施例的关键或重要特征,也不用于限制本发明的范围。本发明的其它特征将通过以下的说明书而变得容易理解。附图说明21.为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。22.图1为本发明实施例一提供的一种数据库修改方法的流程图;23.图2为本发明实施例二提供的一种数据库修改方法的流程图;24.图3为本发明实施例三提供的一种数据库修改方法的流程图;25.图4是本发明实施例四提供的一种数据库修改装置的结构框图;26.图5示出了可以用来实施本发明的实施例的电子设备的结构示意图。具体实施方式27.为了使本
技术领域
:的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。28.需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“目标”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。29.现有技术中,针对数据库修改,通常是首先进行数据准备:createtablet(idint,valint);insertintotvalues(1,1);commit;插入的这一行记录以rec1标识,其rowid值以rowid1标识。trxa执行updatetsetval=val+1whereid=1;更新t表的rec1记录。trxa启动时x模式封锁自己的事务号tida,锁对象为locka[tida,x]。更新操作执行后,rec1的tid字段写入了tida。[0030]trxb执行updatetsetval=val+1whereid=1;更新t表的rec1记录。trxb启动时x模式封锁自己的事务号tidb,锁对象为lockb[tidb,x]。执行更新操作时,读取rec1的tid字段为tida,由于trxa是活动事务,trxb对trxa的事务号tida执行s封锁,产生封锁等待。trxb处于等待状态的锁对象为lockb2[tida,s,t,rowid1],与trxa事务的locka[tida,x]冲突。[0031]trxc执行updatetsetval=val+1whereid=1;更新t表的rec1记录。trxc启动时x模式封锁自己的事务号tidc,锁对象为lockc[tidc,x]。执行更新操作时,读取rec1的tid字段为tida,由于trxa是活动事务,trxc对trxa的事务号tida执行s封锁,产生封锁等待。trxc处于等待状态的锁对象为lockc2[tida,s,t,rowid1],与trxa事务的locka[tida,x]和trxb事务的lockb2[tida,s,t,rowid1]冲突。[0032]trxa事务提交,释放locka[tida,x],授予lockb2[tida,s,t,rowid1]权限并唤醒trxb,trxc的lockc2[tida,s,t,rowid1]由于与lockb2[tida,s,t,rowid1]冲突,继续等待。trxb被唤醒后,需要重新执行查询操作,获取更新后的rec1记录内容,再重新执行更新操作。trxb的更新操作执行完成以后,记录rec1的tid字段修改为tidb。[0033]trxd执行updatetsetval=val+1whereid=1;更新t表的rec1记录trxd启动时x模式封锁自己的事务号tidd,锁对象为lockd[tidd,x]。执行更新操作时,读取rec1的tid字段为tidb,由于trxb是活动事务,trxd对trxb的事务号tidb执行s封锁,产生封锁等待。trxd处于等待状态的锁对象为lockd2[tidb,s,t,rowid1],与trxb事务的lockb[tidb,x]冲突。[0034]trxb事务提交,释放lockb2[tida,s,t,rowid1],授予lockc2[tida,s,t,rowid1]权限唤醒trxc,释放lockb[tidb,x],授予lockd2[tidb,s,t,rowid1]权限唤醒trxd。[0035]在上述场景下由于lockc2和lockd2封锁的是不同的事务号,因此不认定为封锁冲突,所以trxc和trxd被同时唤醒,各自重新执行查询获取更新后的记录内容,再重新执行更新操作时,由于这两个事务修改的是同一行记录,导致trxc和trxd又形成了一次新的更新冲突,即多个存在数据更新冲突的事务仍然可能被同时唤醒,从而造成不必要的并发冲突,降低系统的执行效率。[0036]有鉴于此,本技术提出了一数据库修改方法、装置、设备及介质,确保事务提交或回滚时虽然唤醒了存在冲突的多个事务,但只有一个事务真正启动并执行,其他存在冲突的事务则继续处于封锁等待状态,避免冲突事务被同时唤醒后,执行无效的数据查询及数据修改,从而提升系统并发执行效率。[0037]实施例一[0038]在一实施例中,图1为本发明实施例一提供的一种数据库修改方法的流程图,本实施例可适用于对数据库中的数据进行修改时的情况,该方法可以由数据库修改装置来执行,该数据库修改装置可以采用硬件和/或软件的形式实现,该数据库修改装置可配置于电子设备中。如图1所示,该方法包括:[0039]s110、在释放目标事务的事务锁对象以及唤醒等待事务之时,确定冲突事务登记表内等待事务目标记录的封锁信息的登记情况。[0040]其中,目标事务可以理解为在进行事务提交或事务回滚时所释放的事务。事务锁对象可以理解为目标事务对某一事务标识号进行封锁的事务锁所对应的封锁对象,事务锁可用于在目标事务和等待事务产生冲突的情况下,对事务进行封锁。事务锁对象可以包含目标事务所封锁事务的标识号、目标事务的封锁模式、目标事务所修改的数据表标识号以及目标事务所修改数据的记录所在的行标识号等等,本实施例在此不做限制。等待事务可以理解为与目标事务存在冲突的事务,该等待事务需要在目标事务执行事务提交或事务回滚操作时被唤醒。目标记录可以理解为即将被唤醒的等待事务要修改的记录。[0041]在本实施例中,封锁信息可以理解为目标事务的事务锁对象中记录的信息。其中,封锁信息可以包括目标事务所封锁的事务标识号、目标事务的封锁模式、目标事务所修改的表标识号、目标事务所修改记录的行标识号以及目标事务可能重新封锁的事务标识号。[0042]需要说明的是,冲突事务登记表中所记录的内容可以包括冲突个数、冲突事务修改的表标识号数组、冲突事务修改的行标识号数组以及冲突事务的封锁事务标识号数组。当然,冲突事务登记表也可以采用哈希表的方式,在进行冲突事务表检查时,可以加快封锁信息查找的速度,以降低数组扫描代价,本实施例在此不做限制。[0043]在本实施例中,在目标事务提交或回滚,释放事务锁对象以及唤醒等待事务时,需要检查冲突事务登记表内有没有登记过等待事务目标记录的封锁信息。具体的,在目标事务提交或回滚,释放事务锁对象以及唤醒等待事务时,可以遍历查找冲突事务登记表中是否存在与等待事务目标记录相同的修改表标识号、修改记录所在的行标识号等,如果存在,则表明等待事务目标记录的封锁信息已被登记过;相反的,如果不存在,则表明等待事务目标记录的封锁信息未被登记过。[0044]在一实施例中,封锁信息至少包括下述之一:封锁事务标识号、封锁模式、修改表标识号、修改记录行标识号以及重新封锁的事务标识号。[0045]其中,封锁事务标识号可以理解为目标事务所封锁的事务的标识号,示例性的,目标事务所封锁的事务的标识号可以为事务a,也可以为事务b,还可以为事务c,本实施例在此不做限制。封锁模式可为共享型封锁,即s封锁;也可以为排他型封锁,即x封锁,本实施例在此不做限制。修改表标识号可以理解为目标事务在提交或回滚之前,所修改的表标识号。修改记录行标识号可以理解为目标事务在提交或回滚之前,所修改记录的行标识号。重新封锁的事务标识号可以理解为重新发起封锁请求时,需要重新封锁的事务标识号。[0046]在本实施例中,目标记录的封锁信息至少包括:封锁事务标识号、封锁模式、修改表标识号、修改记录行标识号以及重新封锁的事务标识号,以根据目标记录检查冲突事务登记表内是否已登记过该目标记录的封锁信息。[0047]s120、根据登记情况确定等待事务的执行策略。[0048]其中,执行策略可以理解为由等待事务目标记录的封锁信息的登记情况所确定的等待事务下一步的策略。执行策略可以为等待事务继续等待的策略,也可以为继续执行进行数据处理的策略,本实施例在此不做限制。[0049]在本实施例中,登记情况可以分为两种,一种是在目标事务提交或回滚时,释放目标事务的事务锁对象之后,唤醒等待事务之前,检查冲突事务登记表中没有登记等待事务目标记录的封锁信息;另一种是在目标事务提交或回滚时,释放目标事务的事务锁对象之后,唤醒等待事务之前,检查冲突事务登记表中已经登记等待事务目标记录的封锁信息。当然,针对两种不同的登记情况,所执行的策略是不同的。[0050]在本实施例中,可以依据等待事务目标记录的封锁信息的登记情况,以做出等待事务被唤醒后,是继续等待,还是继续执行进行数据处理的相关策略。具体的,在等待事务目标记录的封锁信息已经被登记过的情况下,不需要重复登记封锁信息,等待事务被唤醒后,执行策略可以为继续等待策略;相应的,在等待事务目标记录的封锁信息未被登记过的情况下,需要在冲突事务登记表中登记该封锁信息,等待事务被唤醒后,执行策略可以为处理策略,以继续执行数据处理操作。[0051]s130、按照执行策略控制等待事务修改数据。[0052]其中,修改数据可以理解为依据相应的执行策略使等待事务进行数据修改的操作。[0053]在本实施例中,可以依据相应的执行策略,以使等待事务进行数据修改。需要说明的是,修改数据可以为在等待事务目标记录的封锁信息未被登记过的情况下,在冲突事务登记表中登记该封锁信息,等待事务被唤醒后,重新查询数据更新后的内容,并重新执行相应的数据修改操作,修改数据也可以为在等待事务目标记录的封锁信息已经被登记过的情况下,在事务被唤醒后,根据冲突事务登记表所登记的封锁信息,重新发起封锁请求,确定新的事务锁对象并重新封锁事务,使事务处于继续等待状态。由此,可以确保只有一个事务处于真正启动并执行的状态,其他存在冲突的事务则继续处于封锁等待状态。[0054]本发明实施例的上述技术方案,通过在释放目标事务的事务锁对象以及唤醒等待事务之时,确定冲突事务登记表内等待事务目标记录的封锁信息的登记情况;根据登记情况确定等待事务的执行策略;按照执行策略控制等待事务修改数据。本发明实施例,通过在释放目标事务的事务锁对象以及唤醒等待事务之时,确定冲突事务登记表内等待事务目标记录的封锁信息的登记情况,并根据登记情况确定等待事务的执行策略,避免了冲突事务被同时唤醒后,执行无效的数据查询及数据修改,提升了系统并发执行的效率。[0055]在一实施例中,数据库修改方法,还包括:[0056]初始化冲突事务登记表,其中,初始化冲突事务登记表包括:设置冲突事务登记表中的冲突个数为0,设置冲突事务登记表中修改表标识号数组、修改行标识号数组以及封锁事务标识号数组均为空。[0057]在本实施例中,冲突事务登记表需要先进行相应的初始化操作,初始化冲突事务登记表可以包括:设置冲突事务登记表中的冲突个数为0,设置冲突事务登记表中的冲突事务修改的表标识号数组、冲突事务修改的行标识号数组以及冲突事务的封锁事务标识号数组均为空。[0058]实施例二[0059]在一实施例中,图2为本发明实施例二提供的一种数据库修改方法的流程图,本实施例在上述各实施例的基础上,对确定冲突事务登记表内目标事务的封锁信息的登记情况,以及根据登记情况确定等待事务的执行策略进行了进一步的细化,如图2所示,本实施例中的数据库修改方法具体可以包含如下步骤:[0060]s210、在释放目标事务的事务锁对象以及唤醒等待事务之时,遍历查找冲突事务登记表是否存在等待事务目标记录的封锁信息,若是,则执行s220;若否,则执行s230。[0061]s220、登记情况为封锁信息被登记过,确定执行策略为等待策略,其中,等待策略包括:设置事务锁对象中的重新封锁事务标识号,等待事务根据重新封锁事务标识号重新进行封锁。[0062]其中,等待策略可以理解为在封锁信息被登记过的情况下,使得等待事务被唤醒后,根据重新封锁事务标识号重新进行封锁,以使该等待事务继续处于等待状态的策略。[0063]在本实施例中,检查冲突事务登记表,在封锁信息已经被登记过的情况下,执行策略可以为获取冲突事务登记表中登记的冲突事务的封锁事务标识号,将此标识号设置为重新封锁的事务标识号,然后唤醒等待事务,等待事务被唤醒后,可以根据重新封锁的事务标识号、封锁模式、修改表标识号和修改行标识号重新构建新事务锁对象并进行封锁,以使得当前事务继续处于等待状态的策略,在被等待事务提交或回滚时,再次被重新唤醒。其中,封锁模式可以为s封锁,也可以为x封锁,本实施例在此不做限制。[0064]在本实施例中,在释放目标事务的事务锁对象以及唤醒等待事务之时,遍历查找冲突事务登记表是否存在等待事务目标记录的封锁信息,若存在,则表示等待事务目标记录的封锁信息被登记过,无需再进行重复登记操作。[0065]在一实施例中,等待事务根据重新封锁事务标识号重新进行封锁,包括:[0066]获取等待事务的重新封锁请求,并按照重新封锁请求创建等待事务的新事务锁对象;[0067]等待事务按照新事务锁对象重新执行封锁。[0068]其中,重新封锁请求可以理解为重新发起的封锁请求,可以为共享型封锁,即s封锁模式,也可以为排他型封锁,即x封锁模式,本实施例再次不做限制。新事务锁对象可以理解为依据新的封锁请求所确定的新事务锁对象,当然,新事务锁对象包含有封锁事务标识号,即为设置的重新封锁的事务标识号、当前封锁模式、修改表标识号以及修改记录所在的行标识号。[0069]需要说明的是,按照重新封锁请求创建等待事务的新事务锁对象时,封锁事务标识号使用的是已被设置的重新封锁的事务标识号,在等待事务被唤醒前,会从冲突事务登记表中获取到冲突事务的封锁事务标识号,并将此标识号设置为重新封锁的事务标识号,在等待事务被唤醒后,再以s封锁模式或x封锁模式的封锁请求重新进行封锁。[0070]在本实施例中,在获取等待事务的重新封锁请求时,可以按照重新封锁请求创建等待事务的新事务锁对象,以重新进行封锁。[0071]s230、登记情况为封锁信息未被登记过,确定执行策略为处理策略,其中,处理策略包括:在冲突事务登记表中登记封锁信息,等待事务查询更新后的记录内容,重新执行数据更新操作。[0072]其中,处理策略可以理解为在封锁信息未被登记过的情况下,登记该封锁信息,并进行相应数据处理的相关操作。[0073]在本实施例中,在释放目标事务的事务锁对象以及唤醒等待事务之时,遍历查找冲突事务登记表是否存在等待事务目标记录的封锁信息,若登记情况为封锁信息未被登记过,此时需要进行封锁信息的登记操作,执行策略为处理策略可以为在冲突事务登记表中登记该封锁信息,并在等待事务被唤醒后,等待事务查询更新后的记录内容,并重新执行数据更新操作,示例性的,对数据库中的表进行数据的插入、删除以及更新等相关操作。[0074]具体的,在冲突事务登记表中登记封锁信息,可以包括:将封锁信息的表标识号,添加至冲突事务登记表中的修改表标识号数组,将封锁信息的行标识号,添加至冲突事务登记表中登记的冲突事务修改的行标识号数组,将封锁信息的封锁事务标识号,添加至冲突事务登记表中登记的冲突事务的封锁事务标识号数组,并对冲突事务登记表中冲突个数进行加1操作。[0075]在一实施例中,在冲突事务登记表中登记所述封锁信息,包括:[0076]将封锁信息的表标识号添加至冲突事务登记表中的修改表标识号数组;[0077]将封锁信息的行标识号添加至冲突事务登记表中的修改行标识号数组;[0078]将封锁信息的封锁事务标识号添加至冲突事务登记表中的封锁事务标识号数组;[0079]对冲突事务登记表中冲突个数进行加1操作。[0080]其中,修改表标识号数组可以由修改表标识号组成;修改行标识号数组可以由修改行标识号组成;封锁事务标识号数组可以由封锁事务标识号所组成。示例性的,修改表标识号数组可以用tabids[]表示;修改行标识号数组可以用rowids[]表示;封锁事务标识号数组可以用tids[]表示,本实施例在此不做限制。[0081]在本实施例中,在封锁信息未被登记过的情况下,在冲突事务登记表中登记该封锁信息可以包括:将封锁信息的表标识号,添加至冲突事务登记表中的修改表标识号数组;将封锁信息的行标识号,添加至冲突事务登记表中登记的冲突事务修改的行标识号数组;将封锁信息的封锁事务标识号,添加至冲突事务登记表中登记的冲突事务的封锁事务标识号数组;对冲突事务登记表中冲突个数进行加1操作。[0082]本发明实施例的上述技术方案,通过在释放目标事务的事务锁对象以及唤醒等待事务之时,遍历查找冲突事务登记表是否存在等待事务目标记录的封锁信息;若是,则表示封锁信息被登记过;若否,则表示封锁信息未被登记过。在封锁信息被登记过的情况下,确定执行策略为等待策略,其中,等待策略包括:设置事务锁对象中的重新封锁事务标识号,等待事务根据重新封锁事务标识号重新进行封锁;在封锁信息未被登记过的情况下,确定执行策略为处理策略,其中,处理策略包括:在冲突事务登记表中登记封锁信息,等待事务查询更新后的记录内容,重新执行数据更新操作。本发明实施例,在释放目标事务的事务锁对象以及唤醒等待事务之时,通过遍历查找冲突事务登记表是否存在等待事务目标记录的封锁信息,在封锁信息被登记过的情况下,确定执行策略为等待策略,在封锁信息未被登记过的情况下,确定执行策略为处理策略,确保事务提交或回滚时虽然唤醒了存在冲突的多个事务,但只有一个事务真正启动并执行,其他存在冲突的事务则继续处于封锁等待状态,避免冲突事务被同时唤醒后,执行无效的数据查询及数据修改,从而提升系统并发执行效率。[0083]实施例三[0084]在一实施例中,为便于更好的理解数据库修改方法,图3为本发明实施例三提供的一种数据库修改方法的流程图,其中,trxb事务表示b事务,trxc表示c事务,trxd表示d事务,n_row表示冲突个数,lock_reg表示冲突事务登记表,lockb2表示trxb等待状态的锁对象,lockc2表示trxc等待状态的锁对象,lockd2表示为trxd等待状态的锁对象,s封锁即为共享型封锁,lockd3表示为新事务锁对象,relock_tid表示重新封锁的事务标识号。以场景trxb事务提交为例,说明具体的执行步骤如下:[0085]s310、初始化冲突事务登记表。[0086]在本实施例中,先初始化冲突事务登记表lock_reg,设置lock_reg中登记的n_row为0,设置所述冲突事务登记表中的冲突事务修改的表标识号数组、冲突事务修改的行标识号数组以及冲突事务的封锁事务标识号数组均为空。[0087]s320、在封锁信息未被登记过的情况下,确定执行策略为处理策略,并按照处理策略修改数据。[0088]在本实施例中,释放lockb2[tida,s,t,rowid1],授予lockc2[tida,s,t,rowid1]权限前,检查lock_reg,发现lock_reg中没有登记[t,rowid1]记录的封锁信息,因此在lock_reg中登记lockb2封锁的信息,并唤醒trxc,trxc被唤醒后重新执行查询获取更新后的记录内容,然后重新执行更新操作。[0089]需要说明的是,在lock_reg中登记lockb2封锁信息的具体步骤如下:[0090]a1、设置lock_reg中登记的tabids[n_row]为t;其中,t表示表标识号。[0091]a2、设置lock_reg中登记的rowids[n_row]为rowid1;rowid1表示行标识号。[0092]a3、设置lock_reg中登记的tids[n_row]为tida;tida表示封锁事务标识号。[0093]a4、设置lock_reg中登记的n_row为n_row+1。[0094]s330、在封锁信息被登记过的情况下,确定执行策略为等待策略,并按照等待策略进行处理。[0095]在本实施例中,释放lockb[tidb,x],授予lockd2[tidb,s,t,rowid1]权限前,检查lock_reg,发现已经登记了[t,rowid1]记录的封锁信息,因此设置lockd2对象中的relock_tid为lock_reg中登记的冲突事务的封锁事务标识号,即tida,并唤醒trxd。[0096]需要说明的是,trxd事务被唤醒后,根据lockd2上登记的relock_tid等信息,重新发起针对relock_tid的s封锁请求,新的事务锁对象为lockd3[tida,s,t,rowid1],由于lockd3与lockc2[tida,s,t,rowid1]冲突,因此trxd事务继续等待,并在trxc事务提交或回滚时被唤醒。[0097]本发明实施例在事务提交或回滚,释放锁对象,唤醒等待事务时,检查冲突事务登记表,确定等待事务被唤醒后,是继续执行,还是重新等待。如果冲突事务登记表上未登记等待事务待修改记录的相关信息,则将相关信息登记到冲突事务登记表上并唤醒等待事务,等待事务被唤醒后继续执行;如果冲突事务登记表上已登记了等待事务待修改记录的相关信息,则等待事务被唤醒后,重新以s模式或x模式封锁冲突表中登记的冲突事务的封锁事务标识号,重新进入等待状态。最终,事务提交或回滚虽然唤醒了存在冲突的多个事务,但可以确保只有一个事务真正启动并执行,其他存在冲突的事务则继续处于封锁等待状态。[0098]其中,事务锁对象中记录的内容如下:tid:封锁事务标识号、mode:封锁模式、tabid:修改表标识号、rowid:修改记录所在的行标识号、relock_tid:需要重新封锁的事务标识号。其中,冲突事务登记表中记录的内容如下:n_row:冲突个数、tabids[]:冲突事务修改的表标识号数组、rowids[]:冲突事务修改的行标识号数组、tids[]:冲突事务的封锁事务标识号数组。[0099]需要说明的是,冲突事务登记表也可以采用哈希表的方式,以降低数组扫描代价,本实施例在此不做限制。[0100]本发明实施例,通过事务提交或回滚释放封锁对象,唤醒等待事务时,登记事务锁的table标识号、row标识号以及封锁事务标识号等信息,并根据这些登记的事务锁信息,检查事务被唤醒后,是否会引发新的更新冲突,确保同一行记录的事务锁被释放时只唤醒一个等待事务,避免冲突事务被同时唤醒后,执行无效的数据查询及数据修改,提升系统并发执行效率。[0101]实施例四[0102]在一实施例中,图4是本发明实施例四提供的一种数据库修改装置的结构框图,该装置适用于对数据库中的数据进行修改时的情况,该装置可以由硬件/软件实现。可配置于电子设备中来实现本发明实施例中的一种数据库修改方法。如图4所示,该装置包括:登记确定模块410、策略确定模块420以及数据修改模块430。[0103]其中,登记确定模块,用于在释放目标事务的事务锁对象以及唤醒等待事务之时,确定冲突事务登记表内所述等待事务目标记录的封锁信息的登记情况;[0104]策略确定模块,用于根据所述登记情况确定所述等待事务的执行策略;[0105]数据修改模块,用于按照所述执行策略控制所述等待事务修改数据。[0106]本发明实施例,登记确定模块,通过在释放目标事务的事务锁对象以及唤醒等待事务之时,确定冲突事务登记表内等待事务目标记录的封锁信息的登记情况,策略确定模块,根据登记情况确定等待事务的执行策略,避免了冲突事务被同时唤醒后,执行无效的数据查询及数据修改,提升了系统并发执行的效率。[0107]在一实施例中,登记确定模块410,包括:[0108]信息查找单元,用于遍历查找所述冲突事务登记表是否存在等待事务目标记录的封锁信息;若是,则确定所述登记情况为所述封锁信息被登记过;若否,则确定所述登记情况为所述封锁信息未被登记过。[0109]在一实施例中,策略确定模块420,包括:[0110]第一策略确定模块,用于在所述封锁信息被登记过的情况下,确定所述执行策略为等待策略,其中,所述等待策略包括:设置事务锁对象中的重新封锁事务标识号,所述等待事务根据所述重新封锁事务标识号重新进行封锁。[0111]第二策略确定模块,用于在所述封锁信息未被登记过的情况下,确定所述执行策略为处理策略,其中,所述处理策略包括:在所述冲突事务登记表中登记所述封锁信息,所述等待事务查询更新后的记录内容,重新执行数据更新操作。[0112]在一实施例中,第一策略确定模块,包括:[0113]新事务锁对象确定模块,用于获取所述等待事务的重新封锁请求,并按照所述重新封锁请求创建所述等待事务的新事务锁对象;[0114]事务重锁单元,用于所述等待事务按照所述新事务锁对象重新执行封锁。[0115]在一实施例中,所述在所述冲突事务登记表中登记所述封锁信息,包括:[0116]将所述封锁信息的表标识号添加至所述冲突事务登记表中的修改表标识号数组;[0117]将所述封锁信息的行标识号添加至所述冲突事务登记表中登记的冲突事务修改的行标识号数组;[0118]将所述封锁信息的封锁事务标识号添加至所述冲突事务登记表中登记的冲突事务的封锁事务标识号数组;[0119]对所述冲突事务登记表中冲突个数进行加1操作。[0120]在一实施例中,所述封锁信息至少包括下述之一:封锁事务标识号、封锁模式、修改表标识号、修改记录行标识号以及重新封锁的事务标识号。[0121]在一实施例中,所述数据库修改装置,还包括:[0122]初始化模块,用于初始化冲突事务登记表,其中,所述初始化冲突事务登记表包括:设置所述冲突事务登记表中的冲突个数为0,设置所述冲突事务登记表中的冲突事务修改的表标识号数组、冲突事务修改的行标识号数组以及冲突事务的封锁事务标识号数组均为空。[0123]本发明实施例所提供的数据库修改装置可执行本发明任意实施例所提供的数据库修改方法,具备执行方法相应的功能模块和有益效果。[0124]在一实施例中,图5示出了可以用来实施本发明的实施例的电子设备的结构示意图。电子设备10旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备(如头盔、眼镜、手表等)和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本发明的实现。[0125]如图5所示,电子设备10包括至少一个处理器11,以及与至少一个处理器11通信连接的存储器,如只读存储器(rom)12、随机访问存储器(ram)13等,其中,存储器存储有可被至少一个处理器执行的计算机程序,处理器11可以根据存储在只读存储器(rom)12中的计算机程序或者从存储单元18加载到随机访问存储器(ram)13中的计算机程序,来执行各种适当的动作和处理。在ram13中,还可存储电子设备10操作所需的各种程序和数据。处理器11、rom12以及ram13通过总线14彼此相连。输入/输出(i/o)接口15也连接至总线14。[0126]电子设备10中的多个部件连接至i/o接口15,包括:输入单元16,例如键盘、鼠标等;输出单元17,例如各种类型的显示器、扬声器等;存储单元18,例如磁盘、光盘等;以及通信单元19,例如网卡、调制解调器、无线通信收发机等。通信单元19允许电子设备10通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。[0127]处理器11可以是各种具有处理和计算能力的通用和/或专用处理组件。处理器11的一些示例包括但不限于中央处理单元(cpu)、图形处理单元(gpu)、各种专用的人工智能(ai)计算芯片、各种运行机器学习模型算法的处理器、数字信号处理器(dsp)、以及任何适当的处理器、控制器、微控制器等。处理器11执行上文所描述的各个方法和处理,例如数据库修改方法。[0128]在一些实施例中,数据库修改方法可被实现为计算机程序,其被有形地包含于计算机可读存储介质,例如存储单元18。在一些实施例中,计算机程序的部分或者全部可以经由rom12和/或通信单元19而被载入和/或安装到电子设备10上。当计算机程序加载到ram13并由处理器11执行时,可以执行上文描述的数据库修改方法的一个或多个步骤。备选地,在其他实施例中,处理器11可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行数据库修改方法。[0129]本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、场可编程门阵列(fpga)、专用集成电路(asic)、专用标准产品(assp)、芯片上系统的系统(soc)、负载可编程逻辑设备(cpld)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。[0130]用于实施本发明的方法的计算机程序可以采用一个或多个编程语言的任何组合来编写。这些计算机程序可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器,使得计算机程序当由处理器执行时使流程图和/或框图中所规定的功能/操作被实施。计算机程序可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。[0131]在本发明的上下文中,计算机可读存储介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的计算机程序。计算机可读存储介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。备选地,计算机可读存储介质可以是机器可读信号介质。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程只读存储器(eprom或快闪存储器)、光纤、便捷式紧凑盘只读存储器(cd-rom)、光学储存设备、磁储存设备、或上述内容的任何合适组合。[0132]为了提供与用户的交互,可以在电子设备上实施此处描述的系统和技术,该电子设备具有:用于向用户显示信息的显示装置(例如,crt(阴极射线管)或者lcd(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给电子设备。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。[0133]可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(lan)、广域网(wan)、区块链网络和互联网。[0134]计算系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。服务器可以是云服务器,又称为云计算服务器或云主机,是云计算服务体系中的一项主机产品,以解决了传统物理主机与vps服务中,存在的管理难度大,业务扩展性弱的缺陷。[0135]应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本发明中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本发明的技术方案所期望的结果,本文在此不进行限制。[0136]上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1