CN105955804A - 一种处理分布式事务的方法与设备 - Google Patents
一种处理分布式事务的方法与设备 Download PDFInfo
- Publication number
- CN105955804A CN105955804A CN201610254762.3A CN201610254762A CN105955804A CN 105955804 A CN105955804 A CN 105955804A CN 201610254762 A CN201610254762 A CN 201610254762A CN 105955804 A CN105955804 A CN 105955804A
- Authority
- CN
- China
- Prior art keywords
- lock
- object table
- equipment
- write
- request
- 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.)
- Granted
Links
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/466—Transaction processing
-
- 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/2336—Pessimistic concurrency control approaches, e.g. locking or multiple versions without time stamps
- G06F16/2343—Locking methods, e.g. distributed locking or locking implementation details
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1415—Saving, restoring, recovering or retrying at system level
- G06F11/1438—Restarting or rejuvenating
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/16—Error detection or correction of the data by redundancy in hardware
- G06F11/20—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
- G06F11/202—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where processing functionality is redundant
- G06F11/2023—Failover techniques
- G06F11/203—Failover techniques using migration
-
- 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/2379—Updates performed during online database operations; commit processing
-
- 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/24553—Query execution of query operations
-
- 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/465—Distributed object oriented systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/80—Database-specific techniques
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/805—Real-time
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/82—Solving problems relating to consistency
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/825—Indexing scheme relating to error detection, to error correction, and to monitoring the problem or solution involving locking
Abstract
本申请的目的是提供一种处理分布式事务的方法与设备。与现有技术相比,在分布式系统中,本申请的第一设备是由多个节点组成的一个组,所述第一设备获取SQL编译器发送的关于待处理的事务的目标表的加写锁请求,并基于所述加写锁请求,对所述目标表进行加写锁处理,从而避免多个事务并发时的冲突问题,确保事务的隔离性,若所述加写锁处理成功,向所述SQL编译器发送所述目标表的待处理版本信息,以确保后续SQL编译器对目标表的正确版本进行操作。进一步地,本申请通过重启未响应所述加写锁请求的所述子节点,或将所述子节点的服务迁移到其他物理机器上,而后更新所述子节点的加锁状态信息,从而进行有效的出错恢复并保证组内一致性。
Description
技术领域
本申请涉及计算机领域,尤其涉及一种处理分布式事务的技术。
背景技术
数据库中的事务是数据库运行中的一个逻辑工作单位,作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。而一个逻辑工作单元要成为事务,必须满足所谓的ACID(原子性、一致性、隔离性和持久性)属性;在多个事务并发时,如何避免冲突问题,都是关乎系统稳定性及用户体验的重要问题。
发明内容
本申请的一个目的是提供一种处理分布式事务的方法与设备。
根据本申请的一个方面,提供了一种在第一设备端处理分布式事务的方法,其中,该方法包括:
a获取SQL编译器发送的关于待处理的事务的目标表的加写锁请求,其中,所述事务包括若干条SQL语句;
b基于所述加写锁请求,对所述目标表进行加写锁处理;
c若所述加写锁处理成功,向所述SQL编译器发送所述目标表的待处理版本信息。
进一步地,所述第一设备包括一个总节点及若干个子节点;其中,所述步骤b包括:通过所述总节点将所述加写锁请求分发至若干个所述子节点,对所述目标表进行加写锁处理。
进一步地,所述方法还包括:若所述总节点在预定时间内获取大于或等于预定数量的所述子节点关于所述加写锁请求的响应,则所述加写锁处理成功。
进一步地,所述加写锁处理成功还包括:将新的加锁状态信息写入日志文件中;或所述总节点存储新的加锁状态信息。
进一步地,所述方法还包括:重启未响应所述加写锁请求的所述子节点,所述子节点从所述日志文件中读取最新的所述加锁状态信息;或重启未响应所述加写锁请求的所述子节点,所述总节点将最新的所述加锁状态信息发送至所述子节点。
进一步地,所述重启未响应所述加写锁请求的所述子节点还包括:若所述未响应所述加写锁请求的所述子节点无法重启,则通过所述总节点将所述子节点的服务迁移到其他物理机器上,并在该物理机器上启动所述子节点的服务。
进一步地,所述步骤b包括:对所述目标表的部分进行加写锁处理;其中,所述方法还包括:向第二设备发送关于所述目标表的部分加写锁的请求。
进一步地,所述对所述目标表的部分进行加写锁处理包括:若所述目标表的全表已被加写锁,则忽略对所述目标表的部分进行加写锁处理;否则,对所述目标表的部分进行加写锁处理。
进一步地,所述方法还包括:当所述目标表的版本数量等于或大于预定版本数量阈值,对所述目标表的若干个版本进行合并处理。
进一步地,所述方法还包括:当获取事务提交语句,设置新版本的所述目标表的状态为有效,解锁所述目标表;或当获取事务回滚语句,设置新版本的所述目标表的状态为无效,解锁所述目标表。
进一步地,所述步骤a还包括:获取SQL编译器发送的关于待处理的事务的源表的加读锁请求;其中,所述步骤b还包括:基于所述加读锁请求,对所述源表进行加读锁处理;其中,所述步骤c还包括:若所述加读锁处理成功,向所述SQL编译器发送所述源表的待处理版本信息;其中,所述方法还包括:当获取事务提交语句或事务回滚语句,解锁所述源表。根据本申请的另一个方面,还提供了一种在第二设备端处理分布式事务的方法,其中,该方法包括:
A获取第一设备发送的关于目标表的部分加写锁的请求;
B根据所述关于目标表的部分加写锁的请求,对所述目标表的部分进行加写锁处理。
进一步地,所述步骤B包括:根据所述关于目标表的部分加写锁的请求,向所述第一设备查询所述目标表的全表是否已被加写锁;若所述目标表的全表未被加写锁,对所述目标表的部分进行加写锁处理。
进一步地,所述第二设备包括一个总节点及若干个子节点;其中,所述步骤B包括:通过所述总节点将所述关于目标表的部分加写锁的请求分发至若干个所述子节点,对所述目标表的部分进行加写锁处理。
根据本申请的又一个方面,还提供了一种用于处理分布式事务的第一设备,其中,该设备包括:
第一装置,用于获取SQL编译器发送的关于待处理的事务的目标表的加写锁请求,其中,所述事务包括若干条SQL语句;
第二装置,用于基于所述加写锁请求,对所述目标表进行加写锁处理;
第三装置,用于若所述加写锁处理成功,向所述SQL编译器发送所述目标表的待处理版本信息。
进一步地,所述设备包括一个总节点及若干个子节点;其中,所述第二装置用于:通过所述总节点将所述加写锁请求分发至若干个所述子节点,对所述目标表进行加写锁处理。
进一步地,所述设备还包括:第四装置,用于若所述总节点在预定时间内获取大于或等于预定数量的所述子节点关于所述加写锁请求的响应,则所述加写锁处理成功。
进一步地,所述加写锁处理成功还包括:将新的加锁状态信息写入日志文件中;或所述总节点存储新的加锁状态信息。
进一步地,所述设备还包括:第五装置,用于重启未响应所述加写锁请求的所述子节点,所述子节点从所述日志文件中读取最新的所述加锁状态信息;或第六装置,用于重启未响应所述加写锁请求的所述子节点,所述总节点将最新的所述加锁状态信息发送至所述子节点。
进一步地,所述重启未响应所述加写锁请求的所述子节点还包括:若所述未响应所述加写锁请求的所述子节点无法重启,则通过所述总节点将所述子节点的服务迁移到其他物理机器上,并在该物理机器上启动所述子节点的服务。
进一步地,所述第二装置用于:对所述目标表的部分进行加写锁处理;其中,所述设备还包括:第七装置,用于向第二设备发送关于所述目标表的部分加写锁的请求。
进一步地,所述对所述目标表的部分进行加写锁处理包括:若所述目标表的全表已被加写锁,则忽略对所述目标表的部分进行加写锁处理;否则,对所述目标表的部分进行加写锁处理。
进一步地,所述设备还包括:第八装置,用于当所述目标表的版本数量等于或大于预定版本数量阈值,对所述目标表的若干个版本进行合并处理。
进一步地,所述设备还包括:第九装置,用于当获取事务提交语句,设置新版本的所述目标表的状态为有效,解锁所述目标表;或第十装置,用于当获取事务回滚语句,设置新版本的所述目标表的状态为无效,解锁所述目标表。
进一步地,所述第一装置还用于:获取SQL编译器发送的关于待处理的事务的源表的加读锁请求;其中,所述第二装置还用于:基于所述加读锁请求,对所述源表进行加读锁处理;其中,所述第三装置还用于:若所述加读锁处理成功,向所述SQL编译器发送所述源表的待处理版本信息;其中,所述设备还包括:第十一装置,用于当获取事务提交语句或事务回滚语句,解锁所述源表。
根据本申请的再一个方面,还提供了一种用于处理分布式事务的第二设备,其中,该设备包括:
第十二装置,用于获取第一设备发送的关于目标表的部分加写锁的请求;
第十三装置,用于根据所述关于目标表的部分加写锁的请求,对所述目标表的部分进行加写锁处理。
进一步地,所述第十三装置用于:根据所述关于目标表的部分加写锁的请求,向所述第一设备查询所述目标表的全表是否已被加写锁;若所述目标表的全表未被加写锁,对所述目标表的部分进行加写锁处理。
进一步地,所述设备包括一个总节点及若干个子节点;其中,所述第十三装置用于:通过所述总节点将所述关于目标表的部分加写锁的请求分发至若干个所述子节点,对所述目标表的部分进行加写锁处理。
根据本申请的另一个方面,还提供了一种处理分布式事务的系统,其中,该系统包括如上所述的第一设备及如上所述的第二设备。
与现有技术相比,在分布式系统中,本申请的第一设备是由多个节点组成的一个组,所述第一设备获取SQL编译器发送的关于待处理的事务的目标表的加写锁请求,并基于所述加写锁请求,对所述目标表进行加写锁处理,从而避免多个事务并发时的冲突问题,确保事务的隔离性,若所述加写锁处理成功,向所述SQL编译器发送所述目标表的待处理版本信息,以确保后续SQL编译器对目标表的正确版本进行操作。进一步地,本申请通过重启未响应所述加写锁请求的所述子节点,或将所述子节点的服务迁移到其他物理机器上,而后更新所述子节点的加锁状态信息,从而进行有效的出错恢复并保证组内一致性。进一步地,在数量小、并发度较高的场景下,本申请通过所述第一设备及所述第二设备组成的系统对所述事务的目标表进行加写锁处理,由所述第二设备对所述目标表的部分进行加写锁处理,从而提高系统的效率。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
图1示出根据本申请一个实施例的一种第一设备的结构图;
图2示出根据本申请一个方面的一种处理分布式事务的方法流程图;
图3示出根据本申请一个实施例的一种处理分布式事务的方法流程图;
图4示出根据本申请另一个实施例的一种处理分布式事务的方法流程图;
图5示出根据本申请另一个方面的一种用于处理分布式事务的第一设备示意图;
图6示出根据本申请一个实施例的一种用于处理分布式事务的第一设备示意图;
图7示出根据本申请另一个实施例的一种用于处理分布式事务的第一设备与第二设备的示意图。
附图中相同或相似的附图标记代表相同或相似的部件。
具体实施方式
下面结合附图对本申请作进一步详细描述。
在本申请一个典型的配置中,终端、服务网络的设备和可信方均包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flashRAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
图2示出根据本申请一个方面的一种用于处理分布式事务的方法流程图。
该方法包括步骤S101、步骤S102和步骤S103。具体地,在步骤S101中,所述第一设备1获取SQL编译器发送的关于待处理的事务的目标表的加写锁请求,其中,所述事务包括若干条SQL语句;在步骤S102中,所述第一设备1基于所述加写锁请求,对所述目标表进行加写锁处理;在步骤S103中,所述第一设备1若所述加写锁处理成功,向所述SQL编译器发送所述目标表的待处理版本信息。
在此,所述第一设备1包括但不限于用户设备、网络设备、或用户设备与网络设备通过网络相集成所构成的设备。所述用户设备其包括但不限于任何一种可与用户通过触摸板进行人机交互的移动电子产品,例如智能手机、平板电脑等,所述移动电子产品可以采用任意操作系统,如android操作系统、iOS操作系统等。其中,所述网络设备包括一种能够按照事先设定或存储的指令,自动进行数值计算和信息处理的电子设备,其硬件包括但不限于微处理器、专用集成电路(ASIC)、可编程门阵列(FPGA)、数字处理器(DSP)、嵌入式设备等。所述网络设备其包括但不限于计算机、网络主机、单个网络服务器、多个网络服务器集或多个服务器构成的云;在此,云由基于云计算(Cloud Computing)的大量计算机或网络服务器构成,其中,云计算是分布式计算的一种,由一群松散耦合的计算机集组成的一个虚拟超级计算机。所述网络包括但不限于互联网、广域网、城域网、局域网、VPN网络、无线自组织网络(Ad Hoc网络)等。优选地,第一设备1还可以是运行于所述用户设备、网络设备、或用户设备与网络设备、网络设备、触摸终端或网络设备与触摸终端通过网络相集成所构成的设备上的脚本程序。当然,本领域技术人员应能理解上述第一设备1仅为举例,其他现有的或今后可能出现的第一设备1如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
在步骤S101中,所述第一设备1获取SQL编译器发送的关于待处理的事务的目标表的加写锁请求,其中,所述事务包括若干条SQL语句。
在此,SQL语言(结构化查询语言)的组成部分包括了DCL语言(数据库控制语言)。所述事务由DCL语句begin transaction(开始事务)开始,并由DCL语句commit(事务提交)或rollback(事务回滚)结束。在所述事务起始与终点处的DCL语句之间,包括若干条CRUD(Create、Retrieve、Update、Delete几个单词的首字母简写,主要被用在描述软件系统中数据库或者持久层的基本操作功能)SQL语句。所述目标表指的是所述SQL语句将要对其进行写操作的表。而且,在加锁过程中,所述事务中每条SQL语句对应的加写锁请求分别独立进行。
例如,首先由SQL编译器对所获取的SQL语句进行编译,得到该SQL语句涉及的表与执行计划,然后SQL编译器向所述第一设备1发送关于所述事务中所述SQL语句的目标表的加写锁请求,通过加锁的方式避免多个事务并发时产生冲突的问题,确保事务的隔离性(Isolation)。
优选地,在步骤S101中,所述第一设备1还获取SQL编译器发送的关于待处理的事务的源表的加读锁请求。
在此,所述源表指的是所述SQL语句将要对其进行读操作的表。在大多数应用场景中,所述SQL语句既有目标表也有源表,SQL编译器还需发送对所述SQL语句的源表的加读锁请求。而在部分应用场景中,所述SQL语句只有目标表没有源表,则SQL编译器无需发送对所述SQL语句的源表的加读锁请求。
在步骤S102中,所述第一设备1基于所述加写锁请求,对所述目标表进行加写锁处理。
在此,对所述事务的SQL语句的目标表进行加写锁处理。已被加写锁的所述目标表,在写锁被释放之前,其他事务无法对其进行写操作。
优选地,在步骤S102中,所述第一设备1还基于所述加读锁请求,对所述源表进行加读锁处理。
例如,若所述SQL语句既有目标表也有源表,还需基于所述加读锁请求,对所述源表进行加读锁处理。
优选地,所述第一设备1包括一个总节点及若干个子节点;其中,在步骤S102中,所述第一设备1通过所述总节点将所述加写锁请求分发至若干个所述子节点,对所述目标表进行加写锁处理。
例如,一个物理机器(例如服务器等)即为一个节点(node),参照图1,所述第一设备1可以是由运行在多个物理机器上的程序组成的一个组(group);在组(group)内将其中一个物理机器选为总节点,其余物理机器则为子节点。当获取SQL编译器发送的所述加写锁请求时,所述总节点负责将所述加写锁请求广播给组内的所有所述子节点,以对所述目标表进行加写锁处理。在优选的实施例中,在数据量大、并发度不高的场景下,批量处理所述加写锁请求。
在步骤S103中,所述第一设备1若所述加写锁处理成功,向所述SQL编译器发送所述目标表的待处理版本信息。
例如,每条CRUD操作的结果都是该条CRUD操作的目标表的一个新的版本,由于经过CRUD操作后,通常一个表会有多个版本。在此,当所述加写锁处理成功后,将所述目标表的待处理版本信息返回给SQL编译器,以确保后续SQL编译器对目标表的正确版本进行操作。
优选地,在步骤S103中,所述第一设备1若所述加读锁处理成功,向所述SQL编译器发送所述源表的待处理版本信息。
例如,若所述SQL语句既有目标表也有源表,还需将所述源表的待处理版本信息返回给SQL编译器,以确保后续SQL编译器对源表的正确版本进行操作。
优选地,所述方法还包括:所述第一设备1当所述目标表的版本数量等于或大于预定版本数量阈值,对所述目标表的若干个版本进行合并处理。
例如,对所述目标表进行若干次CRUD操作后,也会相应地产生若干个版本,随着时间的推移,所述目标表的版本数量在不断地增加。在优选的实施例中,当所述目标表的版本数量等于或大于预定版本数量阈值,对所述目标表的若干个版本进行合并处理,以得到一个新的版本,并清除之前的版本。
优选地,所述方法还包括:所述第一设备1当获取事务提交语句,设置新版本的所述目标表的状态为有效,解锁所述目标表;当获取事务回滚语句,设置新版本的所述目标表的状态为无效,解锁所述目标表。
例如,当获取DCL语句commit(事务提交),将所述事务对所述目标表的写操作全部标记为有效,同时释放所述事务占有的所有锁,即解锁了所述目标表;当获取DCL语句rollback(事务回滚),将所述事务对所述目标表的写操作全部标记为无效,同时释放所述事务占有的所有锁,即解锁了所述目标表。从而确保事务的原子性(Atomicity)与一致性(Consistency)。
优选地,所述方法还包括:所述第一设备1当获取事务提交语句或事务回滚语句,解锁所述源表。
例如,当获取commit语句或rollback语句,会释放所述事务占有的所有锁,既释放了所述目标表的写锁,也释放了所述源表的读锁。
图3示出根据本申请一个实施例的一种用于处理分布式事务的方法流程图。
该方法包括步骤S101’、步骤S102’、步骤S104’和步骤S103’。在此,所述步骤S101’、步骤S103’与图1中步骤S101、步骤S103内容相同或基本相同,为简明起见,不再赘述。
具体地,在步骤S102’中,所述第一设备1基于所述加写锁请求,通过所述总节点将所述加写锁请求分发至若干个所述子节点,对所述目标表进行加写锁处理;在步骤S104’中,所述第一设备1若所述总节点在预定时间内获取大于或等于预定数量的所述子节点关于所述加写锁请求的响应,则所述加写锁处理成功。
例如,所述总节点负责将所述加写锁请求广播给组内的所有所述子节点并等待所述子节点对所述加写锁请求的响应,只有当收到大于或等于预定数量的所述子节点关于所述加写锁请求的响应,所述加写锁处理才算成功。如果所述总节点在预定时间内没能收到足够多的所述子节点关于所述加写锁请求的响应,则加锁失败;此时,所述总节点可以有两种选择:一种是随机等待一段时间后继续发送所述加写锁请求,直到到达加锁尝试次数的阈值,如果此时仍未加锁成功则返回加锁失败信息;另一种是直接返回加锁失败信息。SQL编译器在收到加锁失败信息后,需要重试,即重新发送所述加写锁请求。
优选地,所述加写锁处理成功还包括:将新的加锁状态信息写入日志文件中;或所述总节点存储新的加锁状态信息。
例如,若得到大于或等于预定数量的所述子节点关于所述加写锁请求的响应,则所述加写锁处理成功,并保存新的加锁状态信息。在此,有两种保存新的加锁状态信息的方式,一种是将新的加锁状态信息写入日志文件中,另一种是所述总节点存储新的加锁状态信息。
优选地,所述方法还包括:所述第一设备1重启未响应所述加写锁请求的所述子节点,所述子节点从所述日志文件中读取最新的所述加锁状态信息;或重启未响应所述加写锁请求的所述子节点,所述总节点将最新的所述加锁状态信息发送至所述子节点。
例如,接上例,若所述子节点未响应(可能由于物理机器死机等原因所致)所述加写锁请求,需重启未响应所述加写锁请求的所述子节点,而且该子节点在重启后需要更新自己的状态信息,以便与组内的其他成员(包括所述总节点及所述子节点)保持一致。在此,所述子节点也有两种更新状态信息的方式,一种是所述子节点从所述日志文件中读取最新的所述加锁状态信息,另一种是所述总节点将最新的所述加锁状态信息发送至所述子节点。在另外的实施例中,若所述总节点无法响应,则从组内的其余所述子节点中重新选出新的总节点。
更优选地,所述重启未响应所述加写锁请求的所述子节点还包括:若所述未响应所述加写锁请求的所述子节点无法重启,则通过所述总节点将所述子节点的服务迁移到其他物理机器上,并在该物理机器上启动所述子节点的服务。
例如,接上例,还可能存在所述未响应所述加写锁请求的所述子节点无法重启的情况,此时,可通过所述总节点将所述子节点的服务迁移到其他物理机器上,并在该物理机器上启动所述子节点的服务。而后,该物理机器上的所述子节点可通过上述两种方式更新自己的状态信息,以便与组内的其他成员(包括所述总节点及所述子节点)保持一致。与现有技术相比,本申请通过重启未响应所述加写锁请求的所述子节点,或将所述子节点的服务迁移到其他物理机器上,而后更新所述子节点的加锁状态信息,从而进行有效的出错恢复并保证组内一致性。
图4示出根据本申请另一个实施例的一种用于处理分布式事务的方法流程图。
该方法包括步骤S101”、步骤S102”、步骤S107”和步骤S103”,步骤S212”和步骤S213”。在此,所述步骤S101”、步骤S103”与图1中步骤S101、步骤S103内容相同或基本相同,为简明起见,不再赘述。
具体地,在步骤S102”中,所述第一设备1基于所述加写锁请求,对所述目标表的部分进行加写锁处理;在步骤S107”中,所述第一设备1向第二设备2发送关于所述目标表的部分加写锁的请求。
例如,在数量小、并发度较高的场景下,SQL编译器可进一步细化锁的粒度,针对所述目标表中的某一部分向所述第一设备1发送加写锁请求。在此,所述第一设备1响应以表为单位的所述加写锁请求,并转发以表中某部分为单位的所述加写锁请求。具体地,向所述第二设备2发送关于所述目标表的部分加写锁的请求。
优选地,所述对所述目标表的部分进行加写锁处理包括:若所述目标表的全表已被加写锁,则忽略对所述目标表的部分进行加写锁处理;否则,对所述目标表的部分进行加写锁处理。
在此,若所述目标表的全表已被所述第一设备1加写锁,当前事务已经获取了所述目标表的全表的写锁,没必要再获取所述目标表的部分的写锁,所以此时无需对所述目标表的部分进行加写锁处理。
在步骤S212”中,所述第二设备2获取第一设备1发送的关于目标表的部分加写锁的请求;在步骤S213”中,所述第二设备2根据所述关于目标表的部分加写锁的请求,对所述目标表的部分进行加写锁处理。
在此,所述第二设备2根据所述第一设备1发送的关于目标表的部分加写锁的请求,对所述目标表的部分进行加写锁处理。
优选地,所述第二设备2包括一个总节点及若干个子节点;其中,在步骤S213”中,所述第二设备2通过所述总节点将所述关于目标表的部分加写锁的请求分发至若干个所述子节点,对所述目标表的部分进行加写锁处理。
例如,所述第二设备2也可以是由运行在多个物理机器上的程序组成的一个组(group);在组(group)内将其中一个物理机器选为总节点,其余物理机器则为子节点。当获取所述第一设备1发送的关于目标表的部分加写锁的请求时,所述总节点负责将所述关于目标表的部分加写锁的请求广播给组内的所有所述子节点,以对所述目标表的部分进行加写锁处理。
优选地,在步骤S213”中,所述第二设备2根据所述关于目标表的部分加写锁的请求,向所述第一设备查询所述目标表的全表是否已被加写锁;若所述目标表的全表未被加写锁,对所述目标表的部分进行加写锁处理。
例如,所述第二设备2获取所述关于目标表的部分加写锁的请求后,可向所述第一设备1查询所述目标表的全表是否已被加写锁;若所述目标表的全表已被所述第一设备1加写锁,则无需再对所述目标表的部分进行加写锁处理。
图5示出根据本申请另一个方面的一种用于处理分布式事务的第一设备1,其中,第一设备1包括第一装置101、第二装置102和第三装置103。
具体地,所述第一装置101获取SQL编译器发送的关于待处理的事务的目标表的加写锁请求,其中,所述事务包括若干条SQL语句;所述第二装置102基于所述加写锁请求,对所述目标表进行加写锁处理;所述第三装置103若所述加写锁处理成功,向所述SQL编译器发送所述目标表的待处理版本信息。
在此,所述第一设备1包括但不限于用户设备、网络设备、或用户设备与网络设备通过网络相集成所构成的设备。所述用户设备其包括但不限于任何一种可与用户通过触摸板进行人机交互的移动电子产品,例如智能手机、平板电脑等,所述移动电子产品可以采用任意操作系统,如android操作系统、iOS操作系统等。其中,所述网络设备包括一种能够按照事先设定或存储的指令,自动进行数值计算和信息处理的电子设备,其硬件包括但不限于微处理器、专用集成电路(ASIC)、可编程门阵列(FPGA)、数字处理器(DSP)、嵌入式设备等。所述网络设备其包括但不限于计算机、网络主机、单个网络服务器、多个网络服务器集或多个服务器构成的云;在此,云由基于云计算(Cloud Computing)的大量计算机或网络服务器构成,其中,云计算是分布式计算的一种,由一群松散耦合的计算机集组成的一个虚拟超级计算机。所述网络包括但不限于互联网、广域网、城域网、局域网、VPN网络、无线自组织网络(Ad Hoc网络)等。优选地,第一设备1还可以是运行于所述用户设备、网络设备、或用户设备与网络设备、网络设备、触摸终端或网络设备与触摸终端通过网络相集成所构成的设备上的脚本程序。当然,本领域技术人员应能理解上述第一设备1仅为举例,其他现有的或今后可能出现的第一设备1如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
所述第一装置101获取SQL编译器发送的关于待处理的事务的目标表的加写锁请求,其中,所述事务包括若干条SQL语句。
在此,SQL语言(结构化查询语言)的组成部分包括了DCL语言(数据库控制语言)。所述事务由DCL语句begin transaction(开始事务)开始,并由DCL语句commit(事务提交)或rollback(事务回滚)结束。在所述事务起始与终点处的DCL语句之间,包括若干条CRUD(Create、Retrieve、Update、Delete几个单词的首字母简写,主要被用在描述软件系统中数据库或者持久层的基本操作功能)SQL语句。所述目标表指的是所述SQL语句将要对其进行写操作的表。而且,在加锁过程中,所述事务中每条SQL语句对应的加写锁请求分别独立进行。
例如,首先由SQL编译器对所获取的SQL语句进行编译,得到该SQL语句涉及的表与执行计划,然后SQL编译器向所述第一设备1发送关于所述事务中所述SQL语句的目标表的加写锁请求,通过加锁的方式避免多个事务并发时产生冲突的问题,确保事务的隔离性(Isolation)。
优选地,所述第一装置101还获取SQL编译器发送的关于待处理的事务的源表的加读锁请求。
在此,所述源表指的是所述SQL语句将要对其进行读操作的表。在大多数应用场景中,所述SQL语句既有目标表也有源表,SQL编译器还需发送对所述SQL语句的源表的加读锁请求。而在部分应用场景中,所述SQL语句只有目标表没有源表,则SQL编译器无需发送对所述SQL语句的源表的加读锁请求。
所述第二装置102基于所述加写锁请求,对所述目标表进行加写锁处理。
在此,对所述事务的SQL语句的目标表进行加写锁处理。已被加写锁的所述目标表,在写锁被释放之前,其他事务无法对其进行写操作。
优选地,所述第二装置102还基于所述加读锁请求,对所述源表进行加读锁处理。
例如,若所述SQL语句既有目标表也有源表,还需基于所述加读锁请求,对所述源表进行加读锁处理。
优选地,所述第一设备1包括一个总节点及若干个子节点;其中,所述第二装置102通过所述总节点将所述加写锁请求分发至若干个所述子节点,对所述目标表进行加写锁处理。
例如,一个物理机器(例如服务器等)即为一个节点(node),参照图1,所述第一设备1可以是由运行在多个物理机器上的程序组成的一个组(group);在组(group)内将其中一个物理机器选为总节点,其余物理机器则为子节点。当获取SQL编译器发送的所述加写锁请求时,所述总节点负责将所述加写锁请求广播给组内的所有所述子节点,以对所述目标表进行加写锁处理。在优选的实施例中,在数据量大、并发度不高的场景下,批量处理所述加写锁请求。
所述第三装置103若所述加写锁处理成功,向所述SQL编译器发送所述目标表的待处理版本信息。
例如,每条CRUD操作的结果都是该条CRUD操作的目标表的一个新的版本,由于经过CRUD操作后,通常一个表会有多个版本。在此,当所述加写锁处理成功后,将所述目标表的待处理版本信息返回给SQL编译器,以确保后续SQL编译器对目标表的正确版本进行操作。
优选地,所述第三装置103若所述加读锁处理成功,向所述SQL编译器发送所述源表的待处理版本信息。
例如,若所述SQL语句既有目标表也有源表,还需将所述源表的待处理版本信息返回给SQL编译器,以确保后续SQL编译器对源表的正确版本进行操作。
优选地,所述第一设备1还包括第八装置(图中未示出);所述第八装置当所述目标表的版本数量等于或大于预定版本数量阈值,对所述目标表的若干个版本进行合并处理。
例如,对所述目标表进行若干次CRUD操作后,也会相应地产生若干个版本,随着时间的推移,所述目标表的版本数量在不断地增加。在优选的实施例中,当所述目标表的版本数量等于或大于预定版本数量阈值,对所述目标表的若干个版本进行合并处理,以得到一个新的版本,并清除之前的版本。
优选地,所述第一设备1还包括第九装置(图中未示出)或第十装置(图中未示出);所述第九装置当获取事务提交语句,设置新版本的所述目标表的状态为有效,解锁所述目标表;所述第十装置当获取事务回滚语句,设置新版本的所述目标表的状态为无效,解锁所述目标表。
例如,当获取DCL语句commit(事务提交),将所述事务对所述目标表的写操作全部标记为有效,同时释放所述事务占有的所有锁,即解锁了所述目标表;当获取DCL语句rollback(事务回滚),将所述事务对所述目标表的写操作全部标记为无效,同时释放所述事务占有的所有锁,即解锁了所述目标表。从而确保事务的原子性(Atomicity)与一致性(Consistency)。
优选地,所述第一设备1还包括第十一装置(图中未示出);所述第十一装置当获取事务提交语句或事务回滚语句,解锁所述源表。
例如,当获取commit语句或rollback语句,会释放所述事务占有的所有锁,既释放了所述目标表的写锁,也释放了所述源表的读锁。
图6示出根据本申请一个实施例的一种用于处理分布式事务的第一设备1,其中,第一设备1包括第一装置101’、第二装置102’、第四装置104’和第三装置103’。
在此,所述第一装置101’、第三装置103’与图4中第一装置101、第三装置103内容相同或基本相同,为简明起见,不再赘述。
具体地,所述第二装置102’基于所述加写锁请求,通过所述总节点将所述加写锁请求分发至若干个所述子节点,对所述目标表进行加写锁处理;所述第四装置104’若所述总节点在预定时间内获取大于或等于预定数量的所述子节点关于所述加写锁请求的响应,则所述加写锁处理成功。
例如,所述总节点负责将所述加写锁请求广播给组内的所有所述子节点并等待所述子节点对所述加写锁请求的响应,只有当收到大于或等于预定数量的所述子节点关于所述加写锁请求的响应,所述加写锁处理才算成功。如果所述总节点在预定时间内没能收到足够多的所述子节点关于所述加写锁请求的响应,则加锁失败;此时,所述总节点可以有两种选择:一种是随机等待一段时间后继续发送所述加写锁请求,直到到达加锁尝试次数的阈值,如果此时仍未加锁成功则返回加锁失败信息;另一种是直接返回加锁失败信息。SQL编译器在收到加锁失败信息后,需要重试,即重新发送所述加写锁请求。
优选地,所述加写锁处理成功还包括:将新的加锁状态信息写入日志文件中;或所述总节点存储新的加锁状态信息。
例如,若得到大于或等于预定数量的所述子节点关于所述加写锁请求的响应,则所述加写锁处理成功,并保存新的加锁状态信息。在此,有两种保存新的加锁状态信息的方式,一种是将新的加锁状态信息写入日志文件中,另一种是所述总节点存储新的加锁状态信息。
优选地,所述第一设备1还包括第五装置(图中未示出)和第六装置(图中未示出);所述第五装置重启未响应所述加写锁请求的所述子节点,所述子节点从所述日志文件中读取最新的所述加锁状态信息;或所述第六装置重启未响应所述加写锁请求的所述子节点,所述总节点将最新的所述加锁状态信息发送至所述子节点。
例如,接上例,若所述子节点未响应(可能由于物理机器死机等原因所致)所述加写锁请求,需重启未响应所述加写锁请求的所述子节点,而且该子节点在重启后需要更新自己的状态信息,以便与组内的其他成员(包括所述总节点及所述子节点)保持一致。在此,所述子节点也有两种更新状态信息的方式,一种是所述子节点从所述日志文件中读取最新的所述加锁状态信息,另一种是所述总节点将最新的所述加锁状态信息发送至所述子节点。在另外的实施例中,若所述总节点无法响应,则从组内的其余所述子节点中重新选出新的总节点。
更优选地,所述重启未响应所述加写锁请求的所述子节点还包括:若所述未响应所述加写锁请求的所述子节点无法重启,则通过所述总节点将所述子节点的服务迁移到其他物理机器上,并在该物理机器上启动所述子节点的服务。
例如,接上例,还可能存在所述未响应所述加写锁请求的所述子节点无法重启的情况,此时,可通过所述总节点将所述子节点的服务迁移到其他物理机器上,并在该物理机器上启动所述子节点的服务。而后,该物理机器上的所述子节点可通过上述两种方式更新自己的状态信息,以便与组内的其他成员(包括所述总节点及所述子节点)保持一致。与现有技术相比,本申请通过重启未响应所述加写锁请求的所述子节点,或将所述子节点的服务迁移到其他物理机器上,而后更新所述子节点的加锁状态信息,从而进行有效的出错恢复并保证组内一致性。
图7示出根据本申请另一个实施例的一种用于处理分布式事务的第一设备1与第二设备2,其中,第一设备1包括第一装置101”、第二装置102”、第七装置107”和第三装置103”,第二设备2包括第十二装置212”和第十三装置213”。
在此,所述第一装置101”、第三装置103”与图4中第一装置101、第三装置103内容相同或基本相同,为简明起见,不再赘述。
具体地,所述第二装置102”基于所述加写锁请求,对所述目标表的部分进行加写锁处理;所述第七装置107”向第二设备发送关于所述目标表的部分加写锁的请求。
例如,在数量小、并发度较高的场景下,SQL编译器可进一步细化锁的粒度,针对所述目标表中的某一部分向所述第一设备1发送加写锁请求。在此,所述第一设备1响应以表为单位的所述加写锁请求,并转发以表中某部分为单位的所述加写锁请求。具体地,向所述第二设备2发送关于所述目标表的部分加写锁的请求。
优选地,所述对所述目标表的部分进行加写锁处理包括:若所述目标表的全表已被加写锁,则忽略对所述目标表的部分进行加写锁处理;否则,对所述目标表的部分进行加写锁处理。
在此,若所述目标表的全表已被所述第一设备1加写锁,当前事务已经获取了所述目标表的全表的写锁,没必要再获取所述目标表的部分的写锁,所以此时无需对所述目标表的部分进行加写锁处理。
所述第十二装置212”获取第一设备1发送的关于目标表的部分加写锁的请求;所述第十三装置213”根据所述关于目标表的部分加写锁的请求,对所述目标表的部分进行加写锁处理。
在此,所述第二设备2根据所述第一设备1发送的关于目标表的部分加写锁的请求,对所述目标表的部分进行加写锁处理。
优选地,所述第二设备2包括一个总节点及若干个子节点;其中,所述第十三装置213”通过所述总节点将所述关于目标表的部分加写锁的请求分发至若干个所述子节点,对所述目标表的部分进行加写锁处理。
例如,所述第二设备2也可以是由运行在多个物理机器上的程序组成的一个组(group);在组(group)内将其中一个物理机器选为总节点,其余物理机器则为子节点。当获取所述第一设备1发送的关于目标表的部分加写锁的请求时,所述总节点负责将所述关于目标表的部分加写锁的请求广播给组内的所有所述子节点,以对所述目标表的部分进行加写锁处理。
优选地,所述第十三装置213”根据所述关于目标表的部分加写锁的请求,向所述第一设备查询所述目标表的全表是否已被加写锁;若所述目标表的全表未被加写锁,对所述目标表的部分进行加写锁处理。
例如,所述第二设备2获取所述关于目标表的部分加写锁的请求后,可向所述第一设备1查询所述目标表的全表是否已被加写锁;若所述目标表的全表已被所述第一设备1加写锁,则无需再对所述目标表的部分进行加写锁处理。
优选地,本申请还提供了一种处理事务的系统,其中,该系统包括如上所述的第一设备1及如上所述的第二设备2。
例如,在数量小、并发度较高的场景下,通过所述第一设备1及所述第二设备2组成的系统对所述事务的目标表进行加写锁处理;其中,所述第一设备1响应以表为单位的加写锁请求,并向所述第二设备2转发以表中某部分为单位的加写锁请求,由所述第二设备2对所述目标表的部分进行加写锁处理。
与现有技术相比,在分布式系统中,本申请的第一设备是由多个节点组成的一个组,所述第一设备获取SQL编译器发送的关于待处理的事务的目标表的加写锁请求,并基于所述加写锁请求,对所述目标表进行加写锁处理,从而避免多个事务并发时的冲突问题,确保事务的隔离性,若所述加写锁处理成功,向所述SQL编译器发送所述目标表的待处理版本信息,以确保后续SQL编译器对目标表的正确版本进行操作。进一步地,本申请通过重启未响应所述加写锁请求的所述子节点,或将所述子节点的服务迁移到其他物理机器上,而后更新所述子节点的加锁状态信息,从而进行有效的出错恢复并保证组内一致性。进一步地,在数量小、并发度较高的场景下,本申请通过所述第一设备及所述第二设备组成的系统对所述事务的目标表进行加写锁处理,由所述第二设备对所述目标表的部分进行加写锁处理,从而提高系统的效率。
需要注意的是,本申请可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(ASIC)、通用目的计算机或任何其他类似硬件设备来实现。在一个实施例中,本申请的软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,本申请的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,RAM存储器,磁或光驱动器或软磁盘及类似设备。另外,本申请的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。
另外,本申请的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本申请的方法和/或技术方案。而调用本申请的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过广播或其他信号承载媒体中的数据流而被传输,和/或被存储在根据所述程序指令运行的计算机设备的工作存储器中。在此,根据本申请的一个实施例包括一个装置,该装置包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该装置运行基于前述根据本申请的多个实施例的方法和/或技术方案。
对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其他的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。
Claims (29)
1.一种在第一设备端处理分布式事务的方法,其中,该方法包括:
a获取SQL编译器发送的关于待处理的事务的目标表的加写锁请求,其中,所述事务包括若干条SQL语句;
b基于所述加写锁请求,对所述目标表进行加写锁处理;
c若所述加写锁处理成功,向所述SQL编译器发送所述目标表的待处理版本信息。
2.根据权利要求1所述的方法,其中,所述第一设备包括一个总节点及若干个子节点;
其中,所述步骤b包括:
通过所述总节点将所述加写锁请求分发至若干个所述子节点,对所述目标表进行加写锁处理。
3.根据权利要求2所述的方法,其中,所述方法还包括:
若所述总节点在预定时间内获取大于或等于预定数量的所述子节点关于所述加写锁请求的响应,则所述加写锁处理成功。
4.根据权利要求3所述的方法,其中,所述加写锁处理成功还包括:
将新的加锁状态信息写入日志文件中;或
所述总节点存储新的加锁状态信息。
5.根据权利要求4所述的方法,其中,所述方法还包括:
重启未响应所述加写锁请求的所述子节点,所述子节点从所述日志文件中读取最新的所述加锁状态信息;或
重启未响应所述加写锁请求的所述子节点,所述总节点将最新的所述加锁状态信息发送至所述子节点。
6.根据权利要求5所述的方法,其中,所述重启未响应所述加写锁请求的所述子节点还包括:
若所述未响应所述加写锁请求的所述子节点无法重启,则通过所述总节点将所述子节点的服务迁移到其他物理机器上,并在该物理机器上启动所述子节点的服务。
7.根据权利要求1所述的方法,其中,所述步骤b包括:
对所述目标表的部分进行加写锁处理;
其中,所述方法还包括:
向第二设备发送关于所述目标表的部分加写锁的请求。
8.根据权利要求7所述的方法,其中,所述对所述目标表的部分进行加写锁处理包括:
若所述目标表的全表已被加写锁,则忽略对所述目标表的部分进行加写锁处理;否则,对所述目标表的部分进行加写锁处理。
9.根据权利要求1所述的方法,其中,所述方法还包括:
当所述目标表的版本数量等于或大于预定版本数量阈值,对所述目标表的若干个版本进行合并处理。
10.根据权利要求1所述的方法,其中,所述方法还包括:
当获取事务提交语句,设置新版本的所述目标表的状态为有效,解锁所述目标表;或
当获取事务回滚语句,设置新版本的所述目标表的状态为无效,解锁所述目标表。
11.根据权利要求1所述的方法,其中,所述步骤a还包括:
获取SQL编译器发送的关于待处理的事务的源表的加读锁请求;
其中,所述步骤b还包括:
基于所述加读锁请求,对所述源表进行加读锁处理;
其中,所述步骤c还包括:
若所述加读锁处理成功,向所述SQL编译器发送所述源表的待处理版本信息;
其中,所述方法还包括:
当获取事务提交语句或事务回滚语句,解锁所述源表。
12.一种在第二设备端处理分布式事务的方法,其中,该方法包括:
A获取第一设备发送的关于目标表的部分加写锁的请求;
B根据所述关于目标表的部分加写锁的请求,对所述目标表的部分进行加写锁处理。
13.根据权利要求12所述的方法,其中,所述步骤B包括:
根据所述关于目标表的部分加写锁的请求,向所述第一设备查询所述目标表的全表是否已被加写锁;
若所述目标表的全表未被加写锁,对所述目标表的部分进行加写锁处理。
14.根据权利要求12所述的方法,其中,所述第二设备包括一个总节点及若干个子节点;
其中,所述步骤B包括:
通过所述总节点将所述关于目标表的部分加写锁的请求分发至若干个所述子节点,对所述目标表的部分进行加写锁处理。
15.一种用于处理分布式事务的第一设备,其中,该设备包括:
第一装置,用于获取SQL编译器发送的关于待处理的事务的目标表的加写锁请求,其中,所述事务包括若干条SQL语句;
第二装置,用于基于所述加写锁请求,对所述目标表进行加写锁处理;
第三装置,用于若所述加写锁处理成功,向所述SQL编译器发送所述目标表的待处理版本信息。
16.根据权利要求15所述的设备,其中,所述设备包括一个总节点及若干个子节点;
其中,所述第二装置用于:
通过所述总节点将所述加写锁请求分发至若干个所述子节点,对所述目标表进行加写锁处理。
17.根据权利要求16所述的设备,其中,所述设备还包括:
第四装置,用于若所述总节点在预定时间内获取大于或等于预定数量的所述子节点关于所述加写锁请求的响应,则所述加写锁处理成功。
18.根据权利要求17所述的设备,其中,所述加写锁处理成功还包括:
将新的加锁状态信息写入日志文件中;或
所述总节点存储新的加锁状态信息。
19.根据权利要求18所述的设备,其中,所述设备还包括:
第五装置,用于重启未响应所述加写锁请求的所述子节点,所述子节点从所述日志文件中读取最新的所述加锁状态信息;或
第六装置,用于重启未响应所述加写锁请求的所述子节点,所述总节点将最新的所述加锁状态信息发送至所述子节点。
20.根据权利要求19所述的设备,其中,所述重启未响应所述加写锁请求的所述子节点还包括:
若所述未响应所述加写锁请求的所述子节点无法重启,则通过所述总节点将所述子节点的服务迁移到其他物理机器上,并在该物理机器上启动所述子节点的服务。
21.根据权利要求15所述的设备,其中,所述第二装置用于:
对所述目标表的部分进行加写锁处理;
其中,所述设备还包括:
第七装置,用于向第二设备发送关于所述目标表的部分加写锁的请求。
22.根据权利要求21所述的设备,其中,所述对所述目标表的部分进行加写锁处理包括:
若所述目标表的全表已被加写锁,则忽略对所述目标表的部分进行加写锁处理;否则,对所述目标表的部分进行加写锁处理。
23.根据权利要求15所述的设备,其中,所述设备还包括:
第八装置,用于当所述目标表的版本数量等于或大于预定版本数量阈值,对所述目标表的若干个版本进行合并处理。
24.根据权利要求15所述的设备,其中,所述设备还包括:
第九装置,用于当获取事务提交语句,设置新版本的所述目标表的状态为有效,解锁所述目标表;或
第十装置,用于当获取事务回滚语句,设置新版本的所述目标表的状态为无效,解锁所述目标表。
25.根据权利要求15所述的设备,其中,所述第一装置还用于:
获取SQL编译器发送的关于待处理的事务的源表的加读锁请求;
其中,所述第二装置还用于:
基于所述加读锁请求,对所述源表进行加读锁处理;
其中,所述第三装置还用于:
若所述加读锁处理成功,向所述SQL编译器发送所述源表的待处理版本信息;
其中,所述设备还包括:
第十一装置,用于当获取事务提交语句或事务回滚语句,解锁所述源表。
26.一种用于处理分布式事务的第二设备,其中,该设备包括:
第十二装置,用于获取第一设备发送的关于目标表的部分加写锁的请求;
第十三装置,用于根据所述关于目标表的部分加写锁的请求,对所述目标表的部分进行加写锁处理。
27.根据权利要求26所述的设备,其中,所述第十三装置用于:
根据所述关于目标表的部分加写锁的请求,向所述第一设备查询所述目标表的全表是否已被加写锁;
若所述目标表的全表未被加写锁,对所述目标表的部分进行加写锁处理。
28.根据权利要求26所述的设备,其中,所述设备包括一个总节点及若干个子节点;
其中,所述第十三装置用于:
通过所述总节点将所述关于目标表的部分加写锁的请求分发至若干个所述子节点,对所述目标表的部分进行加写锁处理。
29.一种处理分布式事务的系统,其中,该系统包括如权利要求21或22所述的第一设备及如权利要求26至28中任一项所述的第二设备。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610254762.3A CN105955804B (zh) | 2016-04-22 | 2016-04-22 | 一种处理分布式事务的方法与设备 |
PCT/CN2017/080846 WO2017181931A1 (zh) | 2016-04-22 | 2017-04-18 | 一种处理分布式事务的方法与设备 |
US15/495,399 US11023446B2 (en) | 2016-04-22 | 2017-04-24 | Method and device for processing distributed transaction |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610254762.3A CN105955804B (zh) | 2016-04-22 | 2016-04-22 | 一种处理分布式事务的方法与设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105955804A true CN105955804A (zh) | 2016-09-21 |
CN105955804B CN105955804B (zh) | 2018-06-05 |
Family
ID=56915131
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610254762.3A Active CN105955804B (zh) | 2016-04-22 | 2016-04-22 | 一种处理分布式事务的方法与设备 |
Country Status (3)
Country | Link |
---|---|
US (1) | US11023446B2 (zh) |
CN (1) | CN105955804B (zh) |
WO (1) | WO2017181931A1 (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2017181931A1 (zh) * | 2016-04-22 | 2017-10-26 | 星环信息科技(上海)有限公司 | 一种处理分布式事务的方法与设备 |
CN107977376A (zh) * | 2016-10-24 | 2018-05-01 | 腾讯科技(深圳)有限公司 | 分布式数据库系统及事务处理方法 |
CN109800062A (zh) * | 2018-12-25 | 2019-05-24 | 星环信息科技(上海)有限公司 | 一种分布式数据库事务处理系统 |
CN111444199A (zh) * | 2019-01-17 | 2020-07-24 | 阿里巴巴集团控股有限公司 | 数据处理方法及装置、存储介质和处理器 |
CN113268483A (zh) * | 2021-05-24 | 2021-08-17 | 北京金山云网络技术有限公司 | 请求处理方法和装置、电子设备和存储介质 |
CN113836548A (zh) * | 2021-09-01 | 2021-12-24 | 广州大学 | 智能合约的数据一致性保障方法、系统、设备及存储介质 |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109828847B (zh) * | 2019-01-25 | 2023-09-01 | 平安科技(深圳)有限公司 | 基于区块链的锁处理方法、装置、计算机设备及存储介质 |
GB2582590A (en) * | 2019-03-26 | 2020-09-30 | Ge Aviat Systems Ltd | Method and system for fusing disparate industrial asset event information |
CN111694851B (zh) * | 2020-05-28 | 2023-06-16 | 平安科技(深圳)有限公司 | 分布式事务的交易处理方法及相关设备 |
CN112039970B (zh) * | 2020-08-25 | 2023-04-18 | 北京思特奇信息技术股份有限公司 | 一种分布式业务锁服务方法、服务端、系统及存储介质 |
CN112380184A (zh) * | 2020-11-20 | 2021-02-19 | 北京百度网讯科技有限公司 | 事务处理方法、装置、电子设备及可读存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102122288A (zh) * | 2010-12-21 | 2011-07-13 | 北京高森明晨信息科技有限公司 | 一种并发控制的方法及系统 |
CN102831156A (zh) * | 2012-06-29 | 2012-12-19 | 浙江大学 | 一种云计算平台上的分布式事务处理方法 |
WO2013091195A1 (zh) * | 2011-12-21 | 2013-06-27 | 华为技术有限公司 | 一种分布式系统中处理事务的方法、相关设备及系统 |
CN103677771A (zh) * | 2012-09-06 | 2014-03-26 | 阿里巴巴集团控股有限公司 | 一种并发事务的处理方法和装置 |
CN104793988A (zh) * | 2014-01-20 | 2015-07-22 | 阿里巴巴集团控股有限公司 | 跨数据库分布式事务的实现方法和装置 |
CN105162878A (zh) * | 2015-09-24 | 2015-12-16 | 网宿科技股份有限公司 | 基于分布式存储的文件分发系统及方法 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6339772B1 (en) * | 1999-07-06 | 2002-01-15 | Compaq Computer Corporation | System and method for performing database operations on a continuous stream of tuples |
CN102375955A (zh) * | 2010-08-17 | 2012-03-14 | 伊姆西公司 | 网络文件系统联合命名空间内文件加锁的系统与方法 |
CN103365852A (zh) * | 2012-03-28 | 2013-10-23 | 天津书生软件技术有限公司 | 一种文档库系统中的并发控制方法及系统 |
CN113835901A (zh) * | 2013-10-15 | 2021-12-24 | 北京奥星贝斯科技有限公司 | 读锁操作方法、写锁操作方法及系统 |
CN103942269B (zh) * | 2014-03-26 | 2017-05-31 | 北京京东尚科信息技术有限公司 | 对文件系统进行操作的方法和装置 |
US10108653B2 (en) * | 2015-03-27 | 2018-10-23 | International Business Machines Corporation | Concurrent reads and inserts into a data structure without latching or waiting by readers |
CN105955804B (zh) * | 2016-04-22 | 2018-06-05 | 星环信息科技(上海)有限公司 | 一种处理分布式事务的方法与设备 |
-
2016
- 2016-04-22 CN CN201610254762.3A patent/CN105955804B/zh active Active
-
2017
- 2017-04-18 WO PCT/CN2017/080846 patent/WO2017181931A1/zh active Application Filing
- 2017-04-24 US US15/495,399 patent/US11023446B2/en active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102122288A (zh) * | 2010-12-21 | 2011-07-13 | 北京高森明晨信息科技有限公司 | 一种并发控制的方法及系统 |
WO2013091195A1 (zh) * | 2011-12-21 | 2013-06-27 | 华为技术有限公司 | 一种分布式系统中处理事务的方法、相关设备及系统 |
CN102831156A (zh) * | 2012-06-29 | 2012-12-19 | 浙江大学 | 一种云计算平台上的分布式事务处理方法 |
CN103677771A (zh) * | 2012-09-06 | 2014-03-26 | 阿里巴巴集团控股有限公司 | 一种并发事务的处理方法和装置 |
CN104793988A (zh) * | 2014-01-20 | 2015-07-22 | 阿里巴巴集团控股有限公司 | 跨数据库分布式事务的实现方法和装置 |
CN105162878A (zh) * | 2015-09-24 | 2015-12-16 | 网宿科技股份有限公司 | 基于分布式存储的文件分发系统及方法 |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2017181931A1 (zh) * | 2016-04-22 | 2017-10-26 | 星环信息科技(上海)有限公司 | 一种处理分布式事务的方法与设备 |
US11023446B2 (en) | 2016-04-22 | 2021-06-01 | Transwarp Technology (Shanghai) Co., Ltd. | Method and device for processing distributed transaction |
CN107977376A (zh) * | 2016-10-24 | 2018-05-01 | 腾讯科技(深圳)有限公司 | 分布式数据库系统及事务处理方法 |
CN107977376B (zh) * | 2016-10-24 | 2020-07-07 | 腾讯科技(深圳)有限公司 | 分布式数据库系统及事务处理方法 |
US11243920B2 (en) | 2016-10-24 | 2022-02-08 | Tencent Technology (Shenzhen) Company Limited | Distributed database system, transaction processing method, lock server and storage medium |
CN109800062A (zh) * | 2018-12-25 | 2019-05-24 | 星环信息科技(上海)有限公司 | 一种分布式数据库事务处理系统 |
CN111444199A (zh) * | 2019-01-17 | 2020-07-24 | 阿里巴巴集团控股有限公司 | 数据处理方法及装置、存储介质和处理器 |
CN111444199B (zh) * | 2019-01-17 | 2023-11-14 | 阿里巴巴集团控股有限公司 | 数据处理方法及装置、存储介质和处理器 |
CN113268483A (zh) * | 2021-05-24 | 2021-08-17 | 北京金山云网络技术有限公司 | 请求处理方法和装置、电子设备和存储介质 |
CN113836548A (zh) * | 2021-09-01 | 2021-12-24 | 广州大学 | 智能合约的数据一致性保障方法、系统、设备及存储介质 |
CN113836548B (zh) * | 2021-09-01 | 2023-07-25 | 广州大学 | 智能合约的数据一致性保障方法、系统、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
US20170308566A1 (en) | 2017-10-26 |
WO2017181931A1 (zh) | 2017-10-26 |
US11023446B2 (en) | 2021-06-01 |
CN105955804B (zh) | 2018-06-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105955804A (zh) | 一种处理分布式事务的方法与设备 | |
Sovran et al. | Transactional storage for geo-replicated systems | |
US11132350B2 (en) | Replicable differential store data structure | |
JP6564026B2 (ja) | マルチテナントアプリケーションサーバ環境におけるトランザクション回復のためのシステムおよび方法 | |
CN101133397B (zh) | 用于直连客户端服务器系统中的在线恢复的操作日志记录 | |
TW409215B (en) | Parallel file system and method for multiple node file access | |
CN102037463B (zh) | 使用全局确认的提交进行分布式事务的基于日志的复制 | |
US8170997B2 (en) | Unbundled storage transaction services | |
CN105408895A (zh) | 用于多个访问方法的无锁存、日志结构化的存储 | |
EP3356936B1 (en) | Network attached memory using selective resource migration | |
CN107077495A (zh) | 数据库管理系统中的高性能事务 | |
US20100076940A1 (en) | Method for providing maximal concurrency in a tree structure | |
Buragohain et al. | A1: A distributed in-memory graph database | |
Bernstein et al. | Geo-distribution of actor-based services | |
WO2011048268A1 (en) | Saving snapshot of a knowledge base without blocking | |
CN104423982A (zh) | 请求的处理方法和处理设备 | |
CN114827165A (zh) | 对多个交易进行分组的方法和区块链节点 | |
Margara et al. | A model and survey of distributed data-intensive systems | |
CN100568245C (zh) | 工作流数据的持久化处理方法、装置及工作流系统 | |
CN106959989A (zh) | 主备数据库的同步方法及装置 | |
Setty et al. | Realizing the {Fault-Tolerance} Promise of Cloud Storage Using Locks with Intent | |
Lesani et al. | Semantics-preserving sharing actors | |
Ellen et al. | Universal constructions that ensure disjoint-access parallelism and wait-freedom | |
Siakavaras et al. | RCU‐HTM: A generic synchronization technique for highly efficient concurrent search trees | |
Kalin et al. | Clojure for number crunching on multicore machines |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP03 | Change of name, title or address | ||
CP03 | Change of name, title or address |
Address after: 200233 11-12 / F, building B, 88 Hongcao Road, Xuhui District, Shanghai Patentee after: Star link information technology (Shanghai) Co.,Ltd. Address before: Room 1902, 19th floor, block a, 391 Guiping Road, Xuhui District, Shanghai 200233 Patentee before: TRANSWARP TECHNOLOGY (SHANGHAI) Co.,Ltd. |