CN117687807A - 数据处理方法、装置、电子设备及存储介质 - Google Patents
数据处理方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN117687807A CN117687807A CN202311808967.8A CN202311808967A CN117687807A CN 117687807 A CN117687807 A CN 117687807A CN 202311808967 A CN202311808967 A CN 202311808967A CN 117687807 A CN117687807 A CN 117687807A
- Authority
- CN
- China
- Prior art keywords
- data line
- data
- locking
- information
- acquiring
- 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
- 238000003672 processing method Methods 0.000 title claims abstract description 26
- 238000012545 processing Methods 0.000 claims abstract description 144
- 238000005457 optimization Methods 0.000 claims abstract description 24
- 238000012216 screening Methods 0.000 claims abstract description 13
- 238000000034 method Methods 0.000 claims description 37
- 230000008569 process Effects 0.000 claims description 9
- 238000004590 computer program Methods 0.000 claims description 7
- 238000012423 maintenance Methods 0.000 abstract description 5
- 238000010586 diagram Methods 0.000 description 8
- 101100356020 Haemophilus influenzae (strain ATCC 51907 / DSM 11121 / KW20 / Rd) recA gene Proteins 0.000 description 7
- 101100042680 Mus musculus Slc7a1 gene Proteins 0.000 description 7
- 101100412102 Haemophilus influenzae (strain ATCC 51907 / DSM 11121 / KW20 / Rd) rec2 gene Proteins 0.000 description 5
- 238000004891 communication Methods 0.000 description 5
- 238000001914 filtration Methods 0.000 description 5
- 230000002776 aggregation Effects 0.000 description 4
- 238000004220 aggregation Methods 0.000 description 4
- 230000000694 effects Effects 0.000 description 4
- 230000000903 blocking effect Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000009467 reduction Effects 0.000 description 2
- 230000004931 aggregating effect Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/526—Mutual exclusion algorithms
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请涉及一种数据处理方法、装置、电子设备及存储介质,响应于待执行的目标语句,从数据库中获取与所述目标语句对应的数据行,并将所述数据行添加至第一数据行列表;利用加锁引擎依次对所述第一数据行列表中的数据行进行加锁处理;获取加锁处理后数据行的记录信息,所述记录信息包括所述数据行的更新信息以及所述数据行的数据信息;判断加锁处理后的数据行是否满足优化判断条件;在所述数据行满足优化判断条件的情况下,根据所述数据行的更新信息对加锁处理后的数据行进行筛选处理,得到目标数据行,并对所述目标数据行执行目标语句。避免了不必要的锁等待和锁冲突,提高了分布式数据库并发DML的执行效率,节省了额外的运维代价。
Description
技术领域
本申请涉及数据处理领域,尤其涉及一种数据处理方法、装置、电子设备及存储介质。
背景技术
目前主流的索引组表,通过select for update语句对数据的加排他锁时,需要先对数据加行锁,后读取数据,然后对不匹配的数据释放行锁。这个流程中会出现等待不匹配数据的行锁,甚至在同一个表存在并发加锁读的情况下,可能产生不必要的死锁。可以通过合理放弃非目标行的锁等待,以此有效避免不必要的锁冲突。
因而,亟需研发一种数据处理方法、装置、电子设备及存储介质解决上述存在的一个或多个问题。
发明内容
鉴于此,为解决上述技术问题或部分技术问题,本发明实施例提供一种数据处理方法、装置、电子设备及存储介质。
第一方面,本申请提供了一种数据处理方法,所述方法包括:
响应于待执行的目标语句,从数据库中获取与所述目标语句对应的数据行,并将所述数据行添加至第一数据行列表;
利用加锁引擎依次对所述第一数据行列表中的数据行进行加锁处理;
获取加锁处理后数据行的记录信息,所述记录信息包括所述数据行的更新信息以及所述数据行的数据信息;
根据所述数据行的数据信息,判断加锁处理后的数据行是否满足优化判断条件;
在所述数据行满足优化判断条件的情况下,根据所述数据行的更新信息对加锁处理后的数据行进行筛选处理,得到目标数据行,并对所述目标数据行执行目标语句。
在一个可能的实施方式中,所述方法还包括:
在所述数据行不满足优化器判断条件的情况下,利用所述加锁引擎释放加锁处理后的数据行,并利用加锁引擎对所述第一数据行列表中与所述数据行相邻的下一行数据行进行加锁处理。
在一个可能的实施方式中,所述获取加锁处理后数据行的记录信息,包括:
获取所述数据行的加锁处理结果,并将所述加锁处理结果添加至所述数据行的更新信息;
在所述数据行的加锁处理结果为加锁成功的情况下,获取所述数据行的数据信息;
在所述数据行的加锁处理结果为加锁失败的情况下,获取所述数据行的历史可见记录信息,并根据所述历史可见记录信息获取所述数据行的数据信息。
在一个可能的实施方式中,所述获取加锁处理后数据行的记录信息,还包括:
在所述数据行对应的数据表的索引为二级索引的情况下,获取所述数据行对应的二级索引的加锁处理结果,并将所述加锁处理结果添加至所述数据行的更新信息;
在所述二级索引的加锁处理结果加锁成功的情况下,利用加锁引擎对所述数据行对应的主键索引进行加锁处理,获取加锁处理后所述数据行对应的主键索引的记录信息,根据所述记录信息得到所述数据行的数据信息;
在所述二级索引的加锁处理结果加锁失败情况下,获取所述数据行的历史可见记录信息,并根据所述历史可见记录信息获取所述数据行的数据信息。
在一个可能的实施方式中,所述利用加锁引擎对所述数据行对应的主键索引进行加锁处理之前,所述方法还包括:
通过所述数据行对应的二级索引获取所述数据行对应的主键索引。
在一个可能的实施方式中,所述获取加锁处理后所述数据行对应的主键索引的记录信息,包括:
获取所述数据行对应的主键索引的加锁处理结果,将所述加锁处理结果添加至所述主键索引的更新信息;
在所述数据行对应的主键索引为加锁处理结果为加锁成功的情况下,获取所述数据行的数据信息;
在所述数据行对应的主键索引为加锁处理结果为加锁失败的情况下,获取所述数据行的历史可见记录信息,并根据所述历史可见记录信息获取所述数据行的数据信息。
在一个可能的实施方式中,所述根据所述数据行的更新信息对加锁处理后的数据行进行筛选处理,得到目标数据行,包括:
根据所述数据行的更新信息得到所述数据行的加锁处理结果;
判断所述数据行的加锁处理结果是否为加锁成功,若是,将所述数据行作为目标数据行,否则,利用加锁引擎重新对所述数据行进行加锁处理。
第二方面,本申请提供了一种数据处理装置,所述装置包括:
第一获取模块:用于响应于待执行的目标语句,从数据库中获取与所述目标语句对应的数据行,并将所述数据行添加至第一数据行列表;
加锁模块:用于利用加锁引擎依次对所述第一数据行列表中的数据行进行加锁处理;
第二获取模块:用于获取加锁处理后数据行的记录信息,所述记录信息包括所述数据行的更新信息以及所述数据行的数据信息;
判断模块:用于根据所述数据行的数据信息,判断加锁处理后的数据行是否满足优化判断条件;
筛选模块:用于在所述数据行满足优化判断条件的情况下,根据所述数据行的更新信息对加锁处理后的数据行进行筛选处理,得到目标数据行,并对所述目标数据行执行目标语句。
第三方面,本申请提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现第一方面任一项实施例所述的数据处理方法的步骤。
第四方面,本申请提供了一种存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现第一方面任一项实施例所述的数据处理方法的步骤。
本申请实施例提供的上述技术方案与现有技术相比具有如下优点:本申请实施例提供的数据处理方法改善分布式数据库一致性控制导致的减小和并发DML下的锁冲突,以达到保持分布式强一致性的同时,单数据节点不再因非目标行产生锁冲突的效果,避免了不必要的锁等待和锁冲突,提高了分布式数据库并发DML的执行效率,节省了额外的运维代价。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
一个或多个实施例通过与之对应的附图中的图片进行示例性说明,这些示例性说明并不构成对实施例的限定,附图中具有相同参考数字标号的元件表示为类似的元件,除非有特别申明,附图中的图不构成比例限制。
图1为本申请实施例提供的一种数据处理方法的流程示意图;
图2为本申请实施例提供的另一种数据处理方法的流程示意图;
图3为本申请实施例提供的又一种数据处理方法的流程示意图;
图4为本申请实施例提供的一种数据处理方式的步骤示意图;
图5为本申请实施例提供的另一种数据处理方式的步骤示意图;
图6为本申请实施例提供的一种数据处理装置的结构示意图;
图7为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请的一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
下文的公开提供了许多不同的实施例或例子用来实现本发明的不同结构。为了简化本发明的公开,下文中对特定例子的部件和设置进行描述。当然,它们仅仅为示例,并且目的不在于限制本发明。此外,本发明可以在不同例子中重复参考数字和/或字母。这种重复是为了简化和清楚的目的,其本身不指示所讨论各种实施例和/或设置之间的关系。
对于单机数据库,在特定场景下,RC隔离级别的查询和预加锁会引入不必要的单节点锁冲突,甚至死锁,为解决现有技术中存在的单数据节点的加锁读语句中对非目标行加锁产生锁冲突问题和缺陷,本申请提供了一种数据处理方法装置、电子设备及存储介质,能实现改善分布式数据库一致性控制导致和减小并发DML下的锁冲突,以达到保持分布式强一致性的同时,避免因非目标行产生锁冲突的效果。
图1为本申请实施例提供的一种数据处理方法的流程示意图,如图1所示,该方法具体包括:
S101、响应于待执行的目标语句,从数据库中获取与所述目标语句对应的数据行,并将所述数据行添加至第一数据行列表;
行级锁是数据库中锁定粒度最细的一种锁,表示只针对当前操作的行进行加锁,加锁粒度最小能大大减少数据库操作的行级锁突冲。
数据行上锁时,多个数据行上锁必须排队,数据行队列由元组锁维护,排在后面等待上锁的数据行检查到其他数据行处于上锁状态,该数据行进入睡眠等待状态,等待前面的数据行完成上锁后,阻塞结束,继续上锁。
在本实施例中,获取数据库中与目标语句对应的数据行,例如查询语句对应的数据行,根据对应的数据行建立第一数据行列表,依次进行加锁读取。
S102、利用加锁引擎依次对所述第一数据行列表中的数据行进行加锁处理;
当一个数据表上进行数据读取操作时,期间另一个数据行进行相同的操作,那么容易发生并发冲突,需要利用行锁,保证每个数据的读取操作相互独立,从而避免并发冲突。
数据库在执行目标语句时会根据where子句的条件,找到要访问的记录。如果这个where条件有索引,数据库就会使用这个索引。如果该索引是聚集索引,锁定该记录的时候就是锁定整个聚集索引。如果该索引是非聚集索引,锁定该记录的时候就是锁定这个非聚集索引中的索引项。
在本申请中,对与目标语句对应的数据行依次进行加锁处理,加锁后对数据行的数据进行读取操作,被锁定的数据行完成读取操作后会自动释放锁定,依次其次对其他数据行进行锁定处理,避免数据同时读取发生的并发冲突。
具体的,利用行锁依次对第一数据行列表中的数据行进行加锁处理,保护数据在一个数据行上的读取操作,从而保证数据行上数据的独立性和完整性,当数据行完成读取操作后,自动释放该数据行的行锁,继续对第一数据行列表中的下一相邻数据行进行加锁-读取处理。
需要说明的是,本申请实施例中的第一数据行列表中数据行可以根据与目标语句的对应关系进行排序。加锁后数据行的操作不限于读取操作,也可以是插入、删除写入等其它数据库操作。
S103、获取加锁处理后数据行的记录信息,所述记录信息包括所述数据行的更新信息以及所述数据行的数据信息;
在本实施例中,所述数据行的记录信息包括数据行的更新信息以及每一次更新对应的数据行中各数据的数据信息。
S104、根据所述数据行的数据信息,判断加锁处理后的数据行是否满足优化判断条件;
优化器可以控制引擎检索下一数据行、判断加锁处理后的数据行的记录是否满足判断条件、控制加锁引擎重新检索扫描当前数据行并加锁、以及重新释放当前数据行的行锁。
在本实施例中,将数据行的最新数据信息提交至优化器,根据优化器经过计算判断加锁处理后的数据行是否满足优化判断条件,若满足进行下一步操作处理,若不满足控制加锁引起释放该数据行的行锁,对第一数据行列表中的下一数据行执行加锁处理。
S105、在所述数据行满足优化判断条件的情况下,根据所述数据行的更新信息对加锁处理后的数据行进行筛选处理,得到目标数据行,并对所述目标数据行执行目标语句。
在本实施例中,对满足优化判断条件的数据行进行再一次判断处理,对满足优化判断条件并加锁的数据行执行目标语句,对满足优化判断条件但是未加锁的数据行重新执行加锁处理,此时重新执行加锁处理的数据行队列拥有加锁优先权,相对于第一次加锁引擎尝试加锁的数据行,加锁引擎优先执行满足优化判断条件但是未加锁的数据行,提高了分布式数据库并发DML的执行效率,节省锁等待的运维代价。
本实施例提供的数据处理方法,从数据库中获取与目标语句对应的数据行,然后将数据行添加至第一数据行列表,加锁引擎对第一数据行列表中的数据行依次进行加锁处理,其余数据行进去加锁等待状态,加锁后的数据行进行读取处理,判断是否满足优化判断条件,将满足优化判断条件且加锁成功的数据行作为目标盘数据行执行目标语句。合理放弃非目标数据行的锁等待,以此避免不必要的锁等待带来的数据库运维代价,改善分布式数据库一致性控制导致的减小和并发DML下的锁冲突,已达到保持分布式强一致性的同时,单数据节点不再因非目标行产生锁冲突的效果,提高了分布式数据库并发DML的执行效率。
在本发明实施例的一可选方案中,数据处理方法还包括:
在所述数据行不满足优化器判断条件的情况下,利用所述加锁引擎释放加锁处理后的数据行,并利用加锁引擎对所述第一数据行列表中与所述数据行相邻的下一行数据行进行加锁处理。
在本实施例中,优化器对加锁后或者为加锁成功的数据行进行判断处理,判断数据行是否被选中执行目标语句,优化器控制加锁引擎的运行状态和访问,加锁引擎释放未被选中的数据行的行锁,并扫描第一数据行列表中相邻的下一行数据行,并尝试加锁处理。
图2为本申请实施例提供的另一种数据处理方法的流程示意图,如图2所示,该方法具体包括:
S201、获取所述数据行的加锁处理结果,并将所述加锁处理结果添加至所述数据行的更新信息;
S202、在所述数据行的加锁处理结果为加锁成功的情况下,获取所述数据行的数据信息;
S203、在所述数据行的加锁处理结果为加锁失败的情况下,获取所述数据行的历史可见记录信息,并根据所述历史可见记录信息获取所述数据行的数据信息。
数据行的更新信息中记录数据行的每次加锁处理、行锁释放或者其余数据行处理,数据行的更新信息中每一次更新信息均对应不同的数据信息,根据数据行的更新信息可以得到数据行的加锁情况。
在本实施例中,获取加锁引擎反馈的数据行的加锁处理结果,并根据加锁处理结果对应更新数据行的更新信息。当加锁引擎对数据行加锁成功时,将加锁成功的操作对应添加至数据行的更新信息中,并获取此时加锁成功后数据行的数据信息与更新信息的加锁成功操作对应;当加锁引擎对数据行加锁失败时,获取数据行的历史可见记录信息,将历史可见记录信息中最新更新记录的记录信息对应的数据信息作为该数据行的数据信息。
本实施例提供的数据处理方法,获取数据行的加锁处理结果,根据数据行的加锁处理结果,分别在加锁成功的情况下直接获取所述数据行的数据信息,在加锁失败的情况想获取数据行的历史可见记录信息,并根据历史可见记录信息获取数据行的数据信息,避免了不必要的锁等待和锁冲突,提高了分布式数据库并发DML的执行效率。
图3为本申请实施例提供的又一种数据处理方法的流程示意图,如图3所示,该方法具体包括:
S301、在所述数据行对应的数据表的索引为二级索引的情况下,获取所述数据行对应的二级索引的加锁处理结果,并将所述加锁处理结果添加至所述数据行的更新信息;
S302、在所述二级索引的加锁处理结果加锁成功的情况下,利用加锁引擎对所述数据行对应的主键索引进行加锁处理,获取加锁处理后所述数据行对应的主键索引的记录信息,根据所述记录信息得到所述数据行的数据信息;
S303、在所述二级索引的加锁处理结果加锁失败情况下,获取所述数据行的历史可见记录信息,并根据所述历史可见记录信息获取所述数据行的数据信息。
二级索引只包含索引列和指向数据行的指针,不包含其他列的数据。二级索引通常存储在一个独立的文件中,可以通过索引列进行快速查找,但需要通过指针访问数据行。
在本实施例中,若二级索引的加锁处理成功,此时对当前二级索引记录进行回表处理,回表后利用加锁引擎对数据行对应的主键索引进行加锁处理,得到主键索引的记录信息,根据所述记录信息得到所述数据行的数据信息。若二级索引加锁失败,不进入锁等待,放弃对该数据行加锁,对当前的二级索引记录进行回表,回表时,创建一条最新的已提交记录。由于不能保证该二级索引对当前事务的可见性,所以需要可见的聚集索引记录验证二级索引记录的可见性,如果不可见,那么继续检索下一行,如果可见,那么该记录返回优化器,由优化器判断是丢弃还是重新扫描并加锁
回表是根据二级索引记录中的主键值,重新访问聚集索引,得到当前版本的可见记录。聚集索引中,为了实现多版本并发控制,行记录的是最新的记录和指向回滚日志的指针,而最新记录可能是其他事务未提交,因此可能对当前事务不可见。所以,根据最新的记录和回滚日志,生成一条对当前事务可见的记录。
根据表中的数据量和索引区分度生成执行计划,确定执行计划是直接访问聚集索引,或者仅访问二级索引,又或者访问二级索引并回表。但是加锁读因为记录锁存储在聚集索引上,因此必须回表,这里不涉及仅访问二级索引的场景。
在本发明实施例的一可选方案中,所述利用加锁引擎对所述数据行对应的主键索引进行加锁处理之前,所述方法还包括:
通过所述数据行对应的二级索引获取所述数据行对应的主键索引。
在本实施例中,通过数据行对应的二级索引获取数据行对应的主键值,重新访问聚集索引,得到当前版本的可见记录。
在本发明实施例的一可选方案中,所述获取加锁处理后所述数据行对应的主键索引的记录信息,包括:
获取所述数据行对应的主键索引的加锁处理结果,将所述加锁处理结果添加至所述主键索引的更新信息;
在所述数据行对应的主键索引为加锁处理结果为加锁成功的情况下,获取所述数据行的数据信息;
在所述数据行对应的主键索引为加锁处理结果为加锁失败的情况下,获取所述数据行的历史可见记录信息,并根据所述历史可见记录信息获取所述数据行的数据信息。
由于不能保证该二级索引对当前事务的可见性,所以需要可见的聚集索引记录验证二级索引记录的可见性,如果不可见,那么继续检索下一行,如果可见,那么该记录返回优化器,由优化器判断是丢弃还是重新扫描并加锁。
在本实施例中,回表后加锁引擎对主键索引尝试加锁,在加锁成功的情况下,获取数据行的数据信息,其中,在主键索引加锁成功的情况下,直接获取数据行的数据信息,在主键索引加锁失败的情况下,获取历史可见记录信息,从历史可见记录信息中获取数据行的数据信息。
二级索引加锁成功但是回表时主键索引加锁失败后,不进入锁等待,放弃对该行加锁,根据当前主键索引记录创建一条最新的已提交记录,虽然当前二级索引记录对当前事务可见,但是为了避免产生不必要的阻塞,将当前二级索引上的锁释放,将记录返回优化器,由优化器判断是丢弃该行还是重新扫描并加锁。
在本发明实施例的一可选方案中,所述根据所述数据行的更新信息对加锁处理后的数据行进行筛选处理,得到目标数据行,包括:
根据所述数据行的更新信息得到所述数据行的加锁处理结果;
判断所述数据行的加锁处理结果是否为加锁成功,若是,将所述数据行作为目标数据行,否则,利用加锁引擎重新对所述数据行进行加锁处理。
在本实施例中,在确定满足优化器判断条件后,需要将加锁后的数据行与未加锁的数据行分类处理,筛选出满足优化器判断条件且加锁成功的数据行作为目标数据行,对目标数据行执行目标语句保证每个数据行的读取等操作相互独立,从而避免并发冲突。并筛选出满足优化器判断条件但未加锁成功的数据行重新优先执行加锁处理,此时重新执行加锁处理的数据行队列拥有加锁优先权,相对于第一次加锁引擎尝试加锁的数据行,加锁引擎优先执行满足优化判断条件但是未加锁的数据行,提高了分布式数据库并发DML的执行效率,节省锁等待的运维代价。
图4为本申请实施例提供的一种数据处理方式的步骤示意图,具体为聚集索引扫描是优化后的一致性加锁步骤,图5为本申请实施例提供的另一种数据处理方式的步骤示意图,具体为二级索引扫描是优化后的一致性加锁步骤;
如图4至图5所示,分布式数据库通过全局事务管理节点(GTM)分配全局唯一事务号(GTID),通过管理活跃事务列表,保证数据的强一致性。具体包括以下步骤:
步骤1、计算节点开始一个分布式事务,向GTM申请一个新的GTID,假设其值为new_gtid。
步骤2、计算节点将用户下发的SQL语句拆解为分布式SQL语句:
当表t1的表结构为(id int primary key,a int,b int,c int,gtid int)时,将更新语句“update t1 set t1.a=10where t1.b=100;”拆解为:
① select id, gtid from t1 where t1.b = 100 for update;
② update t1 set gtid=new_gtid, t1.a=10 where id =id_val;
或者将删除语句“delete from t1 where t1.b=100;”拆解为:
① select id, gtid from t1 where t1.b = 100 for update;
② delete from t1 where id =id_val;
步骤3、计算节点先将语句①分发直单机DB节点,对数据加锁,获得主键的值id_val和该行记录最后一次更新的GTID的值gtid_val,通过活跃事务列表检查gtid_val,判断该行数据是否可见。
步骤4、对可见的数据,下发语句②到数据节点,完成修改。
步骤5、分布式事务提交,向GTM申请释放GTID,分布式写事务完成执行。
例如,场景一:
在步骤3中,事务A下发加锁读语句①,并且查询方式是通过聚合索引全表扫描t1表,数据中存在下面两行:
rec_1(id=1,a=1,b=99,c=1)
rec_2(id=2,a=1,b=100,c=2)
此时存在一个并发事务B,rec_1被修改为(id=1,a=2,b=99,c=1),且数据未提交。那么根据图4所示的聚集索引扫描时优化后的一致性加锁读流程,事务A不等待rec_1的行锁,读取其已提交的历史版本(id=1,a=1,b=99,c=1),优化器检测该行不符合条件时,继续读取下一行rec_2,这样有效避免了事务A和事务B之间的锁冲突。
例如,场景二:
对t1表的b字段创建索引idx_b。
更新语句“update t1 set t1.a=10where t1.b=100and t1.c=2;”拆解为:
① select id, gtid from t1 where t1.b = 100 and t1.c=2 for update;
② update t1 set gtid=new_gtid, t1.a=10 where id =id_val;
在步骤3中,事务A下发加锁读语句①,并且查询方式是通过二级索引idx_b扫描t1表,数据中存在下面两行:
rec_1(id=1,a=1,b=100,c=1)
rec_2(id=2,a=2,b=99,c=2)
rec_3(id=3,a=1,b=100,c=2)
此时存在一个并发事务B,rec_1被修改为(id=1,a=2,b=100,c=1),且数据未提交;存在另外一个并发事务C,rec_1被修改为(id=2,a=2,b=100,c=2),二级索引idx_b中新增一行b=100的记录,且数据未提交。
那么根据图5所示的二级索引扫描时优化后的一致性加锁读流程,事务A不等待rec_1的行锁,读取其已提交的历史版本(id=1,a=1,b=100,c=1),优化器检测该行不符合条件时,继续读取下一行rec_2。事务A也不等待rec_2的行锁,回表检测发现该行对应的二级索引不可见,继续读取下一行rec_3。
这样有效避免了事务A和事务B、C之间的锁冲突。
此外,本申请优化器根据代价判断使用哪种扫描方式,例如:
create table t1(id int primary key,a int,b int,key key_a(a));
表中主键为id,a列上有二级索引key_a。
当查询为select*from t1 where id=1;时,谓词只与主键有关,因此可以根据主键值1,直接扫描聚集索引查找记录。聚集索引根据主键组织所有数据。
当查询为select*from t1 where a=2;时,谓词只与二级索引有关。如果表中有1000行数据,而二级索引key_a的区分度较高,满足a=2的记录只有几行,那么使用二级索引扫描的代价就小于通过聚集索引扫描的代价,根据二级索引值2,直接扫描二级索引key_a查找二级记录,再根据二级索引记录中记录的主键值,扫描聚集索引,得到完整的行记录,完整的行记录中还包括字段b、回滚指针、记录锁信息等,这些内容不在二级索引记录中。
当查询为select*from t1 where id>1and a=2;时,谓词虽然与主键索引和二级索引都有关,但是如果表中的1000行数据都满足id>1,那么使用二级索引扫描的代价小于使用聚集索引扫描的代价。
因此,优化器根据表中的数据量和索引区分度计算代价,生成执行计划,确定扫描的索引和索引的扫描方式。
图6为本申请实施例提供的一种数据处理装置的结构示意图,如图6所示,具体包括:
第一获取模块601:用于响应于待执行的目标语句,从数据库中获取与所述目标语句对应的数据行,并将所述数据行添加至第一数据行列表;
加锁模块602:用于利用加锁引擎依次对所述第一数据行列表中的数据行进行加锁处理;
第二获取模块603:用于获取加锁处理后数据行的记录信息,所述记录信息包括所述数据行的更新信息以及所述数据行的数据信息;
判断模块604:用于根据所述数据行的数据信息,判断加锁处理后的数据行是否满足优化判断条件;
筛选模块605:用于在所述数据行满足优化判断条件的情况下,根据所述数据行的更新信息对加锁处理后的数据行进行筛选处理,得到目标数据行,并对所述目标数据行执行目标语句。
在一个可能的实施方式中,筛选模块605具体用于在所述数据行不满足优化器判断条件的情况下,利用所述加锁引擎释放加锁处理后的数据行,并利用加锁引擎对所述第一数据行列表中与所述数据行相邻的下一行数据行进行加锁处理。
在一个可能的实施方式中,所述第二获取模块603具体用于获取所述数据行的加锁处理结果,并将所述加锁处理结果添加至所述数据行的更新信息;在所述数据行的加锁处理结果为加锁成功的情况下,获取所述数据行的数据信息;在所述数据行的加锁处理结果为加锁失败的情况下,获取所述数据行的历史可见记录信息,并根据所述历史可见记录信息获取所述数据行的数据信息。
在一个可能的实施方式中,所述第二获取模块603还具体用于在所述数据行对应的数据表的索引为二级索引的情况下,获取所述数据行对应的二级索引的加锁处理结果,并将所述加锁处理结果添加至所述数据行的更新信息;在所述二级索引的加锁处理结果加锁成功的情况下,利用加锁引擎对所述数据行对应的主键索引进行加锁处理,获取加锁处理后所述数据行对应的主键索引的记录信息,根据所述记录信息得到所述数据行的数据信息;在所述二级索引的加锁处理结果加锁失败情况下,获取所述数据行的历史可见记录信息,并根据所述历史可见记录信息获取所述数据行的数据信息。
在一个可能的实施方式中,所述装置还包括回表模块606(图中未示出),所述回表模块606用于通过所述数据行对应的二级索引获取所述数据行对应的主键索引。
在一个可能的实施方式中,所述第二获取模块603还具体用于获取所述数据行对应的主键索引的加锁处理结果,将所述加锁处理结果添加至所述主键索引的更新信息;在所述数据行对应的主键索引为加锁处理结果为加锁成功的情况下,获取所述数据行的数据信息;在所述数据行对应的主键索引为加锁处理结果为加锁失败的情况下,获取所述数据行的历史可见记录信息,并根据所述历史可见记录信息获取所述数据行的数据信息。
在一个可能的实施方式中,所述筛选模块605具体用于根据所述数据行的更新信息得到所述数据行的加锁处理结果;判断所述数据行的加锁处理结果是否为加锁成功,若是,将所述数据行作为目标数据行,否则,利用加锁引擎重新对所述数据行进行加锁处理。
本实施例提供的数据处理装置可以是如图6中所示的数据处理装置,可执行如图1-5中数据处理方法的所有步骤,进而实现图1-5所示数据处理的技术效果,具体请参照图1-5相关描述,为简洁描述,在此不作赘述。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
图7为本申请实施例提供的一种电子设备的结构示意图,如图7所示,本申请实施例提供了一种电子设备,包括处理器701、通信接口702、存储器703和通信总线704,其中,处理器701,通信接口702,存储器703通过通信总线704完成相互间的通信;存储器703,用于存放计算机程序;处理器701,用于执行存储器703上所存放的程序时,实现前述任意一个方法实施例提供的数据处理方法的步骤:
响应于待执行的目标语句,从数据库中获取与所述目标语句对应的数据行,并将所述数据行添加至第一数据行列表;
利用加锁引擎依次对所述第一数据行列表中的数据行进行加锁处理;
获取加锁处理后数据行的记录信息,所述记录信息包括所述数据行的更新信息以及所述数据行的数据信息;
根据所述数据行的数据信息,判断加锁处理后的数据行是否满足优化判断条件;
在所述数据行满足优化判断条件的情况下,根据所述数据行的更新信息对加锁处理后的数据行进行筛选处理,得到目标数据行,并对所述目标数据行执行目标语句。
在一个可能的实施方式中,所述方法还包括:
在所述数据行不满足优化器判断条件的情况下,利用所述加锁引擎释放加锁处理后的数据行,并利用加锁引擎对所述第一数据行列表中与所述数据行相邻的下一行数据行进行加锁处理。
在一个可能的实施方式中,所述获取加锁处理后数据行的记录信息,包括:
获取所述数据行的加锁处理结果,并将所述加锁处理结果添加至所述数据行的更新信息;
在所述数据行的加锁处理结果为加锁成功的情况下,获取所述数据行的数据信息;
在所述数据行的加锁处理结果为加锁失败的情况下,获取所述数据行的历史可见记录信息,并根据所述历史可见记录信息获取所述数据行的数据信息。
在一个可能的实施方式中,所述获取加锁处理后数据行的记录信息,还包括:
在所述数据行对应的数据表的索引为二级索引的情况下,获取所述数据行对应的二级索引的加锁处理结果,并将所述加锁处理结果添加至所述数据行的更新信息;
在所述二级索引的加锁处理结果加锁成功的情况下,利用加锁引擎对所述数据行对应的主键索引进行加锁处理,获取加锁处理后所述数据行对应的主键索引的记录信息,根据所述记录信息得到所述数据行的数据信息;
在所述二级索引的加锁处理结果加锁失败情况下,获取所述数据行的历史可见记录信息,并根据所述历史可见记录信息获取所述数据行的数据信息。
在一个可能的实施方式中,所述利用加锁引擎对所述数据行对应的主键索引进行加锁处理之前,所述方法还包括:
通过所述数据行对应的二级索引获取所述数据行对应的主键索引。
在一个可能的实施方式中,所述获取加锁处理后所述数据行对应的主键索引的记录信息,包括:
获取所述数据行对应的主键索引的加锁处理结果,将所述加锁处理结果添加至所述主键索引的更新信息;
在所述数据行对应的主键索引为加锁处理结果为加锁成功的情况下,获取所述数据行的数据信息;
在所述数据行对应的主键索引为加锁处理结果为加锁失败的情况下,获取所述数据行的历史可见记录信息,并根据所述历史可见记录信息获取所述数据行的数据信息。
在一个可能的实施方式中,所述根据所述数据行的更新信息对加锁处理后的数据行进行筛选处理,得到目标数据行,包括:
根据所述数据行的更新信息得到所述数据行的加锁处理结果;
判断所述数据行的加锁处理结果是否为加锁成功,若是,将所述数据行作为目标数据行,否则,利用加锁引擎重新对所述数据行进行加锁处理。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对相关技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
应理解的是,文中使用的术语仅出于描述特定示例实施方式的目的,而无意于进行限制。除非上下文另外明确地指出,否则如文中使用的单数形式“一”、“一个”以及“所述”也可以表示包括复数形式。术语“包括”、“包含”、“含有”以及“具有”是包含性的,并且因此指明所陈述的特征、步骤、操作、元件和/或部件的存在,但并不排除存在或者添加一个或多个其它特征、步骤、操作、元件、部件、和/或它们的组合。文中描述的方法步骤、过程、以及操作不解释为必须要求它们以所描述或说明的特定顺序执行,除非明确指出执行顺序。还应当理解,可以使用另外或者替代的步骤。
以上所述仅是本发明的具体实施方式,使本领域技术人员能够理解或实现本发明。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所申请的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种数据处理方法,其特征在于,包括:
响应于待执行的目标语句,从数据库中获取与所述目标语句对应的数据行,并将所述数据行添加至第一数据行列表;
利用加锁引擎依次对所述第一数据行列表中的数据行进行加锁处理;
获取加锁处理后数据行的记录信息,所述记录信息包括所述数据行的更新信息以及所述数据行的数据信息;
根据所述数据行的数据信息,判断加锁处理后的数据行是否满足优化判断条件;
在所述数据行满足优化判断条件的情况下,根据所述数据行的更新信息对加锁处理后的数据行进行筛选处理,得到目标数据行,并对所述目标数据行执行目标语句。
2.根据权利要求1所述的方法,其特征在于,还包括:
在所述数据行不满足优化器判断条件的情况下,利用所述加锁引擎释放加锁处理后的数据行,并利用加锁引擎对所述第一数据行列表中与所述数据行相邻的下一行数据行进行加锁处理。
3.根据权利要求1所述的方法,其特征在于,所述获取加锁处理后数据行的记录信息,包括:
获取所述数据行的加锁处理结果,并将所述加锁处理结果添加至所述数据行的更新信息;
在所述数据行的加锁处理结果为加锁成功的情况下,获取所述数据行的数据信息;
在所述数据行的加锁处理结果为加锁失败的情况下,获取所述数据行的历史可见记录信息,并根据所述历史可见记录信息获取所述数据行的数据信息。
4.根据权利要求3所述的方法,其特征在于,所述获取加锁处理后数据行的记录信息,还包括:
在所述数据行对应的数据表的索引为二级索引的情况下,获取所述数据行对应的二级索引的加锁处理结果,并将所述加锁处理结果添加至所述数据行的更新信息;
在所述二级索引的加锁处理结果加锁成功的情况下,利用加锁引擎对所述数据行对应的主键索引进行加锁处理,获取加锁处理后所述数据行对应的主键索引的记录信息,根据所述记录信息得到所述数据行的数据信息;
在所述二级索引的加锁处理结果加锁失败情况下,获取所述数据行的历史可见记录信息,并根据所述历史可见记录信息获取所述数据行的数据信息。
5.根据权利要求4所述的方法,其特征在于,所述利用加锁引擎对所述数据行对应的主键索引进行加锁处理之前,所述方法还包括:
通过所述数据行对应的二级索引获取所述数据行对应的主键索引。
6.根据权利要求4所述的方法,其特征在于,所述获取加锁处理后所述数据行对应的主键索引的记录信息,包括:
获取所述数据行对应的主键索引的加锁处理结果,将所述加锁处理结果添加至所述主键索引的更新信息;
在所述数据行对应的主键索引为加锁处理结果为加锁成功的情况下,获取所述数据行的数据信息;
在所述数据行对应的主键索引为加锁处理结果为加锁失败的情况下,获取所述数据行的历史可见记录信息,并根据所述历史可见记录信息获取所述数据行的数据信息。
7.根据权利要求1所述的方法,其特征在于,所述根据所述数据行的更新信息对加锁处理后的数据行进行筛选处理,得到目标数据行,包括:
根据所述数据行的更新信息得到所述数据行的加锁处理结果;
判断所述数据行的加锁处理结果是否为加锁成功,若是,将所述数据行作为目标数据行,否则,利用加锁引擎重新对所述数据行进行加锁处理。
8.一种数据处理装置,其特征在于,包括:
第一获取模块:用于响应于待执行的目标语句,从数据库中获取与所述目标语句对应的数据行,并将所述数据行添加至第一数据行列表;
加锁模块:用于利用加锁引擎依次对所述第一数据行列表中的数据行进行加锁处理;
第二获取模块:用于获取加锁处理后数据行的记录信息,所述记录信息包括所述数据行的更新信息以及所述数据行的数据信息;
判断模块:用于根据所述数据行的数据信息,判断加锁处理后的数据行是否满足优化判断条件;
筛选模块:用于在所述数据行满足优化判断条件的情况下,根据所述数据行的更新信息对加锁处理后的数据行进行筛选处理,得到目标数据行,并对所述目标数据行执行目标语句。
9.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1~7中任一项所述的数据处理方法的步骤。
10.一种存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1~7中任一项所述的数据处理方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311808967.8A CN117687807A (zh) | 2023-12-26 | 2023-12-26 | 数据处理方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311808967.8A CN117687807A (zh) | 2023-12-26 | 2023-12-26 | 数据处理方法、装置、电子设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117687807A true CN117687807A (zh) | 2024-03-12 |
Family
ID=90138878
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311808967.8A Pending CN117687807A (zh) | 2023-12-26 | 2023-12-26 | 数据处理方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117687807A (zh) |
-
2023
- 2023-12-26 CN CN202311808967.8A patent/CN117687807A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6772155B1 (en) | Looking data in a database system | |
EP0336035B1 (en) | Tree structure database system | |
US7240054B2 (en) | Techniques to preserve data constraints and referential integrity in asynchronous transactional replication of relational tables | |
US5317731A (en) | Intelligent page store for concurrent and consistent access to a database by a transaction processor and a query processor | |
US10474645B2 (en) | Automatically retrying transactions with split procedure execution | |
CN101089857B (zh) | 一种内存数据库事务管理方法及系统 | |
US7480653B2 (en) | System and method for selective partition locking | |
US5758356A (en) | High concurrency and recoverable B-tree index management method and system | |
US6606626B1 (en) | Database system with lock manager enhancement for improving concurrency | |
US6792432B1 (en) | Database system with methods providing high-concurrency access in B-Tree structures | |
US9922086B1 (en) | Consistent query of local indexes | |
JP4603546B2 (ja) | 効率的なバージョン制御を有するデータベース管理システム | |
US9576038B1 (en) | Consistent query of local indexes | |
US7174331B1 (en) | Locking mechanism for views associated with B-tree indexes | |
CN111143389A (zh) | 事务执行方法、装置、计算机设备及存储介质 | |
US11176123B2 (en) | Offloading constraint enforcement in a hybrid DBMS | |
WO2011009274A1 (zh) | 并发控制方法及装置 | |
CA2425033A1 (en) | Multi-level locking hierarchy in a database with multi-dimensional clustering | |
CN106354732A (zh) | 一种支持并发协同的离线数据版本冲突解决方法 | |
CN111949673B (zh) | 基于Hbase存储的分布式悲观锁及其实现方法 | |
JP4126843B2 (ja) | データ管理方法および装置並びにデータ管理プログラムを格納した記録媒体 | |
US7051051B1 (en) | Recovering from failed operations in a database system | |
WO2023124242A1 (zh) | 事务执行方法、装置、设备和存储介质 | |
CN117687807A (zh) | 数据处理方法、装置、电子设备及存储介质 | |
TWI805544B (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 |