一种数据库修改方法、装置、设备及存储介质制造方法及图纸

技术编号:21453900 阅读:31 留言:0更新日期:2019-06-26 04:46
本发明专利技术实施例公开了一种数据库修改方法、装置、设备及存储介质。该方法包括:于获取到事务的修改指令时,读取所述事务对应的待修改数据的事务号;若所述待修改数据的事务号对应的事务状态为执行状态,则通过共享锁封锁所述待修改数据的事务号,并记录所述修改指令中携带的修改位置信息;根据所述修改位置信息更新锁等待数组;若更新后的锁等待数组为空,则根据所述修改位置信息修改所述待修改数据,并将所述待修改数据的事务号替换为所述事务对应的事务号,通过本发明专利技术的技术方案,能够将没有并发冲突的事务全部唤醒,允许这些事务之间并发执行,从而进一步提高系统的并发度。

【技术实现步骤摘要】
一种数据库修改方法、装置、设备及存储介质
本专利技术实施例涉及计算机技术,尤其涉及一种数据库修改方法、装置、设备及存储介质。
技术介绍
数据库系统允许多个用户并发访问和修改数据,不同用户的并发操作最终体现为不同事务的并发执行。有可能会出现多个事务同时访问或修改同一行数据的情况,为了保证数据的正确性和一致性,数据库系统必须要进行并发控制,其中最常用的方式就是封锁。在修改数据之前,先对数据库对象进行X封锁,在此期间其他事务的访问和修改动作都会被阻塞住,在数据修改完成后再释放X锁,以此来保证并发情况下数据的正确性和一致性。为了降低数据库行锁的资源消耗和维护代价,其中一种行锁优化方式是将事务号TID作为封锁目标进行封锁(称之为TID锁),以此来替代传统的行级封锁。事务启动时以自身事务号为封锁目标,采用X封锁模式,生成一个TID锁。在事务执行插入、删除、更新操作时,只要将当前事务号写入数据的TID字段中,就相当于对这一行数据进行了X封锁,减少了行锁资源的消耗。在事务(Trx1)结束之前,另一个事务(Trx2)要修改相同位置的数据时,先从待修改数据中读出TID值,根据多版本并发控制的可见性规则(其他事务看不到未提交事务的任何修改)判断数据对自己是否可见,由于事务Trx1还未提交,因此这行数据对Trx2是不可见的,Trx2试图对数据中携带的TID值进行封锁时会被阻塞住,直到事务Trx1结束时将其唤醒,从而达到多个事务并发控制的目的。这种封锁策略,只在产生数据更新冲突时,才需要进行TID封锁,没有冲突时不需要额外的封锁,可以有效降低传统行锁的资源消耗代价。由于事务修改数据前对自己的TID采用X模式封锁,因此事务在更新不可见数据时不管是以S模式还是X模式封锁数据中的TID时,都会被前一个更新数据的事务阻塞住。采用S封锁时,如果多个并发事务更新的是同一行数据,TID锁对应的事务提交或回滚后,会一次性将所有S封锁等待的事务唤醒。由于这些被唤醒的事务更新的是同一行数据,因此会继续产生冲突,最终只会有一个事务更新成功,其他被唤醒的事务又要继续等待这个新执行的事务提交或回滚。而采用X封锁时,TID锁对应的事务提交或回滚后,只会唤醒一个事务,其他事务会继续阻塞,这种方式有助于降低无效的并发冲突,但是这种方式在不同事务更新不同数据的场景下,又显得过于保守,导致不冲突事务被阻塞,降低事务的处理速度。
技术实现思路
本专利技术实施例提供一种数据库修改方法、装置、设备及存储介质,以实现能够将没有并发冲突的事务全部唤醒,允许这些事务之间并发执行,从而进一步提高系统的并发度的目的。第一方面,本专利技术实施例提供了一种数据库修改方法,包括:于获取到事务的修改指令时,读取所述事务对应的待修改数据的事务号;若所述待修改数据的事务号对应的事务状态为执行状态,则通过共享锁封锁所述待修改数据的事务号,并记录所述修改指令中携带的修改位置信息;根据所述修改位置信息更新锁等待数组;若更新后的锁等待数组为空,则根据所述修改位置信息修改所述待修改数据,并将所述待修改数据的事务号替换为所述事务对应的事务号。第二方面,本专利技术实施例还提供了一种数据库修改装置,该装置包括:读取模块,用于于获取到事务的修改指令时,读取所述事务对应的待修改数据的事务号;封锁模块,用于若所述待修改数据的事务号对应的事务状态为执行状态,则通过共享锁封锁所述待修改数据的事务号,并记录所述修改指令中携带的修改位置信息;更新模块,用于根据所述修改位置信息更新锁等待数组;修改模块,用于若更新后的锁等待数组为空,则根据所述修改位置信息修改所述待修改数据,并将所述待修改数据的事务号替换为所述事务对应的事务号。第三方面,本专利技术实施例还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如本专利技术实施例中任一所述的数据库修改方法。第四方面,本专利技术实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本专利技术实施例中任一所述的数据库修改方法。本专利技术实施例通过于获取到事务的修改指令时,读取事务对应的待修改数据的事务号;若待修改数据的事务号对应的事务状态为执行状态,则通过共享锁封锁待修改数据的事务号,并记录修改指令中携带的修改位置信息;根据修改位置信息更新锁等待数组;若更新后的锁等待数组为空,则根据修改位置信息修改待修改数据,并将待修改数据的事务号替换为事务对应的事务号,能够将没有并发冲突的事务全部唤醒,允许这些事务之间并发执行,从而进一步提高系统的并发度。附图说明为了更清楚地说明本专利技术实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本专利技术的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。图1A是本专利技术实施例一中的一种数据库修改方法的流程图;图1B是本专利技术实施例一中的事务并发执行流程图;图2是本专利技术实施例二中的一种数据库修改方法的流程图;图3是本专利技术实施例三中的一种数据库修改装置的结构示意图;图4是本专利技术实施例四中的一种计算机设备的结构示意图。具体实施方式下面结合附图和实施例对本专利技术作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本专利技术,而非对本专利技术的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本专利技术相关的部分而非全部结构。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本专利技术的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。实施例一图1A为本专利技术实施例一提供的一种数据库修改方法的流程图,本实施例可适用于数据库修改的情况,该方法可以由本专利技术实施例中的数据库修改装置来执行,该装置可采用软件和/或硬件的方式实现,如图1A所示,该方法具体包括如下步骤:S110,于获取到事务的修改指令时,读取事务对应的待修改数据的事务号。其中,所述事务为修改事务,例如可以是,所述事务为将表一第二行的数据修改为A。其中,所述修改指令为用于修改数据库中的数据的指令。其中,所述事务号为事务对应的TID值。其中,所述事务对应的待修改数据的事务号为在进行本步骤之前,对待修改数据进行修改操作的事务对应的事务号,例如可以是,事务Q对数据A进行修改操作之后,将自己的事务号写入到数据A中。具体的,于获取到事务的修改指令时,读取事务对应的待修改数据的事务号,例如可以是,获取到事务W的修改指令时,读取事务W对应的待修改数据为数据C,读取数据C中携带的事务号为事务号E。可选的,读取所述事务对应的待修改数据的事务号之前,还包括:通过排他锁封锁所述事务对应的事务号。具体的,于获取到事务的修改指令时,获取事务对应的事务号,通过排他锁封锁事务对应的事务号。S120,若待修改数据的事务号对应的事务状态为执行状态,则通过共享锁封锁待修改数据的事务号,并记录修改指令中携带的修改位置信息。其中,每一个事务都有对应的事务号,且不同的事务对应的事务号不同。其中,执行状态为事务处于未结束状态,例如可以是,事务Q本文档来自技高网
...

【技术保护点】
1.一种数据库修改方法,其特征在于,包括:于获取到事务的修改指令时,读取所述事务对应的待修改数据的事务号;若所述待修改数据的事务号对应的事务状态为执行状态,则通过共享锁封锁所述待修改数据的事务号,并记录所述修改指令中携带的修改位置信息;根据所述修改位置信息更新锁等待数组;若更新后的锁等待数组为空,则根据所述修改位置信息修改所述待修改数据,并将所述待修改数据的事务号替换为所述事务对应的事务号。

【技术特征摘要】
1.一种数据库修改方法,其特征在于,包括:于获取到事务的修改指令时,读取所述事务对应的待修改数据的事务号;若所述待修改数据的事务号对应的事务状态为执行状态,则通过共享锁封锁所述待修改数据的事务号,并记录所述修改指令中携带的修改位置信息;根据所述修改位置信息更新锁等待数组;若更新后的锁等待数组为空,则根据所述修改位置信息修改所述待修改数据,并将所述待修改数据的事务号替换为所述事务对应的事务号。2.根据权利要求1所述的方法,其特征在于,还包括:若所述待修改数据的事务号对应的事务状态为结束状态,则对所述待修改数据进行修改,并将所述待修改数据的事务号替换为所述事务对应的事务号。3.根据权利要求1所述的方法,其特征在于,根据所述修改位置信息更新锁等待数组包括:获取锁对象,并将其存储至所述锁等待数组中,其中,所述锁对象包括与第一事务锁的模式冲突的锁和/或与第一事务锁的修改位置信息相同的锁,其中,所述第一事务锁为通过共享锁封锁所述待修改数据的事务号得到的锁;于检测到所述锁对象对应的事务的事务状态为结束状态时,删除所述锁等待数组中的锁对象。4.根据权利要求3所述的方法,其特征在于,于获取到事务的修改指令时,读取所述事务对应的待修改数据的事务号之前,还包括:通过排他锁封锁所述事务对应的事务号。5.根据权利要求4所述的方法,其特征在于,通过排他锁封锁所述事务对应的事务号包括:通过排他锁封锁所述事务对应的事务号得到第二事务锁,根据所述事务的事务号计算所述第二事务锁的哈希值;根据所述第二事务锁的哈希值将所述第二事务锁存储至哈希表中,其中,所述哈希表包括处于执行状态的事务对应的锁。6.根据权利要求5所述的方法,其特征...

【专利技术属性】
技术研发人员:王蒙蒙王海龙
申请(专利权)人:上海达梦数据库有限公司
类型:发明
国别省市:上海,31

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1