CN116719832B - 数据库并发控制方法和装置、电子设备和存储介质 - Google Patents
数据库并发控制方法和装置、电子设备和存储介质 Download PDFInfo
- Publication number
- CN116719832B CN116719832B CN202310985689.7A CN202310985689A CN116719832B CN 116719832 B CN116719832 B CN 116719832B CN 202310985689 A CN202310985689 A CN 202310985689A CN 116719832 B CN116719832 B CN 116719832B
- Authority
- CN
- China
- Prior art keywords
- node
- leaf node
- version number
- write
- lock
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 68
- 230000004048 modification Effects 0.000 claims abstract description 15
- 238000012986 modification Methods 0.000 claims abstract description 15
- 238000004891 communication Methods 0.000 claims description 19
- 230000004044 response Effects 0.000 claims description 15
- 230000009191 jumping Effects 0.000 claims description 14
- 238000004590 computer program Methods 0.000 claims description 9
- 238000005516 engineering process Methods 0.000 abstract description 5
- 238000012795 verification Methods 0.000 description 11
- 238000010586 diagram Methods 0.000 description 7
- 238000012545 processing Methods 0.000 description 7
- 230000008569 process Effects 0.000 description 5
- 230000008878 coupling Effects 0.000 description 4
- 238000010168 coupling process Methods 0.000 description 4
- 238000005859 coupling reaction Methods 0.000 description 4
- 230000007246 mechanism Effects 0.000 description 3
- 238000013500 data storage Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 230000006978 adaptation Effects 0.000 description 1
- 230000000903 blocking effect Effects 0.000 description 1
- 230000015556 catabolic process Effects 0.000 description 1
- 238000006731 degradation reaction Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2308—Concurrency control
- G06F16/2315—Optimistic concurrency control
- G06F16/2329—Optimistic concurrency control using versioning
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2246—Trees, e.g. B+trees
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2365—Ensuring data consistency and integrity
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2458—Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
- G06F16/2474—Sequence data queries, e.g. querying versioned data
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- Computer Security & Cryptography (AREA)
- Fuzzy Systems (AREA)
- Mathematical Physics (AREA)
- Probability & Statistics with Applications (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供了一种数据库并发控制方法和装置、电子设备和存储介质,通过获取对数据库中的目标叶节点进行读操作的读请求;响应于读请求,判断目标叶节点的先辈节点是否持有写锁;在确定目标叶节点的先辈节点均不持有写锁的情况下,获取目标叶节点的当前版本号,并对目标叶节点进行访问,并保存对目标叶节点的查询结果;获取目标叶节点的最新版本号,在确定最新版本号与当前版本号一致的情况下,返回查询结果。通过本申请,解决了相关技术中存在的加锁和释放锁会操作共享内存,多核处理器中每个核对共享内存的操作,会造成其它核上的缓存失效;以及索引树结构上的根节点逻辑修改频率很低,但每次遍历树结构时必须对根节点加锁的问题。
Description
技术领域
本申请涉及数据库技术领域,尤其涉及一种数据库并发控制方法和装置、电子设备和存储介质。
背景技术
并发控制是数据库的核心问题之一,在多用户的环境下,为了保证数据库的完整性和一致性,数据库引入了锁(lock)机制。锁用于管理对共享资源的并发访问,防止访问相同资源的事务之间的破坏性。数据库中使用了两类锁进行并发控制,读锁(共享锁)和写锁(排它锁)。针对同一块数据,读锁允许多个读操作可以同时进行而不会互相影响,阻塞写操作的并发,而写锁会阻塞其他的读和写操作,直到当前写操作完成。
加锁和解锁实质是对内存中的索引结构加锁和解锁。大多数据库最常使用B-Tree(Balanced Tree,B树)或其变体作为索引结构,如Mysql、Postgresql和Oracle等。B-Tree一共有两类节点,一类是分支节点(根节点也可被称为分支节点),一类是叶节点,对于内存中的每一个节点,都有一个rw lock(read_write lock,读写锁)与之相对应,用于保护节点内部结构的一致性,阻塞并发修改。
主流的加锁机制有2PL(2-Phrase Locking,二阶段锁)和Latch coupling(锁耦合)。2PL加锁只在阶段一加锁,只在阶段二解锁,该方案认为树节点是最小的加锁单位,每次需从根节点开始向下搜索树,持有搜索路径上从根节点到叶节点的所有的锁,直到事务提交。Latch coupling先对根节点加锁,之后对下层节点加锁之前必须持有父节点的锁,在保证顺序性的前提下,允许提前释放部分锁。
随着多核处理器的发展和数据并发的不断提升,目前主流的数据库的加锁机制存在如下问题:
1.加锁和释放锁会操作共享内存,多核处理器中每个核对共享内存的操作,会造成其它核上的缓存失效;
2.索引树结构上的根节点逻辑修改频率很低,但每次遍历树结构时必须对根节点加锁;
3.大部分更新(除拆分和合并索引节点)操作,仅仅修改一个索引节点。
发明内容
本申请提供了一种数据库并发控制方法和装置、电子设备和存储介质,以至少解决相关技术中存在的至少一个技术问题。
根据本申请实施例的一个方面,提供了一种数据库并发控制方法,包括:
获取对数据库中的目标叶节点进行读操作的读请求;
响应于所述读请求,判断所述目标叶节点的先辈节点是否持有写锁;
在确定所述目标叶节点的先辈节点均不持有写锁的情况下,获取所述目标叶节点的当前版本号,并对所述目标叶节点进行访问,并保存对所述目标叶节点的查询结果,其中,所述查询结果为所述读请求对所述目标叶节点进行查询得到的结果;
获取所述目标叶节点的最新版本号,在确定所述最新版本号与所述当前版本号一致的情况下,返回所述查询结果。
可选地,如前述的方法,所述响应于所述读请求,判断所述目标叶节点的先辈节点是否持有写锁,包括:
响应于所述读请求,判断所述数据库的根节点是否有持有写锁;
在所述根节点持有写锁的情况下,执行用于跳转至步骤所述判断所述数据库的根节点是否有持有写锁的重试跳转操作;
在所述根节点未持有写锁的情况下,循环执行以下循环步骤,直至访问到所述目标叶节点为止:判断位于第一当前节点下一层的第一下层节点是否持有写锁,其中,所述第一当前节点为所述目标叶节点的先辈节点;在确定所述第一下层节点未持有写锁的情况下,读取所述第一下层节点的当前版本号,并对所述第一下层节点进行访问;在对所述第一下层节点的访问结束后,验证所述第一下层节点的最新版本号是否为当前版本号和/或验证所述第一下层节点是否持有写锁;在所述第一下层节点的最新版本号为当前版本号,且所述第一下层节点未持有写锁的情况下,判断位于所述第一下层节点是否为所述目标叶节点;在所述第一下层节点的最新版本号不是当前版本号和/或所述第一下层节点持有写锁的情况下,执行所述重试跳转操作;在所述第一下层节点为目标叶节点的情况下,退出所述循环步骤;在所述第一下层节点不为所述目标叶节点的情况下,将所述第一下层节点作为最新的第一当前节点,并执行用于跳转至步骤所述判断位于第一当前节点下一层的第一下层节点是否持有写锁的跳转操作。
可选地,如前述的方法,所述执行所述重试跳转操作,包括:
确定历史重试次数,其中,所述历史重试次数用于指示已执行的所述重试跳转操作次数;
对所述历史重试次数加1得到重试次数;
在所述重试次数未达到预设限定值的情况下,执行所述重试跳转操作。
可选地,如前述的方法,包括:
获取对数据库中的指定叶节点进行写操作的写请求;
在响应于所述写请求,访问到所述指定叶节点的情况下,对所述指定叶节点加写锁,并对所述指定叶节点进行修改;
在对所述指定叶节点的修改完成后,对所述指定叶节点的当前版本号进行递增更新,得到更新后版本号,并释放所述指定叶节点的写锁。
可选地,如前述的方法,所述响应于所述写请求,访问到所述指定叶节点,包括:
响应于所述写请求,判断所述数据库的根节点是否有持有写锁;
在所述根节点持有写锁的情况下,将所述根节点加入等待队列,等待其他线程释放所述根节点的写锁;
在所述根节点未持有写锁的情况下,循环执行以下循环步骤,直至访问到所述指定叶节点为止:判断位于第二当前节点下一层的第二下层节点是否持有写锁,其中,所述第二当前节点为所述指定叶节点的先辈节点;在确定所述第二下层节点未持有写锁的情况下,对所述第二下层节点加读锁,释放第二当前节点的读锁,并对所述第二下层节点进行访问;在对所述第二下层节点的访问结束后,判断所述第二下层节点是否为所述指定叶节点;在所述第二下层节点为所述指定叶节点的情况下,退出所述循环步骤;在所述第二下层节点不为所述指定叶节点的情况下,将所述第二下层节点作为最新的第二当前节点,并执行用于跳转至步骤所述判断位于第二当前节点下一层的第二下层节点是否持有写锁的跳转操作。
可选地,如前述的方法,所述在确定所述第二下层节点未持有写锁的情况下,对所述第二下层节点加读锁,释放第二当前节点的读锁,并对所述第二下层节点进行访问,包括:
在确定所述第二下层节点未持有写锁的情况下,获取所述第二下层节点的读锁,释放第二当前节点的读锁;
将所述第二下层节点加入搜索路径的链表中,释放所述第二当前节点的读锁。
可选地,如前述的方法,在所述读取所述第一下层节点的当前版本号之后,所述方法还包括:
将所述第一下层节点的当前版本号存储于用于执行所述前任一项所述方法的写线程的本地内存中。
根据本申请实施例的另一个方面,还提供了一种数据库并发控制装置,包括:
获取模块,用于获取对数据库中的目标叶节点进行读操作的读请求;
判断模块,用于响应于所述读请求,判断所述目标叶节点的先辈节点是否持有写锁;
保存模块,用于在确定所述目标叶节点的先辈节点均不持有写锁的情况下,获取所述目标叶节点的当前版本号,并对所述目标叶节点进行访问,并保存对所述目标叶节点的查询结果,其中,所述查询结果为所述读请求对所述目标叶节点进行查询得到的结果;
返回模块,用于获取所述目标叶节点的最新版本号,在确定所述最新版本号与所述当前版本号一致的情况下,返回所述查询结果。
根据本申请实施例的又一个方面,还提供了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,处理器、通信接口和存储器通过通信总线完成相互间的通信;其中,存储器,用于存储计算机程序;处理器,用于通过运行所述存储器上所存储的所述计算机程序来执行上述任一实施例中的方法步骤。
根据本申请实施例的又一个方面,还提供了一种计算机可读的存储介质,该存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一实施例中的方法步骤。
在本申请实施例提供的一种数据库并发控制方法和装置、电子设备和存储介质,通过获取对数据库中的目标叶节点进行读操作的读请求;响应于所述读请求,判断所述目标叶节点的先辈节点是否持有写锁;在确定所述目标叶节点的先辈节点均不持有写锁的情况下,获取所述目标叶节点的当前版本号,并对所述目标叶节点进行访问,并保存对所述目标叶节点的查询结果,其中,所述查询结果为所述读请求对所述目标叶节点进行查询得到的结果;获取所述目标叶节点的最新版本号,在确定所述最新版本号与所述当前版本号一致的情况下,返回所述查询结果。通过本申请,对于那些很少被修改的节点(如根节点),乐观地假设其不会被修改,仅仅在访问节点结束之后通过读相关的版本号,确认目标叶节点是否被修改。利用对内存的读操作,代替写操作,减少对共享内存的写入次数。虽然会进行多次重试,但避免了在多核下造成其他核中缓存的内容失效,也减少了多个线程对同一块内存展开写操作,避免操作被序列化的开销,其开销仍小于修改共享内存造成的开销,有效地提升并发效率;进而解决了相关技术中存在的加锁和释放锁会操作共享内存,多核处理器中每个核对共享内存的操作,会造成其它核上的缓存失效;以及索引树结构上的根节点逻辑修改频率很低,但每次遍历树结构时必须对根节点加锁的问题。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是根据本申请实施例的一种可选的数据库并发控制方法的流程示意图;
图2是根据本申请应用例的一种可选的数据库并发控制方法中的读线程处理流程示意图;
图3是根据本申请应用例的一种可选的数据库并发控制方法中的写线程处理流程示意图;
图4是根据本申请应用例的一种可选的数据库并发控制方法中的乐观锁结构示意图;
图5是根据本申请实施例的一种可选的数据库并发控制装置的结构框图;
图6是根据本申请实施例的一种可选的电子设备的结构框图。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
根据本申请实施例的一个方面,提供了一种数据库并发控制方法。可选地,在本实施例中,上述数据库并发控制方法可以应用于由终端和服务器所构成的硬件环境中。服务器通过网络与终端进行连接,可用于为终端或终端上安装的客户端提供服务(如数据存储服务、应用服务等),可在服务器上或独立于服务器设置数据库,用于为服务器提供数据存储服务。
上述网络可以包括但不限于以下至少之一:有线网络,无线网络。上述有线网络可以包括但不限于以下至少之一:广域网,城域网,局域网,上述无线网络可以包括但不限于以下至少之一:WIFI(Wireless Fidelity,无线保真),蓝牙。终端可以并不限定于为PC、手机、平板电脑等。
本申请实施例的数据库并发控制方法可以由服务器来执行,也可以由终端来执行,还可以是由服务器和终端共同执行。其中,终端执行本申请实施例的数据库并发控制方法也可以是由安装在其上的客户端来执行。
以由服务器来执行本实施例中的数据库并发控制方法为例,图1为本申请实施例提供的一种数据库并发控制方法,包括如下所述步骤:
步骤S101,获取对数据库中的目标叶节点进行读操作的读请求;
本实施例中的数据库并发控制方法可以应用于需要对数据库进行并发处理的场景,例如:对数据库进行并发读的场景、对数据库并发写的场景、对数据库并发读写的场景等。
在本实施例中,用户可以通过对该数据读进行读操作的接口,对数据库中的目标叶节点发送读请求。
步骤S102,响应于读请求,判断目标叶节点的先辈节点是否持有写锁。
在获取读请求之后,为了访问到目标叶节点,需确定目标叶节点的先辈节点是否持有写锁,当目标叶节点的先辈节点持有写锁时,则无法访问到该目标叶节点。
在本实施例中,目标叶节点的先辈节点可以包括但不限于,位于目标叶节点上一层的父节点,以及父节点的父节点等等,还可以包括根节点。
可以通过读线程判断目标叶节点的先辈节点是否持有写锁。
步骤S103,在确定目标叶节点的先辈节点均不持有写锁的情况下,获取目标叶节点的当前版本号,并对目标叶节点进行访问,并保存对目标叶节点的查询结果,其中,查询结果为读请求对目标叶节点进行查询得到的结果。
可选的,读线程在确定目标叶节点的先辈节点均不持有写锁的情况下,则可以访问到目标叶节点,并确定出目标叶节点的当前版本号。
当前版本号可以是用于指示目标叶节点中当前内容的版本,例如,当目标叶节点中的内容每被更新(例如,编辑、增加、删除)一次,目标叶节点的版本号都会进行更新。
当前版本号则为对目标叶节点进行访问时,与目标叶节点当前内容对应的版本号。
读线程在对目标叶节点进行访问之后,则可响应于读请求,在目标叶节点中进行内容的查询,以得到对目标叶节点的查询结果。
读线程在获取查询结果之后,可以先将查询结果进行保存,以便于判断是否需要对该查询结果进行进一步处理。
步骤S104,获取目标叶节点的最新版本号,在确定最新版本号与当前版本号一致的情况下,返回查询结果。
由于本实施例中,读线程只对目标叶节点进行了读操作,并未进行写,因此,其他用户可以对该目标特节点进行写操作,进而可能会导致目标叶节点中的内容更改。
读线程在获取目标叶节点的查询结果之后,为了判断目标叶节点中的内容是否发生了更改,可以获取目标叶节点的最新版本号。
最新版本号即为在获取目标叶节点的查询结果后,目标叶节点中的实时内容所对应的版本号。
读线程在获取目标叶节点的最新版本号之后,可以将该最新版本号与当前版本号进行比对,当确定最新版本号与当前版本号一致的情况下,说明查询得到该查询结果时,目标叶节点的内容也未发生更改,因此该查询结果是基于目标叶节点中的最新的内容查询得到的,因此,可以返回该查询结果。
通过本实施例中的方法,通过引入版本号,并且通过比对版本号判断查询结果的有效性,对于那些很少被修改的节点(如根节点),乐观地假设其不会被修改,仅仅在访问节点结束之后通过读相关的版本号,确认目标叶节点是否被修改。利用对内存的读操作,代替写操作,减少对共享内存的写入次数。虽然会进行多次重试,但避免了在多核下造成其他核中缓存的内容失效,也减少了多个线程对同一块内存展开写操作,避免操作被序列化的开销,其开销仍小于修改共享内存造成的开销,有效地提升并发效率;进而解决了相关技术中存在的加锁和释放锁会操作共享内存,多核处理器中每个核对共享内存的操作,会造成其它核上的缓存失效;以及索引树结构上的根节点逻辑修改频率很低,但每次遍历树结构时必须对根节点加锁的问题。
作为一种可选的实施例,如前述的方法,所述步骤S102响应于读请求,判断目标叶节点的先辈节点是否持有写锁,包括如下所述步骤:
步骤S201,响应于读请求,判断数据库的根节点是否有持有写锁;
步骤S202,在根节点持有写锁的情况下,执行用于跳转至步骤判断数据库的根节点是否有持有写锁的重试跳转操作;
在根节点未持有写锁的情况下,循环执行以下循环步骤,直至访问到目标叶节点为止:
步骤S203,判断位于第一当前节点下一层的第一下层节点是否持有写锁,其中,第一当前节点为目标叶节点的任一个先辈节点;
步骤S204,在确定第一下层节点未持有写锁的情况下,读取第一下层节点的当前版本号,并对第一下层节点进行访问;
作为一种可选的实施例,如前述的方法,在所述步骤S204读取第一下层节点的当前版本号之后,方法还包括如下所述步骤:
将第一下层节点的当前版本号存储于用于执行前任一项方法的写线程的本地内存中。
步骤S205,在对第一下层节点的访问结束后,验证第一下层节点的最新版本号是否为当前版本号和/或验证第一下层节点是否持有写锁;
步骤S206,在第一下层节点的最新版本号为当前版本号,且第一下层节点未持有写锁的情况下,判断位于第一下层节点是否为目标叶节点;
步骤S207,在第一下层节点的最新版本号不是当前版本号和/或第一下层节点持有写锁的情况下,执行重试跳转操作;
步骤S208,在第一下层节点为目标叶节点的情况下,退出循环步骤;
步骤S209,在第一下层节点不为目标叶节点的情况下,将第一下层节点作为最新的第一当前节点,并执行用于跳转至步骤判断位于第一当前节点下一层的第一下层节点是否持有写锁的跳转操作。
可选地,可以通过开启乐观读线程的方式实现上述流程:
1.乐观读线程从根节点开始向下遍历索引树,首先判断根节点是否有写锁,若根节点持有写锁则重试(即,重新跳转至步骤S201),确保不会读一个正在修改中的页面。根节点没有持有写锁或重试成功,还可以获取根节点的当前的版本号,保存到线程的本地内存中,并将该根节点加入搜索路径的链表中。
2.在访问第一当前节点时,获取位于第一当前节点的下一层的第一下层节点的地址以及第一下层节点的当前版本号。按照第一下层节点的地址对第一下层节点进行访问,在访问结束后,然后验证第一下层节点的最新版本号是否与第一下层节点的当前版本号一致以及第一下层节点是否持有写锁,验证失败(即,第一下层节点的最新版本号不是当前版本号和/或第一下层节点持有写锁)则重新开启操作1(即,执行重试跳转操作以跳转至步骤S201),验证成功则将第一下层节点作为最新的第一当前节点,并执行用于跳转至步骤判断位于第一当前节点下一层的第一下层节点是否持有写锁的跳转操作。
3.一直重复操作2,直至访问到的第一下层节点为到目标叶节点为止。
4.访问目标叶节点,保存查询结果,然后通过验证目标叶节点的最新版本号和当前版本号,验证失败则重新开启操作1,验证成功则返回查询结果。
通过本实施例中的方法,提供了一种在进行读操作时,通过验证版本号,确认目标叶节点是否被修改,从而可以利用对内存的读操作,代替写操作,减少对共享内存的写入次数。
作为一种可选的实施例,如前述的方法,执行重试跳转操作,包括如下所属步骤:
步骤S301,确定历史重试次数,其中,历史重试次数用于指示已执行的重试跳转操作次数。
在每执行一次重试跳转操作,即可得到对应的历史重试次数。例如,当重试跳转操作已执行3次的情况下,则历史重试次数为3次。
步骤S302,对历史重试次数加1得到重试次数。
在确定出历史重试次数之后,可以通过对该历史重试次数进行加1处理,得到用于指示因为版本号验证为通过或节点持有写锁导致待重试的重试次数。
步骤S303,在重试次数未达到预设限定值的情况下,执行重试跳转操作。
重试次数未达到预设限定值,例如,预设限定值为5次时,即为重试次数未达到5次时,仍可执行重试跳转操作,跳转至步骤S201。
在重试次数已达到预设限定值时,则退化为悲观读,悲观读与原生读操作完全一致。
可选地,原生读流程可以是:
1.首先判断根节点是否有写锁,若根节点持有写锁则重试,确保不会读一个正在修改中的页面。根节点没有持有写锁或重试成功,对根节点加读锁。
2.访问当前节点,获取下层节点的地址,释放当前节点的读锁并尝试对下层节点加读锁,若加锁失败则加入等待队列,等待其他线程释放锁后,重新竞争加锁。
3.一直重复操作2,直至访问到的第一下层节点为到目标叶节点为止。
4.访问目标叶节点,保存查询结果,最后释放读锁。
并通过悲观读,得到目标叶节点的目标返回结果。
通过本实施例中的方法,可以在前述实施例中方法实现的乐观读的方式未能在预设限定值对应的重试次数内读取得到目标叶节点的目标返回结果的情况下,判断该目标叶节点被写操作的概率较高,进而停止继续采用乐观读的方式对目标叶节点进行读操作。
作为一种可选的实施例,如前述的方法,包括如下所述步骤:
步骤S401,获取对数据库中的指定叶节点进行写操作的写请求;
步骤S402,在响应于写请求,访问到指定叶节点的情况下,对指定叶节点加写锁,并对指定叶节点进行修改;
步骤S403,在对指定叶节点的修改完成后,对指定叶节点的当前版本号进行递增更新,得到更新后版本号,并释放指定叶节点的写锁。
在本实施例中,用户可以通过对该数据读进行写操作的接口,对数据库中的指定叶节点发送写请求。指定叶节点可以是数据库中的任一个叶节点,还可以是目标叶节点。
写线程可以响应于该写请求,对指定叶节点尝试进行访问,并在获取写请求之后,并且可以访问到指定叶节点的情况下,则可以通过对指定叶节点加写锁,以使指定叶节点只能被执行该写请求的写线程进行修改,其他写线程无法对该指定叶节点进行写操作和/或其他读线程无法对该指定叶节点进行读操作。
同时,在访问到该指定叶节点之后,还可以确定出指定叶节点的当前版本号。
当写线程对该指定叶节点的修改完成后,可以对该指定叶节点的当前版本号进行更新,得到更新后版本号,也即,该更新后版本号对应于指定叶节点被修改后的内容。同时释放指定叶节点的写锁,以使其他写线程可以对该指定叶节点进行写操作和/或其他读线程可以对该指定叶节点进行读操作。
通过本实施例中的方法,可以在每对指定叶节点进行一次写操作之后,即对该指定叶节点的版本号进行修改,进而可以使版本号与写操作后修改得到的节点内的内容一一对应,从而便于判断对该指定叶节点进行读操作时得到的结果是否是最新的。
作为一种可选的实施例,如前述的方法,所述步骤S402响应于写请求,访问到指定叶节点,包括如下所述步骤:
步骤S501,响应于写请求,判断数据库的根节点是否有持有写锁;
步骤S502,在根节点持有写锁的情况下,将所述根节点加入等待队列,等待其他线程释放所述根节点的写锁;
在根节点未持有写锁的情况下,将所述根节点加入等待队列,对该根节点进行监控,例如通过定时问询等方式等待其他线程释放所述根节点的写锁:
步骤S503,判断位于第二当前节点下一层的第二下层节点是否持有写锁,其中,第二当前节点为指定叶节点的任一个先辈节点;
步骤S504,在确定第二下层节点未持有写锁的情况下,对第二下层节点加读锁,并对第二下层节点进行访问;
作为一种可选的实施例,如前述的方法,所述步骤S504在确定第二下层节点未持有写锁的情况下,对第二下层节点加读锁,释放第二当前节点的读锁,并对第二下层节点进行访问,包括如下所述步骤:
在确定第二下层节点未持有写锁的情况下,获取第二下层节点的读锁,释放第二当前节点的读锁;将第二下层节点加入搜索路径的链表中,释放第二当前节点的读锁。
步骤S505,在对第二下层节点的访问结束后,判断第二下层节点是否为指定叶节点;
步骤S506,在第二下层节点为指定叶节点的情况下,退出循环步骤;
步骤S507,在第二下层节点不为指定叶节点的情况下,将第二下层节点作为最新的第二当前节点,并执行用于跳转至步骤判断位于第二当前节点下一层的第二下层节点是否持有写锁的跳转操作。
例如,通过写线程执行上述步骤:
1.写线程从根节点开始向下遍历索引树,首先判断根节点是否持有写锁,若根节点持有写锁则加入等待队列,等待其他线程释放根节点的写锁。若没有写锁或竞争加读锁成功后,将根节点加入搜索路径的链表中。
2.在访问第二当前节点时,获取位于第二当前节点下一层的第二下层节点的地址。然后尝试获取第二下层节点的读锁,失败则加入等待队列,等待其他线程释放该第二下层节点的写锁。成功获取读锁后,将第二下层节点加入搜索路径的链表中,并释放当前节点的读锁。
3.一直重复操作2,直至访问到指定叶节点。
4.释放叶节点的读锁,尝试对叶节点加写锁,失败则加入等待队列,等待其他线程释放该叶节点的写锁。成功获取写锁后,更新叶节点,递增叶节点的全局版本号,最后释放叶节点的写锁。
通过本实施例中的方法,提供了一种能够实现对叶节点进行写操作的新的实现方式。
如下所述,提供一种应用前述任一实施例的应用例:
乐观锁的核心在于,在锁的共享变量基础上,索引节点中新增一个64位的版本号,同时保留原读锁和写锁,具体实现方案如图4所示。将读线程视为乐观读,只获取版本号到线程本地内存中,不修改锁的共享变量,这不会妨碍其它线程的读/写,在访问结束之后验证最新的版本号是否与原版本号一致,或验证是否有写锁存在,确认该节点是否被修改,验证失败则进行重试操作,重试多次后退化为悲观读,悲观读与原生读操作完全一致,写线程仍然会获取操作节点的写锁,操作结束之后,递增版本号,最后释放写锁。
当写线程在前,读线程在后,在判断持有写锁时,读线程会发生重试,直到写线程完成。当读线程在前,写线程在后,有两种情况,一是验证版本号之前写线程已经释放了锁,此时版本号已经递增,验证失败,进行重试,二是在验证版本号之后释放锁,此时持有写锁,验证失败,进行重试。
之所以说该方案是乐观的,原因在于对于那些很少被修改的节点(如根节点),乐观地假设其不会被修改,仅仅在访问节点结束之后通过读相关的版本号,确认页面是否被修改。利用对内存的读操作,代替写操作,减少对共享内存的写入次数。虽然会进行多次重试,但避免了在多核下造成其他核中缓存的内容失效,也减少了多个线程对同一块内存展开写操作,避免操作被序列化的开销,其开销仍小于修改共享内存造成的开销,有效地提升并发效率。
读线程处理流程图如图2所示:
P1.乐观读线程从根节点开始向下遍历索引树,首先判断根节点是否有写锁,若根节点持有写锁则重试,确保不会读一个正在修改中的页面。根节点没有持有写锁或重试成功,还可以获取根节点的当前的版本号,保存到线程的本地内存中,并将该根节点加入搜索路径的链表中。
P2.在访问第一当前节点时,获取位于第一当前节点的下一层的第一下层节点的地址以及第一下层节点的当前版本号。按照第一下层节点的地址对第一下层节点进行访问,在访问结束后,然后验证第一下层节点的最新版本号是否与第一下层节点的当前版本号一致以及第一下层节点是否持有写锁,验证失败则重新开启操作P1,验证成功则将第一下层节点作为最新的第一当前节点,并执行用于跳转至步骤判断位于第一当前节点下一层的第一下层节点是否持有写锁的跳转操作。
P3.一直重复操作P2,直至访问到的第一下层节点为到目标叶节点为止。
P4.访问目标叶节点,保存查询结果,然后通过验证目标叶节点的最新版本号和当前版本号,验证失败则重新开启操作P1,验证成功则返回查询结果。
写线程处理流程图如图3所示:
Q1.写线程从根节点开始向下遍历索引树,首先判断根节点是否持有写锁,若根节点持有写锁则加入等待队列,等待其他线程释放根节点的写锁。若没有写锁或竞争加读锁成功后,将根节点加入搜索路径的链表中。
Q2.在访问第二当前节点时,获取位于第二当前节点下一层的第二下层节点的地址。然后尝试获取第二下层节点的读锁,失败则加入等待队列,等待其他线程释放该第二下层节点的写锁。成功获取读锁后,释放第二当前节点的读锁。并将第二下层节点加入搜索路径的链表中。
Q3.一直重复操作Q2,直至访问到指定叶节点。
Q4.释放叶节点的读锁,尝试对叶节点加写锁,失败则加入等待队列,等待其他线程释放该叶节点的写锁。成功获取写锁后,更新叶节点,递增叶节点的全局版本号,最后释放叶节点的写锁。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM(Read-Only Memory,只读存储器)/RAM(Random Access Memory,随机存取存储器)、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本申请各个实施例所述的方法。
根据本申请实施例的另一个方面,还提供了一种用于实施上述数据库并发控制方法的数据库并发控制装置。图5是根据本申请实施例的一种可选的数据库并发控制装置的结构框图,如图5所示,该装置可以包括:
获取模块1,用于获取对数据库中的目标叶节点进行读操作的读请求;
判断模块2,用于响应于读请求,判断目标叶节点的先辈节点是否持有写锁;
保存模块3,用于在确定目标叶节点的先辈节点均不持有写锁的情况下,获取目标叶节点的当前版本号,并对目标叶节点进行访问,并保存对目标叶节点的查询结果,其中,查询结果为读请求对目标叶节点进行查询得到的结果;
返回模块4,用于获取目标叶节点的最新版本号,在确定最新版本号与当前版本号一致的情况下,返回查询结果。
需要说明的是,该实施例中的获取模块1可以用于执行上述步骤S101,该实施例中的判断模块2可以用于执行上述步骤S102,该实施例中的保存模块3可以用于执行上述步骤S103,该实施例中的返回模块4可以用于执行上述步骤S104。
本实施例中的装置,除包含上述模块之外,还可以包含执行如前述任一数据库并发控制方法的实施例中任意方法的模块。
此处需要说明的是,上述模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在实现如图1所示方法的硬件环境中,可以通过软件实现,也可以通过硬件实现,其中,硬件环境包括网络环境。
根据本申请实施例的又一个方面,还提供了一种用于实施上述数据库并发控制方法的电子设备,该电子设备可以是服务器、终端、或者其组合。
根据本申请的另一个实施例,还提供一种电子设备,包括:如图6所示,电子设备可以包括:处理器1501、通信接口1502、存储器1503和通信总线1504,其中,处理器1501,通信接口1502,存储器1503通过通信总线1504完成相互间的通信。
存储器1503,用于存放计算机程序;
处理器1501,用于执行存储器1503上所存放的程序时,实现如下步骤:
步骤S101,获取对数据库中的目标叶节点进行读操作的读请求;
步骤S102,响应于读请求,判断目标叶节点的先辈节点是否持有写锁。
步骤S103,在确定目标叶节点的先辈节点均不持有写锁的情况下,获取目标叶节点的当前版本号,并对目标叶节点进行访问,并保存对目标叶节点的查询结果,其中,查询结果为读请求对目标叶节点进行查询得到的结果。
步骤S104,获取目标叶节点的最新版本号,在确定最新版本号与当前版本号一致的情况下,返回查询结果。
可选地,在本实施例中,上述的通信总线可以是PCI (Peripheral ComponentInterconnect,外设部件互连标准)总线、或EISA (Extended Industry StandardArchitecture,扩展工业标准结构)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。通信接口用于上述电子设备与其他设备之间的通信。
存储器可以包括随机存取存储器(Random Access Memory,RAM),也可以包括非易失性存储器(Non-Volatile Memory,NVM),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
上述处理器可以是通用处理器,可以包含但不限于:CPU (Central ProcessingUnit,中央处理器)、NP(Network Processor,网络处理器)等;还可以是DSP (DigitalSignal Processor,数字信号处理器)、ASIC (Application Specific IntegratedCircuit,专用集成电路)、FPGA (Field-Programmable Gate Array,现场可编程门阵列)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
本申请实施例还提供一种计算机可读存储介质,存储介质包括存储的程序,其中,程序运行时执行上述方法实施例的方法步骤。
可选地,在本实施例中,上述存储介质可以包括但不限于:U盘、ROM、RAM、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
上述实施例中的集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在上述计算机可读取的存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在存储介质中,包括若干指令用以使得一台或多台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。
在本申请的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的客户端,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例中所提供的方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
以上所述仅是本申请的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。
Claims (7)
1.一种数据库并发控制方法,其特征在于,包括:
获取对数据库中的目标叶节点进行读操作的读请求;
响应于所述读请求,判断所述目标叶节点的先辈节点是否持有写锁;
在确定所述目标叶节点的先辈节点均不持有写锁的情况下,获取所述目标叶节点的当前版本号,并对所述目标叶节点进行访问,并保存对所述目标叶节点的查询结果,其中,所述查询结果为所述读请求对所述目标叶节点进行查询得到的结果;
获取所述目标叶节点的最新版本号,在确定所述最新版本号与所述当前版本号一致的情况下,返回所述查询结果;
所述响应于所述读请求,判断所述目标叶节点的先辈节点是否持有写锁,包括:响应于所述读请求,判断所述数据库的根节点是否有持有写锁;在所述根节点持有写锁的情况下,执行用于跳转至步骤所述判断所述数据库的根节点是否有持有写锁的重试跳转操作;在所述根节点未持有写锁的情况下,循环执行以下循环步骤,直至访问到所述目标叶节点为止:判断位于第一当前节点下一层的第一下层节点是否持有写锁,其中,所述第一当前节点为所述目标叶节点的先辈节点;在确定所述第一下层节点未持有写锁的情况下,读取所述第一下层节点的当前版本号,并对所述第一下层节点进行访问;在对所述第一下层节点的访问结束后,验证所述第一下层节点的最新版本号是否为当前版本号和/或验证所述第一下层节点是否持有写锁;在所述第一下层节点的最新版本号为当前版本号,且所述第一下层节点未持有写锁的情况下,判断位于所述第一下层节点是否为所述目标叶节点;在所述第一下层节点的最新版本号不是当前版本号和/或所述第一下层节点持有写锁的情况下,执行所述重试跳转操作;在所述第一下层节点为目标叶节点的情况下,退出所述循环步骤;在所述第一下层节点不为所述目标叶节点的情况下,将所述第一下层节点作为最新的第一当前节点,并执行用于跳转至步骤所述判断位于第一当前节点下一层的第一下层节点是否持有写锁的跳转操作;
所述方法还包括:获取对数据库中的指定叶节点进行写操作的写请求;在响应于所述写请求,访问到所述指定叶节点的情况下,对所述指定叶节点加写锁,并对所述指定叶节点进行修改;在对所述指定叶节点的修改完成后,对所述指定叶节点的当前版本号进行递增更新,得到更新后版本号,并释放所述指定叶节点的写锁;所述响应于所述写请求,访问到所述指定叶节点,包括:响应于所述写请求,判断所述数据库的根节点是否有持有写锁;在所述根节点持有写锁的情况下,将所述根节点加入等待队列,等待其他线程释放所述根节点的写锁;在所述根节点未持有写锁的情况下,循环执行以下循环步骤,直至访问到所述指定叶节点为止:判断位于第二当前节点下一层的第二下层节点是否持有写锁,其中,所述第二当前节点为所述指定叶节点的任一个先辈节点;在确定所述第二下层节点未持有写锁的情况下,对所述第二下层节点加读锁,释放第二当前节点的读锁,并对所述第二下层节点进行访问;在对所述第二下层节点的访问结束后,判断所述第二下层节点是否为所述指定叶节点;在所述第二下层节点为所述指定叶节点的情况下,退出所述循环步骤;在所述第二下层节点不为所述指定叶节点的情况下,将所述第二下层节点作为最新的第二当前节点,并执行用于跳转至步骤所述判断位于第二当前节点下一层的第二下层节点是否持有写锁的跳转操作。
2.根据权利要求1所述的方法,其特征在于,所述执行所述重试跳转操作,包括:
确定历史重试次数,其中,所述历史重试次数用于指示已执行的所述重试跳转操作次数;
对所述历史重试次数加1得到重试次数;
在所述重试次数未达到预设限定值的情况下,执行所述重试跳转操作。
3.根据权利要求1所述的方法,其特征在于,所述在确定所述第二下层节点未持有写锁的情况下,对所述第二下层节点加读锁,释放第二当前节点的读锁,并对所述第二下层节点进行访问,包括:
在确定所述第二下层节点未持有写锁的情况下,获取所述第二下层节点的读锁,释放第二当前节点的读锁;
将所述第二下层节点加入搜索路径的链表中,释放所述第二当前节点的读锁。
4.根据权利要求1所述的方法,其特征在于,在所述读取所述第一下层节点的当前版本号之后,所述方法还包括:
将所述第一下层节点的当前版本号存储于用于执行所述权利要求2所述方法的写线程的本地内存中。
5.一种数据库并发控制装置,其特征在于,包括:
获取模块,用于获取对数据库中的目标叶节点进行读操作的读请求;
判断模块,用于响应于所述读请求,判断所述目标叶节点的先辈节点是否持有写锁,包括:响应于所述读请求,判断所述数据库的根节点是否有持有写锁;在所述根节点持有写锁的情况下,执行用于跳转至步骤所述判断所述数据库的根节点是否有持有写锁的重试跳转操作;在所述根节点未持有写锁的情况下,循环执行以下循环步骤,直至访问到所述目标叶节点为止:判断位于第一当前节点下一层的第一下层节点是否持有写锁,其中,所述第一当前节点为所述目标叶节点的先辈节点;在确定所述第一下层节点未持有写锁的情况下,读取所述第一下层节点的当前版本号,并对所述第一下层节点进行访问;在对所述第一下层节点的访问结束后,验证所述第一下层节点的最新版本号是否为当前版本号和/或验证所述第一下层节点是否持有写锁;在所述第一下层节点的最新版本号为当前版本号,且所述第一下层节点未持有写锁的情况下,判断位于所述第一下层节点是否为所述目标叶节点;在所述第一下层节点的最新版本号不是当前版本号和/或所述第一下层节点持有写锁的情况下,执行所述重试跳转操作;在所述第一下层节点为目标叶节点的情况下,退出所述循环步骤;在所述第一下层节点不为所述目标叶节点的情况下,将所述第一下层节点作为最新的第一当前节点,并执行用于跳转至步骤所述判断位于第一当前节点下一层的第一下层节点是否持有写锁的跳转操作;
保存模块,用于在确定所述目标叶节点的先辈节点均不持有写锁的情况下,获取所述目标叶节点的当前版本号,并对所述目标叶节点进行访问,并保存对所述目标叶节点的查询结果,其中,所述查询结果为所述读请求对所述目标叶节点进行查询得到的结果;
返回模块,用于获取所述目标叶节点的最新版本号,在确定所述最新版本号与所述当前版本号一致的情况下,返回所述查询结果;
还包括一模块,用于获取对数据库中的指定叶节点进行写操作的写请求;在响应于所述写请求,访问到所述指定叶节点的情况下,对所述指定叶节点加写锁,并对所述指定叶节点进行修改;在对所述指定叶节点的修改完成后,对所述指定叶节点的当前版本号进行递增更新,得到更新后版本号,并释放所述指定叶节点的写锁;所述响应于所述写请求,访问到所述指定叶节点,包括:响应于所述写请求,判断所述数据库的根节点是否有持有写锁;在所述根节点持有写锁的情况下,将所述根节点加入等待队列,等待其他线程释放所述根节点的写锁;在所述根节点未持有写锁的情况下,循环执行以下循环步骤,直至访问到所述指定叶节点为止:判断位于第二当前节点下一层的第二下层节点是否持有写锁,其中,所述第二当前节点为所述指定叶节点的任一个先辈节点;在确定所述第二下层节点未持有写锁的情况下,对所述第二下层节点加读锁,释放第二当前节点的读锁,并对所述第二下层节点进行访问;在对所述第二下层节点的访问结束后,判断所述第二下层节点是否为所述指定叶节点;在所述第二下层节点为所述指定叶节点的情况下,退出所述循环步骤;在所述第二下层节点不为所述指定叶节点的情况下,将所述第二下层节点作为最新的第二当前节点,并执行用于跳转至步骤所述判断位于第二当前节点下一层的第二下层节点是否持有写锁的跳转操作。
6.一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,所述处理器、所述通信接口和所述存储器通过所述通信总线完成相互间的通信,其特征在于,
所述存储器,用于存储计算机程序;
所述处理器,用于通过运行所述存储器上所存储的所述计算机程序来执行权利要求1至4中任一项所述的方法步骤。
7.一种计算机可读的存储介质,其特征在于,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行权利要求1至4中任一项中所述的方法步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310985689.7A CN116719832B (zh) | 2023-08-07 | 2023-08-07 | 数据库并发控制方法和装置、电子设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310985689.7A CN116719832B (zh) | 2023-08-07 | 2023-08-07 | 数据库并发控制方法和装置、电子设备和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116719832A CN116719832A (zh) | 2023-09-08 |
CN116719832B true CN116719832B (zh) | 2023-11-24 |
Family
ID=87868313
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310985689.7A Active CN116719832B (zh) | 2023-08-07 | 2023-08-07 | 数据库并发控制方法和装置、电子设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116719832B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109407979A (zh) * | 2018-09-27 | 2019-03-01 | 清华大学 | 多线程持久性b+树数据结构设计与实现方法 |
CN111259071A (zh) * | 2020-01-04 | 2020-06-09 | 浙江科技学院 | 一种分布式数据库系统中的并发访问控制方法 |
CN111597193A (zh) * | 2020-04-28 | 2020-08-28 | 广东亿迅科技有限公司 | 一种树形数据的加解锁方法 |
CN113204435A (zh) * | 2021-07-01 | 2021-08-03 | 阿里云计算有限公司 | 数据处理方法以及系统 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111858629B (zh) * | 2020-07-02 | 2023-08-22 | 北京奥星贝斯科技有限公司 | 二阶段提交分布式事务更新数据库的实现方法和装置 |
US11755590B2 (en) * | 2020-11-04 | 2023-09-12 | Netapp, Inc. | Data connector component for implementing integrity checking, anomaly detection, and file system metadata analysis |
-
2023
- 2023-08-07 CN CN202310985689.7A patent/CN116719832B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109407979A (zh) * | 2018-09-27 | 2019-03-01 | 清华大学 | 多线程持久性b+树数据结构设计与实现方法 |
CN111259071A (zh) * | 2020-01-04 | 2020-06-09 | 浙江科技学院 | 一种分布式数据库系统中的并发访问控制方法 |
CN111597193A (zh) * | 2020-04-28 | 2020-08-28 | 广东亿迅科技有限公司 | 一种树形数据的加解锁方法 |
CN113204435A (zh) * | 2021-07-01 | 2021-08-03 | 阿里云计算有限公司 | 数据处理方法以及系统 |
Non-Patent Citations (1)
Title |
---|
基于HBase的支持频繁更新与多用户并发的R树;王波涛;梁伟;赵凯利;钟汉辉;张玉圻;;计算机科学(第07期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN116719832A (zh) | 2023-09-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11321303B2 (en) | Conflict resolution for multi-master distributed databases | |
Shamis et al. | Fast general distributed transactions with opacity | |
US8832050B2 (en) | Validation of distributed balanced trees | |
US9547524B2 (en) | Methods and systems for enhancing hardware transactions using hardware transactions in software slow-path | |
US10474645B2 (en) | Automatically retrying transactions with split procedure execution | |
US20190370241A1 (en) | Authenticated Key-value Stores Supporting Partial State | |
BR112012031912B1 (pt) | método implementado por computador, sistema e meio de armazenamento de computador | |
US20120221538A1 (en) | Optimistic, version number based concurrency control for index structures with atomic, non-versioned pointer updates | |
US11474995B2 (en) | Updating metadata in hardware transactional memory user aborts | |
US20170357687A1 (en) | Methods and systems of managing deletes in a database node of a nosql database | |
JP5754301B2 (ja) | トランザクション同時実行制御システム、トランザクション同時実行制御方法、およびプログラム | |
CN112579698A (zh) | 数据同步方法、装置、网关设备及存储介质 | |
CN115443457A (zh) | 事务处理方法、分布式数据库系统、集群及介质 | |
Cheng et al. | RAMP-TAO: layering atomic transactions on Facebook's online TAO data store | |
CN115495495A (zh) | 事务处理方法、分布式数据库系统、集群及介质 | |
CN116719832B (zh) | 数据库并发控制方法和装置、电子设备和存储介质 | |
CN110546609B (zh) | 硬件事务内存(htm)辅助数据库事务的方法及系统 | |
CN116089359A (zh) | 数据库快照的生成方法、装置、电子设备和介质 | |
CN112612647B (zh) | 日志并行重演方法、装置、设备及存储介质 | |
US10445338B2 (en) | Method and system for replicating data in a cloud storage system | |
CN114846458A (zh) | 分布式可串行化并发控制方案 | |
Saurez et al. | METRIC: A middleware for entry transactional database clustering at the edge | |
CN110377614A (zh) | 一种分布式环境下的订单处理锁系统 | |
Diegues et al. | Bumper: Sheltering distributed transactions from conflicts | |
CN113901273A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |