CN112835982B - 一种基于分布式数据库的表锁实现方法 - Google Patents
一种基于分布式数据库的表锁实现方法 Download PDFInfo
- Publication number
- CN112835982B CN112835982B CN202110214101.9A CN202110214101A CN112835982B CN 112835982 B CN112835982 B CN 112835982B CN 202110214101 A CN202110214101 A CN 202110214101A CN 112835982 B CN112835982 B CN 112835982B
- Authority
- CN
- China
- Prior art keywords
- lock
- transaction
- information
- table lock
- node
- 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
Images
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/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- 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/2455—Query execution
- G06F16/24552—Database cache management
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明特别涉及一种基于分布式数据库的表锁实现方法。该基于分布式数据库的表锁实现方法,当数据库中出现长事务时,通过上表锁将事务要进行读和/或写操作的table变为该事务独有,并将该事务的优先级设置为最大,以此保证该事务在与其他事务产生冲突时自身不被回滚。该基于分布式数据库的表锁实现方法,不仅能够显著降低长事务回滚的频率,而且表锁信息在各个节点均设有缓存,提高了表锁信息的获取效率。
Description
技术领域
本发明涉及数据库技术领域,特别涉及一种基于分布式数据库的表锁实现方法。
背景技术
MySQL常用引擎有MyISAM和InnoDB,而InnoDB是mysql默认的引擎。MyISAM不支持行锁,只有表级锁,而InnoDB支持行锁和表锁。MyISAM在执行查询语句(SELECT)前,会自动给涉及的所有表加读锁,在执行更新操作(UPDATE、DELETE、INSERT等)前,会自动给涉及的表加写锁,这个过程并不需要用户干预,因此用户一般不需要直接用LOCK TABLE命令给MyISAM表显式加锁。
PostgreSQL的表级锁通常是各种命令执行时自动获取的,或者通过事务中的LOCK语句显式获取;LOCK TABLE命令用于获取一个表锁,获取过程将阻塞一直到等待的锁被其他事务释放。如果使用NOWAIT关键字则如果获取不到锁,将不会等待而是直接返回,放弃执行当前指令并抛出一个错误(error)。一旦获取到锁,将一直持有锁直到事务结束(没有主动释放锁的命令,锁总是会在事务结束的时候被释放)。
但是上述两种表锁的实现方式都是基于单机数据库,在分布式数据库中这种实现方式已经不再适用。
针对数据库中长事务提交失败造成的性能浪费,本发明提出了一种基于分布式数据库的表锁实现方法。
发明内容
本发明为了弥补现有技术的缺陷,提供了一种简单高效的基于分布式数据库的表锁实现方法。
本发明是通过如下技术方案实现的:
一种基于分布式数据库的表锁实现方法,其特征在于:当数据库中出现长事务时,通过上表锁将事务要进行读和/或写操作的table(表)变为该事务独有,并将该事务的优先级设置为最大,以保证该事务在与其他事务产生冲突时自身不被回滚;
具体包括以下步骤:
步骤1:在分布式系统启动时自动创建一个系统表lock_table,用于存储表锁的相关信息;
步骤2:在分布式系统的各个节点缓存表级锁信息;
在数据库的每个节点构造一个节点级别的缓存(cache),用于将表锁信息缓存到每个节点本地,避免每次获取表锁信息时跨节点和读磁盘,造成巨大的性能损耗;
步骤3:在各个节点加入阻塞队列,用于延迟事务拿到表锁的时间,防止由于锁冲突而立刻回滚;
步骤4:实现保护机制,防止死锁;
系统设置阈时间(thresholdtime),当事务持有的锁超时时,自动解锁;
当节点宕机时,事务持有的该节点的表的锁自动解锁,阻塞事务全部回滚;
使用死锁检测算法,当多个事务发生死锁时,随机回滚其中一个事务打破死锁。
所述步骤1中,当增加/删除表锁信息时,先更新系统表lock_table,然后将更新的表锁信息通过gossip从输入节点传播至全集群每个节点,用于更新各节点的表锁缓存。
所述步骤3中,利用缓存队列保证FIFO(First Input First Output,先入先出队列),防止事务饿死;通过心跳更新队列将回滚(abort或rollback)事务及时从队列中清除。
所述表锁只能在显示事务中通过对应的语法添加,加锁步骤如下:
(1)在使用加锁语法后,通过sql引擎解析加锁语法,将加锁操作发送到目标表所在节点;
(2)通过检查本节点表锁缓存来判断目标表是否已被加锁,如果已被加锁,则进入等待队列;如果表锁缓存中没有目标表的加锁信息,则表示目标表没有被加锁,则在系统表lock_table中写入加锁信息,然后将增量加锁信息通过gossip广播至所有节点。
所述表锁解锁时,先执行解锁语法,将目标锁信息从系统表lock_table中删除,然后将删除动作通过gossip广播至所有节点;在所有节点执行删除动作并将加锁信息从缓存中删除,同时唤醒在该表的等待队列上的队首请求,获取该表锁。
所述步骤4中,通过语法设置本集群的阈时间,用于每隔该时间更新每个节点的表锁缓存;因为网络延迟或事务结束等原因有时会造成表锁信息更新不及时或无法更新的问题,通过上锁信息过期超时解锁机制:当事务获取到目标关系存在表锁时,当发现其存储的加锁时间与当下的时间距离超过了阈时间的2倍时(locktime+2thresholdtime<Now),认为该上锁信息已过期,重新构建一条解锁消息覆盖已过期的上锁信息即可。
当事务发现目标关系存在表锁时,会进入等待(wait)状态,此时事务不会再去查询表锁是否仍然存在,而是等待广播(Broadcast)的解锁信息,其对应节点宕机超时解锁机制。当表锁信息落盘的节点宕机时,会造成解锁信息无法被广播的情况,通过节点宕机超时解锁机制;所述步骤4中,在事务进入等待状态后,开启新携程计时,当超过阈时间的3倍时间后仍未受到更新表锁的信息时,认为广播表锁信息的节点宕机,解锁当前节点中等到状态的事务查询表锁信息,若发现上锁信息已过期,则广播解锁信息。
所述步骤4中,当两个事务因产生冲突均进入等待状态产生死锁的情况时,通过使用死锁检测算法,在构建上锁计划层的同时,向store层发送验证是否存在死锁的判断,当发现产生死锁时,随机回滚一个事务。
当拥有表锁的事务提交或回滚,但并未解锁时,通过计时器定时加锁的lock操作会失败,当发现加锁失败时,通过新起事务构建解锁消息覆盖原有加锁信息。
本发明的有益效果是:该基于分布式数据库的表锁实现方法,不仅能够显著降低长事务回滚的频率,而且表锁信息在各个节点均设有缓存,提高了表锁信息的获取效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
附图1为本发明广播加锁/解锁信息时序示意图。
具体实施方式
为了使本技术领域的人员更好的理解本发明中的技术方案,下面将结合本发明实施例,对本发明实施例中的技术方案进行清楚,完整的描述。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
该基于分布式数据库的表锁实现方法,当数据库中出现长事务时,通过上表锁将事务要进行读和/或写操作的table(表)变为该事务独有,并将该事务的优先级设置为最大,以保证该事务在与其他事务产生冲突时自身不被回滚;
具体包括以下步骤:
步骤1:在分布式系统启动时自动创建一个系统表lock_table,用于存储表锁的相关信息;
步骤2:在分布式系统的各个节点缓存表级锁信息;
在数据库的每个节点构造一个节点级别的缓存(cache),用于将表锁信息缓存到每个节点本地,避免每次获取表锁信息时跨节点和读磁盘,造成巨大的性能损耗;
步骤3:在各个节点加入阻塞队列,用于延迟事务拿到表锁的时间,防止由于锁冲突而立刻回滚;
步骤4:实现保护机制,防止死锁;
系统设置阈时间(thresholdtime),当事务持有的锁超时时,自动解锁;
当节点宕机时,事务持有的该节点的表的锁自动解锁,阻塞事务全部回滚;
使用死锁检测算法,当多个事务发生死锁时,随机回滚其中一个事务打破死锁。
所述步骤1中,当增加/删除表锁信息时,先更新系统表lock_table,然后将更新的表锁信息通过gossip从输入节点传播至全集群每个节点,用于更新各节点的表锁缓存。
所述步骤3中,利用缓存队列保证FIFO(First Input First Output,先入先出队列),防止事务饿死;通过心跳更新队列将回滚(abort或rollback)事务及时从队列中清除。
所述表锁只能在显示事务中通过对应的语法添加,加锁步骤如下:
(1)在使用加锁语法后,通过sql引擎解析加锁语法,将加锁操作发送到目标表所在节点;
(2)通过检查本节点表锁缓存来判断目标表是否已被加锁,如果已被加锁,则进入等待队列;如果表锁缓存中没有目标表的加锁信息,则表示目标表没有被加锁,则在系统表lock_table中写入加锁信息,然后将增量加锁信息通过gossip广播至所有节点。
所述表锁解锁时,先执行解锁语法,将目标锁信息从系统表lock_table中删除,然后将删除动作通过gossip广播至所有节点;在所有节点执行删除动作并将加锁信息从缓存中删除,同时唤醒在该表的等待队列上的队首请求,获取该表锁。
所述步骤4中,通过语法设置本集群的阈时间,用于每隔该时间更新每个节点的表锁缓存;因为网络延迟或事务结束等原因有时会造成表锁信息更新不及时或无法更新的问题,通过上锁信息过期超时解锁机制:当事务获取到目标关系存在表锁时,当发现其存储的加锁时间与当下的时间距离超过了阈时间的2倍时(locktime+2thresholdtime<Now),认为该上锁信息已过期,重新构建一条解锁消息覆盖已过期的上锁信息即可。
当事务发现目标关系存在表锁时,会进入等待(wait)状态,此时事务不会再去查询表锁是否仍然存在,而是等待广播(Broadcast)的解锁信息,其对应节点宕机超时解锁机制。当表锁信息落盘的节点宕机时,会造成解锁信息无法被广播的情况,通过节点宕机超时解锁机制;所述步骤4中,在事务进入等待状态后,开启新携程计时,当超过阈时间的3倍时间后仍未受到更新表锁的信息时,认为广播表锁信息的节点宕机,解锁当前节点中等到状态的事务查询表锁信息,若发现上锁信息已过期,则广播解锁信息。
所述步骤4中,当两个事务因产生冲突均进入等待状态产生死锁的情况时,通过使用死锁检测算法,在构建上锁计划层的同时,向store层发送验证是否存在死锁的判断,当发现产生死锁时,随机回滚一个事务。
当拥有表锁的事务提交或回滚,但并未解锁时,通过计时器定时加锁的lock操作会失败,当发现加锁失败时,通过新起事务构建解锁消息覆盖原有加锁信息。
以上所述的实施例,只是本发明具体实施方式的一种,本领域的技术人员在本发明技术方案范围内进行的通常变化和替换都应包含在本发明的保护范围内。
Claims (7)
1.一种基于分布式数据库的表锁实现方法,其特征在于:当数据库中出现长事务时,通过上表锁将事务要进行读和/或写操作的table变为该事务独有,并将该事务的优先级设置为最大,以保证该事务在与其他事务产生冲突时自身不被回滚;
具体包括以下步骤:
步骤1:在分布式系统启动时自动创建一个系统表lock_table,用于存储表锁的相关信息;
步骤2:在分布式系统的各个节点缓存表级锁信息
在数据库的每个节点构造一个节点级别的缓存,用于将表锁信息缓存到每个节点本地,避免每次获取表锁信息时跨节点和读磁盘,造成巨大的性能损耗;
步骤3:在各个节点加入阻塞队列,用于延迟事务拿到表锁的时间,防止由于锁冲突而立刻回滚;
所述表锁只能在显示事务中通过对应的语法添加,加锁步骤如下:
(1)在使用加锁语法后,通过sql引擎解析加锁语法,将加锁操作发送到目标表所在节点;
(2)通过检查本节点表锁缓存来判断目标表是否已被加锁,如果已被加锁,则进入等待队列;如果表锁缓存中没有目标表的加锁信息,则表示目标表没有被加锁,则在系统表lock_table中写入加锁信息,然后将增量加锁信息通过gossip广播至所有节点;
步骤4:实现保护机制,防止死锁
系统设置阈时间,当事务持有的锁超时时,自动解锁;
当节点宕机时,事务持有的该节点的表的锁自动解锁,阻塞事务全部回滚;
使用死锁检测算法,当多个事务发生死锁时,随机回滚其中一个事务打破死锁;
所述步骤4中,在事务进入等待状态后,开启新携程计时,当超过阈时间的3倍时间后仍未受到更新表锁的信息时,认为广播表锁信息的节点宕机,解锁当前节点中等到状态的事务查询表锁信息,若发现上锁信息已过期,则广播解锁信息。
2.根据权利要求1所述的基于分布式数据库的表锁实现方法,其特征在于:所述步骤1中,当增加/删除表锁信息时,先更新系统表lock_table,然后将更新的表锁信息通过gossip从输入节点传播至全集群每个节点,用于更新各节点的表锁缓存。
3.根据权利要求1或2所述的基于分布式数据库的表锁实现方法,其特征在于:所述步骤3中,利用缓存队列保证FIFO,防止事务饿死;通过心跳更新队列将回滚事务及时从队列中清除。
4.根据权利要求1所述的基于分布式数据库的表锁实现方法,其特征在于:所述表锁解锁时,先执行解锁语法,将目标锁信息从系统表lock_table中删除,然后将删除动作通过gossip广播至所有节点;在所有节点执行删除动作并将加锁信息从缓存中删除,同时唤醒在该表的等待队列上的队首请求,获取该表锁。
5.根据权利要求4所述的基于分布式数据库的表锁实现方法,其特征在于:所述步骤4中,通过语法设置本集群的阈时间,用于每隔该时间更新每个节点的表锁缓存;当事务获取到目标关系存在表锁时,当发现其存储的加锁时间与当下的时间距离超过了阈时间的2倍时,认为该上锁信息已过期,重新构建一条解锁消息覆盖已过期的上锁信息即可。
6.根据权利要求4所述的基于分布式数据库的表锁实现方法,其特征在于:所述步骤4中,当两个事务因产生冲突均进入等待状态产生死锁的情况时,通过使用死锁检测算法,在构建上锁计划层的同时,向store层发送验证是否存在死锁的判断,当发现产生死锁时,随机回滚一个事务。
7.根据权利要求4所述的基于分布式数据库的表锁实现方法,其特征在于:当拥有表锁的事务提交或回滚,但并未解锁时,通过计时器定时加锁的lock操作会失败,当发现加锁失败时,通过新起事务构建解锁消息覆盖原有加锁信息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110214101.9A CN112835982B (zh) | 2021-02-26 | 2021-02-26 | 一种基于分布式数据库的表锁实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110214101.9A CN112835982B (zh) | 2021-02-26 | 2021-02-26 | 一种基于分布式数据库的表锁实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112835982A CN112835982A (zh) | 2021-05-25 |
CN112835982B true CN112835982B (zh) | 2023-03-24 |
Family
ID=75933597
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110214101.9A Active CN112835982B (zh) | 2021-02-26 | 2021-02-26 | 一种基于分布式数据库的表锁实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112835982B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115292092B (zh) * | 2022-08-04 | 2023-04-25 | 深圳计算科学研究院 | 一种数据回滚方法、装置、设备及其存储介质 |
CN116303489B (zh) * | 2023-01-16 | 2023-09-01 | 北京优炫软件股份有限公司 | 一种分层局部式表锁的实现方法以及实现系统 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1945539A (zh) * | 2006-10-19 | 2007-04-11 | 华为技术有限公司 | 计算机集群系统中共享资源锁分配方法与计算机及集群系统 |
CN101252603A (zh) * | 2008-04-11 | 2008-08-27 | 清华大学 | 基于存储区域网络san的集群分布式锁管理方法 |
CN104536834A (zh) * | 2014-11-26 | 2015-04-22 | 华为技术有限公司 | 一种授权锁权限的方法和分布式锁管理器 |
CN106657365A (zh) * | 2016-12-30 | 2017-05-10 | 清华大学 | 一种基于rdma的高并发数据传输方法 |
CN108874552A (zh) * | 2018-06-28 | 2018-11-23 | 杭州云英网络科技有限公司 | 分布式锁执行方法、装置及系统、应用服务器和存储介质 |
CN110442459A (zh) * | 2019-07-04 | 2019-11-12 | 北京百度网讯科技有限公司 | 分布式死锁检测方法及装置、计算机设备及可读介质 |
CN111831455A (zh) * | 2020-07-02 | 2020-10-27 | 上海微亿智造科技有限公司 | 工业物联网下分布式事务处理系统及方法 |
CN112099961A (zh) * | 2020-09-21 | 2020-12-18 | 天津神舟通用数据技术有限公司 | 一种基于锁状态缓存的分布式锁管理器的实现方法 |
-
2021
- 2021-02-26 CN CN202110214101.9A patent/CN112835982B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1945539A (zh) * | 2006-10-19 | 2007-04-11 | 华为技术有限公司 | 计算机集群系统中共享资源锁分配方法与计算机及集群系统 |
CN101252603A (zh) * | 2008-04-11 | 2008-08-27 | 清华大学 | 基于存储区域网络san的集群分布式锁管理方法 |
CN104536834A (zh) * | 2014-11-26 | 2015-04-22 | 华为技术有限公司 | 一种授权锁权限的方法和分布式锁管理器 |
CN106657365A (zh) * | 2016-12-30 | 2017-05-10 | 清华大学 | 一种基于rdma的高并发数据传输方法 |
CN108874552A (zh) * | 2018-06-28 | 2018-11-23 | 杭州云英网络科技有限公司 | 分布式锁执行方法、装置及系统、应用服务器和存储介质 |
CN110442459A (zh) * | 2019-07-04 | 2019-11-12 | 北京百度网讯科技有限公司 | 分布式死锁检测方法及装置、计算机设备及可读介质 |
CN111831455A (zh) * | 2020-07-02 | 2020-10-27 | 上海微亿智造科技有限公司 | 工业物联网下分布式事务处理系统及方法 |
CN112099961A (zh) * | 2020-09-21 | 2020-12-18 | 天津神舟通用数据技术有限公司 | 一种基于锁状态缓存的分布式锁管理器的实现方法 |
Also Published As
Publication number | Publication date |
---|---|
CN112835982A (zh) | 2021-05-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112835982B (zh) | 一种基于分布式数据库的表锁实现方法 | |
CN108363806B (zh) | 数据库的多版本并发控制方法、装置、服务器及存储介质 | |
US10503699B2 (en) | Metadata synchronization in a distrubuted database | |
US6772155B1 (en) | Looking data in a database system | |
Lin et al. | Towards a non-2pc transaction management in distributed database systems | |
US11176123B2 (en) | Offloading constraint enforcement in a hybrid DBMS | |
CN108710638B (zh) | 一种基于混合rdma操作的分布式并发控制方法及系统 | |
US20020087564A1 (en) | Technique for serializing data structure updates and retrievals without requiring searchers to use locks | |
US6970872B1 (en) | Techniques for reducing latency in a multi-node system when obtaining a resource that does not reside in cache | |
US8103643B2 (en) | System and method for performing distributed transactions using global epochs | |
US7899794B2 (en) | Optimizing lock acquisition on transaction logs | |
CN111797107B (zh) | 混合乐观锁和悲观锁的数据库事务并发控制方法 | |
KR101296778B1 (ko) | NoSQL 데이터베이스를 위한 결과적 트랜잭션 처리 방법 | |
CN112241400A (zh) | 一种基于数据库实现分布式锁的方法 | |
CN113391885A (zh) | 一种分布式事务处理系统 | |
CN111209093B (zh) | 一种分布式数据库系统中分布式事务的处理方法 | |
Shanker et al. | SWIFT—A new real time commit protocol | |
CN111694863A (zh) | 一种数据库缓存的刷新方法、系统和装置 | |
US11061889B2 (en) | Systems and methods of managing manifest refresh in a database | |
US7051051B1 (en) | Recovering from failed operations in a database system | |
WO2023124242A1 (zh) | 事务执行方法、装置、设备和存储介质 | |
CN104821907B (zh) | 一种电子邮件处理方法 | |
Xiong et al. | A Prudent-Precedence Concurrency Control Protocol for High Data Contention Database Enviornments | |
CN117407374B (zh) | 一种基于分布式文件系统的分布式锁实现方法和系统 | |
CN117076147B (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 |