CN117453750B - 数据处理方法、装置、电子设备及存储介质 - Google Patents
数据处理方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN117453750B CN117453750B CN202311773689.7A CN202311773689A CN117453750B CN 117453750 B CN117453750 B CN 117453750B CN 202311773689 A CN202311773689 A CN 202311773689A CN 117453750 B CN117453750 B CN 117453750B
- Authority
- CN
- China
- Prior art keywords
- commit
- storage node
- statement
- request
- client
- 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
- 238000003672 processing method Methods 0.000 title claims abstract description 20
- 230000004044 response Effects 0.000 claims abstract description 86
- 238000000034 method Methods 0.000 claims abstract description 41
- 238000004590 computer program Methods 0.000 claims description 13
- 230000001960 triggered effect Effects 0.000 claims description 5
- 230000008569 process Effects 0.000 abstract description 13
- 238000010586 diagram Methods 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 230000002093 peripheral effect Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000005096 rolling process Methods 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/24—Querying
- G06F16/245—Query 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/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/242—Query formulation
- G06F16/2433—Query languages
- G06F16/2445—Data retrieval commands; View definitions
-
- 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
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Mathematical Physics (AREA)
- Computer Security & Cryptography (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请实施例提供了一种数据处理方法、装置、电子设备及存储介质,涉及数据库技术领域。该方法包括:接收客户端发送的针对待处理事务的至少一条执行语句;若检测到执行语句中写语句的数量符合预设数量,则向第一存储节点发送至少一条预提交请求,以供第一存储节点执行至少一条预提交请求;向客户端返回第一响应指令;若接收到客户端发送的提交语句,且所发送的至少一条预提交请求均已完成,则向第一存储节点发送提交语句中的提交请求,以供第一存储节点提交待处理事务。本申请实施例降低了对计算节点的内存的消耗,使得分布式系统能够对大事务进行有效地处理。
Description
技术领域
本申请涉及数据库技术领域,具体而言,本申请涉及一种数据处理方法、装置、电子设备及存储介质。
背景技术
面对日益增长的海量数据,分布式系统的应用越来越广泛。在分布式系统中一次操作需要由多个服务协同完成,这种由不同的服务之间通过网络协议共同完成的事务称为分布式事务。
目前,分布式事务的执行通常采用两阶段提交方法,该方法包括:计算节点将事务中的每条写语句产生的数据以KV(Key Value)键值对的方式缓存到内存中,并通过向存储节点发送RPC(Remote Procedure Call,远程过程调用)请求为这些缓存的Key进行加锁操作;当计算节点接收到客户端发送来的COMMIT(提交)语句后依次向存储节点发送prewrite(预提交)和commit(提交)两个请求来提交事务,从而将数据持久化到存储节点。
现有的分布式事务两阶段提交方法在处理大事务时,造成计算节点消耗大量的内存,严重影响数据库处理大事务的能力,甚至会产生OOM(Out of Memory,内存不足)错误。
发明内容
本申请实施例提供了一种数据处理方法、装置、电子设备及存储介质,可以解决现有技术中分布式事务两阶段提交方法无法有效处理大事务的问题。
所述技术方案如下:
根据本申请实施例的一个方面,提供了一种数据处理方法,应用于计算节点,该方法包括:
接收客户端发送的针对待处理事务的至少一条执行语句;
若检测到执行语句中写语句的数量符合预设数量,则向第一存储节点发送至少一条预提交请求,以供所述第一存储节点执行所述至少一条预提交请求;向所述客户端返回第一响应指令;
若接收到客户端发送的提交语句,且所发送的至少一条预提交请求均已完成,则向第一存储节点发送所述提交语句中的提交请求,以供所述第一存储节点提交所述待处理事务。
可选地,所述若检测到执行语句中写语句的数量符合预设数量,则向第一存储节点发送至少一条预提交请求,以供所述第一存储节点执行所述至少一条预提交请求,包括:
每检测到一条写语句,向所述第一存储节点发送所述写语句对应的第一预提交请求,以指示所述第一存储节点执行如下操作:执行所述第一预提交请求,向所述计算节点返回第二响应指令,所述第二响应指令是所述第一存储节点开始副本同步时触发的;
所述向所述客户端返回第一响应指令,包括:
接收所述第一存储节点返回的第二响应指令;
释放所述写语句对应的至少一个KV键值对的内存;
向所述客户端返回第一响应指令。
可选地,所述执行所述第一预提交请求,向所述计算节点返回第二响应指令,包括:
对与所述写语句相关的数据进行加锁操作;
向至少一个第二存储节点分别发送副本同步指令,并向所述计算节点返回第二响应指令。
可选地,所述若接收到客户端发送的提交语句,且所发送的至少一条预提交请求均已完成,则向第一存储节点发送所述提交语句中的提交请求,以供所述第一存储节点提交所述待处理事务,包括:
接收所述客户端发送的提交语句;
向所述第一存储节点发送所述提交语句中的提交请求,以指示所述第一存储节点执行如下操作:
若检测出所述至少一条第一预提交请求均已执行完成时,提交所述待处理事务。
可选地,所述若检测到执行语句中写语句的数量符合预设数量,则向第一存储节点发送至少一条预提交请求,以供所述第一存储节点执行所述至少一条预提交请求,包括:
每检测到一条写语句,对所述写语句对应的至少一个KV键值对进行缓存,向所述第一存储节点发送加锁请求,以供所述第一存储节点对与所述写语句相关的数据进行加锁操作,直至接收到的写语句数据符合预设数量;
若检测到接收到的写语句符合预设数量,向所述第一存储节点发送所述预设数量的写语句对应的第二预提交请求,以供所述第一存储节点执行所述第二预提交请求;
释放所述至少一个KV键值对对应的内存。
可选地,所述向所述第一存储节点发送所述预设数量的写语句对应的第二预提交请求,以供所述第一存储节点执行所述第二预提交请求,包括:
向所述第一存储节点发送所述第二预提交请求,以指示所述第一存储节点执行如下操作:
向至少一个第二存储节点分别发送副本同步指令;
当所述至少一个第二存储节点均完成同步时,向所述计算节点返回针对所述第二预提交请求的预提交完成指令。
可选地,所述若接收到客户端发送的提交语句,且所发送的至少一条预提交请求均已完成,则向第一存储节点发送所述提交语句中的提交请求,以供所述第一存储节点提交所述待处理事务,包括:
接收所述客户端发送的提交语句;
若检测到存在未被预提交的KV键值对,则将所述未被预提交的KV键值对对应的第二预提交请求发送至所述第一存储节点;
若基于所述预提交完成指令确定出所发送的至少一条第二预提交请求均已完成,则将所述提交语句中的提交请求发送至所述第一存储节点,以供所述第一存储节点提交所述待处理事务。
根据本申请实施例的另一个方面,提供了一种数据处理装置,该装置包括:
语句接收模块,用于接收客户端发送的针对待处理事务的至少一条执行语句;
预提交执行模块,用于若检测到执行语句中写语句的数量符合预设数量,则向第一存储节点发送至少一条预提交请求,以供所述第一存储节点执行所述至少一条预提交请求;向所述客户端返回第一响应指令;
提交执行模块,用于若接收到客户端发送的提交语句,且所发送的至少一条预提交请求均已完成,则向第一存储节点发送所述提交语句中的提交请求,以供所述第一存储节点提交所述待处理事务。
根据本申请实施例的另一个方面,提供了一种电子设备,该电子设备包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行程序时实现上述任一种数据处理方法的步骤。
根据本申请实施例的再一个方面,提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种数据处理方法的步骤。
本申请实施例提供的技术方案带来的有益效果是:
本申请实施例中,计算节点是在检测到接收到的写语句达到预设数量,就会向存储节点发送预提交请求,也就是说计算节点只需要对少量写语句或者不需要对写语句进行缓存操作,降低了对计算节点的内存的消耗,使得分布式系统能够对大事务进行有效地处理。
进一步地,本申请实施例中,计算节点是在检测到接收到的写语句达到预设数量,向存储节点发送预提交请求;在接收到提交语句,且检测所有预提交完成之后,向存储节点发送提交请求。可见,本申请实施例中计算节点向存储节点发送预提交请求和发送提交请求的触发条件是不同的,通过在不同的触发条件下分别发送预提交请求和提交请求,使得可以分开处理预提交请求和提交请求,从而避免了提交语句中集中进行RPC和IO操作带来的资源瓶颈,提高了系统的稳定性。
进一步地,本申请实施例中计算节点是在接收到客户端发送的提交语句之前,可以向客户端返回针对预提交请求的第一响应指令,从而能够更快的响应客户端,减少了系统的响应时间,提高了系统的性能。同时,计算节点在接收到提交语句之后,还会对检查待处理事务的预提交操作是否完成,从而保证了待处理事务的数据一致性。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对本申请实施例描述中所需要使用的附图作简单地介绍。
图1为本申请实施例提供的一种数据处理方法的流程示意图;
图2为本申请实施例提供的另一种数据处理方法的流程示意图;
图3为本申请实施例提供的又一种数据处理方法的流程示意图;
图4为本申请实施例提供的一种数据处理装置的结构示意图;
图5为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
下面结合本申请中的附图描述本申请的实施例。应理解,下面结合附图所阐述的实施方式,是用于解释本申请实施例的技术方案的示例性描述,对本申请实施例的技术方案不构成限制。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式 “一”、“一个”和“该”也可包括复数形式。应该进一步理解的是,本申请实施例所使用的术语“包括”以及“包含”是指相应特征可以实现为所呈现的特征、信息、数据、步骤、操作、元件和/或组件,但不排除实现为本技术领域所支持其他特征、信息、数据、步骤、操作、元件、组件和/或它们的组合等。应该理解,当我们称一个元件被“连接”或“耦接”到另一元件时,该一个元件可以直接连接或耦接到另一元件,也可以指该一个元件和另一元件通过中间元件建立连接关系。此外,这里使用的“连接”或 “耦接”可以包括无线连接或无线耦接。这里使用的术语“和/或”指示该术语所限定的项目中的至少一个,例如“A和/或B”可以实现为“A”,或者实现为“B”,或者实现为“A和B”。
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
下面通过对几个示例性实施方式的描述,对本申请实施例的技术方案以及本申请的技术方案产生的技术效果进行说明。需要指出的是,下述实施方式之间可以相互参考、借鉴或结合,对于不同实施方式中相同的术语、相似的特征以及相似的实施步骤等,不再重复描述。
图1为本申请实施例提供的一种数据处理方法的流程示意图,如图1所示,以该方法应用于计算节点为例,该方法包括:
步骤S110,接收客户端发送的针对待处理事务的至少一条执行语句。
具体地,本申请实施例提供的数据处理方法可以应用于计算节点,分布式系统可以包括计算层和存储层,位于计算层的节点可以为计算节点,位于存储层的节点可以为存储节点,分布式系统可以包括至少一个计算节点,也可以包括至少一个存储节点。其中,节点可以为工作机器,具体可以为终端设备、服务器或数据库等。
待处理事务可以为需要处理的数据库事务,其中,数据库事务(简称事务),是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。例如,待处理事务可以包括用户注册送积分事务、创建订单减库存事务或银行转账事务等,待处理事务可以根据实际的应用场景进行具体设置,本申请实施例对此不做限制。
待处理事务可以由事务开始与事务结束之间执行的全部数据库操作组成,数据库操作可以通过执行语句实现。当待处理事务开启后,客户端可以向分布式系统中的一个计算节点发送针对待处理事务的至少一条执行语句。其中,执行语句可以包括写语句和读语句,写语句可以包括插入(Insert)、更新(Update)和删除(Delete)等语句,读语句可以包括查询(Select)等语句。
步骤S120,若检测到执行语句中写语句的数量符合预设数量,则向第一存储节点发送至少一条预提交请求,以供第一存储节点执行至少一条预提交请求;向客户端返回第一响应指令。
具体地,分布式系统中至少一个存储节点可以包括第一存储节点和多个第二存储节点,第一存储节点可以为至少一个存储节点中的协调者(leader),第二存储节点可以为至少一个存储节点中的参与者(follower)。可选地,可以通过raft算法(一种分布式一致性算法)从至少一个存储节点的各个存续节点中选出一个第一存储节点和多个第二存储节点。
计算节点在接收到客户端发送的至少一条执行语句后,可以判断执行语句的类型,并记录执行语句中写语句的数量。当检测到执行语句中写语句的数量符合预设数量时,计算节点向第一存储节点发送至少一条预提交请求,第一存储节点在接收到至少一条预提交请求之后,可以执行至少一条预提交请求。
其中,预设数量为大于0的正整数,即预设数量可以为1,也可以大于1。当预设数量为1时,计算节点每接收到一条写语句,都会触发向第一存储节点发送预提交请求;当预设数量大于1时,计算节点每接收到预设数量的写语句时,才会触发向第一存储节点发送预提交请求。预提交请求可以用于指示将事务的修改操作预写入本地事务日志和资源状态中,以便在后续的提交阶段进行最终的提交或中止操作。预提交请求具体可以为prewrite请求。
计算节点在向第一存储节点发送至少一条预提交请求之后,可以向客户端返回第一响应指令。其中,第一响应指令用于向客户端反馈针对写语句的预提交操作的处理信息。
此处,计算节点可以在发送预提交请求之后立即向客户端返回第一响应指令,也可以在收到第一存储节点的指示后再向客户端返回第一响应指令,计算节点向客户端返回响应的具体过程将在下文中进行详细阐述。
步骤S130,若接收到客户端发送的提交语句,且所发送的至少一条预提交请求均已完成,则向第一存储节点发送提交语句中的提交请求,以供第一存储节点提交待处理事务。
具体地,当待处理事务结束时,客户端可以向计算节点发送提交语句,计算节点接收到客户端发送的提交语句后,检测所发送的至少一条预提交请求是否全部执行完成,若检测到所发送的至少一条预提交请求均已完成,说明待处理事务已成功完成预提交的操作,则计算节点向第一存储节点发送提交请求,第一存储节点接收到提交请求之后,可以提交待处理事务,从而完成待处理事务的提交。
需要说明的是,提交语句(即COMMIT语句)与提交请求(即commit请求)是不同的概念,提交语句可以包括提交请求。
在执行步骤S130之后,第一存储节点完成待处理事务的提交之后,可以向计算节点返回事务结束响应,并通过计算节点向客户端返回事务结束响应,以提示客户端事务提交已完成。
相较于现有的两阶段提交方法中计算节点是先对所有写语句进行缓存,直至计算节点接收到提交语句,才向存储节点发送预提交请求,本申请实施例中,计算节点是在检测到接收到的写语句达到预设数量,就会向存储节点发送预提交请求,也就是说计算节点只需要对少量写语句或者不需要对写语句进行缓存操作,降低了对计算节点的内存的消耗,使得分布式系统能够对大事务进行有效地处理。
进一步地,相较于现有的两阶段提交方法中计算节点在接收到提交语句后,依次向存储节点发送预提交请求和提交请求,使得提交语句(即COMMIT语句)集中进行RPC和IO(Input/Output,输入输出)操作,容易产生资源瓶颈,稳定性较差。本申请实施例中,计算节点是在检测到接收到的写语句达到预设数量,向存储节点发送预提交请求;在接收到提交语句,且检测所有预提交完成之后,向存储节点发送提交请求。可见,本申请实施例中计算节点向存储节点发送预提交请求和发送提交请求的触发条件是不同的,通过在不同的触发条件下分别发送预提交请求和提交请求,使得可以分开处理预提交请求和提交请求,从而避免了提交语句中集中进行RPC和IO操作带来的资源瓶颈,提高了系统的稳定性。
进一步地,相较于现有技术中只有在接收到提交语句之后,才可以发送预提交请求,并向客户端返回针对预提交请求的响应,本申请实施例中计算节点是在接收到客户端发送的提交语句之前,可以向客户端返回针对预提交请求的第一响应指令,从而能够更快的响应客户端,减少了系统的响应时间,提高了系统的性能。同时,计算节点在接收到提交语句之后,还会对检查待处理事务的预提交操作是否完成,从而保证了待处理事务的数据一致性。
作为一种可选实施例,若检测到执行语句中写语句的数量符合预设数量,则向第一存储节点发送至少一条预提交请求,以供第一存储节点执行至少一条预提交请求,包括:
每检测到一条写语句,向第一存储节点发送写语句对应的第一预提交请求,以指示第一存储节点执行如下操作:执行第一预提交请求,向计算节点返回第二响应指令,第二响应指令是第一存储节点开始副本同步时触发的;
向客户端返回第一响应指令,包括:
接收第一存储节点返回的第二响应指令;
释放写语句对应的至少一个KV键值对的内存;
向客户端返回第一响应指令。
具体地,计算节点接收客户端发送的至少一条执行语句,当计算节点检测到执行语句为写语句时,计算节点可以将写语句中需要修改或写入的数据转换为至少一个KV键值对,并将至少一个KV键值对封装在该写语句对应的第一预提交请求中,从而将得到的第一预提交请求发送至第一存储节点。
第一存储节点在接收到计算节点发送的第一预提交请求之后,可以执行第一预提交请求,并在第一存储节点开始向至少一个第二存储节点进行副本同步时,向计算节点返回第二响应指令,其中,第二响应指令用于向计算节点反馈针对该写语句的预提交操作的处理信息。
计算节点在接收到第一存储节点返回的第二响应指令后,可以释放该写语句对应的至少一个KV键值对的内存,并向客户端返回第一响应指令。
针对客户端发送的每一条写语句,计算节点均执行上述步骤,直至计算节点接收到客户端发送的提交语句。
本申请实施例中,计算节点每接收到客户端发送的一条写语句,就会触发向第一存储节点发送该写语句对应的第一预提交请求,计算节点不需要对写语句进行缓存,降低了对计算节点的内存的消耗,避免了因内存不足对事务处理能力的影响,使得分布式系统能够对大事务进行有效地处理;同时,计算节点不会对写语句相关的KV键值对进行缓存,也就不需要向存储节点发送RPC请求为这些Key进行加锁操作,减少了计算节点与存储节点之间的RPC调用,提高了分布式系统的处理效率。
进一步地,第一存储节点在开始副本同步时,向计算节点返回第二响应指令,并通过计算节点向客户端返回第一响应指令。也就是说,第一存储节点在开始副本同步时,直接向计算节点回响应,而不需要等待副本同步完成,通过存储节点的异步操作,减少了系统的响应时间,提高了系统的性能。
作为一种可选实施例,执行第一预提交请求,向计算节点返回第二响应指令,包括:
对与写语句相关的数据进行加锁操作;
向至少一个第二存储节点分别发送副本同步指令,并向计算节点返回第二响应指令。
具体地,计算节点每接收到客户端发送的一条写语句,将该写语句转换为至少一个KV键值对,将KV键值对封装至该写语句对应的第一预提交请求中,并将该第一预提交请求发送至第一存储节点。
第一存储节点执行该第一预提交请求的具体过程可以包括:
基于该第一预提交请求中的至少一个KV键值对,确定与该写语句相关的数据,并对与写语句相关的数据进行加锁操作,以保证当前只有一个线程可以修改与该写语句相关的数据。其中,与该写语句相关的数据可以该写语句需要修改或写入的数据。
也就是说,本申请实施例中是通过第一预提交请求对与写语句相关的数据进行加锁操作,以保证当前只有一个线程可以修改与该写语句相关的数据,计算节点不需要向存储节点发送RPC请求为这些数据进行加锁操作,减少了计算节点与存储节点之间的RPC调用,提高了分布式系统的处理效率。
第一存储节点在完成加锁操作后,可以向至少一个第二存储节点发送副本同步指令,此时,第一存储节点不需要等待至少一个第二存储节点完成副本同步,可以直接向计算节点返回第二响应指令,并通过计算节点向客户端返回第一响应指令。通过第一存储节点的异步操作,减少了系统的响应时间,提高了系统的性能。
作为一种可选实施例,若接收到客户端发送的提交语句,且所发送的至少一条预提交请求均已完成,则向第一存储节点发送提交语句中的提交请求,以供第一存储节点提交待处理事务,包括:
接收客户端发送的提交语句;
向第一存储节点发送提交语句中的提交请求,以指示第一存储节点执行如下操作:
若检测出所述至少一条第一预提交请求均已执行完成时,提交所述待处理事务。
具体地,当待处理事务结束时,客户端向计算节点发送提交语句,计算节点可以将提交语句中提交请求发送至第一存储节点,第一存储节点在接收到客户端发送的提交请求之后,可以检测接收到的至少一条预提交请求的执行情况,例如,可以通过至少一个第二存储节点返回的响应确定对应预提交请求的执行情况。若多个预提交请求均执行完成,可以直接提交掉待处理事务;若至少一条预提交请求中存在未执行完成的预提交请求,则需要继续等待,直至所有预提交请求均执行完成,才可以提交掉待处理事务。
此外,若第一存储节点检测到出现预提交请求执行失败的情况,说明待处理事务的预提交操作失败,则可以对待处理事务进行回滚操作,以保证待处理事务的数据一致性。
需要说明的是,计算节点在接收到客户端发送的提交语句之后,已经向存储节点发送预提交请求,因此,即使接收到的提交语句中包括预提交请求,可以不进行发送,只需要将提交语句中提交请求发送至存储节点。
本申请实施例中,通过第一存储节点检测所有预提交请求是否完成,并在所有预提交请求均已完成的条件下,对待处理事务进行提交,从而保证了存储节点进行异步操作时的数据一致性。
作为一种可选实施例,若检测到执行语句中写语句的数量符合预设数量,则向第一存储节点发送至少一条预提交请求,以供第一存储节点执行至少一条预提交请求,包括:
(1)每检测到一条写语句,对写语句对应的至少一个KV键值对进行缓存,向第一存储节点发送加锁请求,以供第一存储节点对与写语句相关的数据进行加锁操作,直至接收到的写语句数据符合预设数量;
(2)若检测到接收到的写语句数量符合预设数量,向第一存储节点发送预设数量的写语句对应的第二预提交请求,以供第一存储节点执行第二预提交请求;
(3)释放至少一个KV键值对对应的内存。
具体地,计算节点接收客户端发送的至少一条执行语句,当计算节点检测到执行语句为写语句时,计算节点将写语句中需要修改或写入的数据转换为至少一个KV键值对,并对至少一个KV键值对进行缓存,同时向第一存储节点发送加锁请求,以指示第一存储节点对与该写语句相关的数据进行加锁操作,保证当前只有一个线程可以修改与该写语句相关的数据。其中,与该写语句相关的数据可以该写语句需要修改或写入的数据。
针对客户端发送的每一条写语句,均执行上述步骤,直至计算节点接收到的写语句的数量符合预设数量。
计算节点若检测到接收到的写语句的数量达到预设数量,可以确定与预设数量的写语句对应的一条第二预提交请求,并将第二预提交请求发送至第一存储节点,以供第一存储节点执行第二预提交请求;同时,计算节点向客户端返回第一响应指令。其中,预设数量的写语句的一条第二预提交请求包括预设数量的写语句分别对应的KV键值对的信息。
本领域人员可以知晓,缓存的KV键值对的数量与接收到的写语句的数量之间是存在关联的,而且两者都可以用于反映计算节点的内存消耗水平,因此也可以基于接收到的写语句的数量,确定对应的缓存的KV键值对的数量(即这些写语句产生的KV键值对的数量),并通过判断缓存的键值对的数量与预设KV键值对数量的大小关系来确定是否发送第二预提交请求。
随即,计算节点释放该写语句对应的至少一个KV键值对的内存。
计算节点若检测到接收到的写语句小于预设数量,则返回步骤(1),继续处理客户端发送的写语句,直至接收到的写语句数量达到预设数量。
需要说明的是,若计算节点在重复执行步骤(1)的过程中,接收到客户端发送的提交语句,即使接收到的写语句没有达到预设数量,也可以将这些写语句对应的第二预提交请求发送至第一存储节点。
本申请实施例中,计算节点在检测到接收到的写语句的数量达到预设数量时,向第一存储节点发送预提交请求,并向客户端返回第一响应指令,通过计算节点的异步操作,减少了系统的响应时间,提高了系统的性能;计算节点只会对预设数量的写语句对应的KV键值对进行批量的缓存,并在发送预提交请求后及时释放缓存的KV键值对的内存,避免了将大量写语句对应的KV键值对缓存至计算节点,降低了计算节点的内存的消耗,使得分布式系统能够对大事务进行有效地处理。
作为一种可选实施例,向第一存储节点发送预设数量的写语句对应的一条第二预提交请求,以供第一存储节点执行第二预提交请求,包括:
向第一存储节点发送第二预提交请求,以指示第一存储节点执行如下操作:
向至少一个第二存储节点分别发送副本同步指令;
当至少一个第二存储节点均完成同步时,向计算节点返回针对所述第二预提交请求的预提交完成指令。
具体地,计算节点每检测到接收到的写语句的数量符合预设数量时,将预设数量的写语句对应的第二预提交请求发送至第一存储节点,同时,计算节点向客户端返回第一响应指令。
第一存储节点在接收到第二预提交请求后,可以向至少一个第二存储节点分别发送副本同步指令,此时,第一存储节点需要等待至少一个第二存储节点完成副本完成,当确定至少一个第二存储节点均完成同步后,才可以向计算节点返回针对该第二预提交请求的预提交完成指令。
本申请实施例中,计算节点在向第一存储节点发送第二预提交请求之后,就已经向客户端返回响应,而不是等到计算节点接收到第一存储节点返回的预提交完成指令后才向客户端返回响应,通过计算节点的异步操作,减少了系统的响应时间,提高了系统的性能。
作为一种可选实施例,若接收到客户端发送的提交语句,且所发送的至少一条预提交请求均已完成,则向第一存储节点发送提交语句中的提交请求,以供第一存储节点提交待处理事务,包括:
接收客户端发送的提交语句;
若检测到存在未被预提交的KV键值对,则将所述未被预提交的KV键值对对应的第二预提交请求发送至第一存储节点;
若基于所述预提交完成指令确定出所发送的至少一条第二预提交请求均已完成,则将提交语句中的提交请求发送至第一存储节点,以供第一存储节点提交待处理事务。
具体地,当待处理事务结束时,客户端向计算节点发送提交语句,当计算节点接收到的写语句的数量未达到预设数量时,这些写语句对应的KV键值对就还没有被预提交,因此需要先将未被预提交的KV键值对的第二预提交请求发送至第一存储节点。
当计算节点确定所有缓存的KV键值对均被预提交后,可以通过是否接受到第一存储节点返回的预提交完成指令来检查所发送的至少一个第二预提交请求(即针对待处理事务的所有预提交请求)是否全部执行完成,若计算节点接收到第一存储节点返回的针对各个预提交请求的预提交完成指令,说明多个预提交请求均执行完成,可以向第一存储节点发送提交请求;若未接收到某个预提交请求的预提交完成指令,则需要继续等待,直至所有预提交请求均执行完成,才可以向第一存储节点发送预提交请求。
需要说明的是,计算节点在接收到客户端发送的提交语句之后,已经向存储节点发送预提交请求,因此,即使接收到的提交语句中包括预提交请求,可以不进行发送,只需要将提交语句中提交请求发送至存储节点。
本申请实施例中,通过计算节点检测所有预提交请求是否完成,并在所有预提交请求均已完成的条件下,对待处理事务进行提交,从而保证了计算节点进行异步操作时的数据一致性。
作为一种可选实施例,图2为本申请实施例提供的一种数据处理方法的流程示意图,如图2所示,该方法包括:
(1)客户端向计算节点发送BEGIN语句,以指示计算节点开启事务计算节点收到BEGIN语句,开启一个新事务;
(2)计算节点收到一条INSERT语句(即写语句),将该语句需要修改/写入的数据形成KV键值对(1,“a”),其中,1表示key,“a”表示value,并将这些KV键值对封装在prewrite请求中,得到prewrite(1,“a”)(即第一预提交请求)下发到第一存储节点;
(3)第一存储节点收到prewrite(1,“a”)请求后为key=1的数据(即与写语句相关的数据)进行加锁操作(例如可以加悲观锁),然后发起propose(提议)将(1,“a”)复制到follower(即发送副本同步指令),例如可以通过raft算法进行副本同步。此时第一存储节点的worker(工作)线程发起propose后立刻向计算节点回响应而不必等待数据同步完成,即第一存储节点进行异步操作;
(4)计算节点收到针对prewrite请求的响应后释放当前语句的KV键值对内存,然后向客户端回响应;
(5)计算节点循环执行事务中其他的SQL语句,直到接收到 COMMIT语句。针对客户端发送的每一条写语句,计算节点可以重复执行步骤(2)-(4)进行处理;针对客户端发送的每一条读语句(例如SELECT语句),计算节点接收到一条读语句后,可以向第一存储节点发送读请求,第一存储节点从内存或磁盘中读取与该读语句相关的数据后,将得到的数据返回给计算节点,并通过计算节点向客户端回响应;
(6)计算节点接收到COMMIT语句后检查当前事务是否已经完成prewrite(即所发送的至少一条预提交请求均已完成)。如果完成prewrite则向第一存储节点发送commit请求,指示第一存储节点立刻提交掉当前事务;如果没有完成prewrite则需要等待prewrite完成后再发起commit,如果prewrite失败则回滚事务;
需要说明的是,计算节点收到COMMIT语句 不再发送prewrite请求(因为prewrite已经提前执行过了),仅向存储节点发送commit请求,完成事务的提交;
(7)第一存储节点提交事务之后,向计算节点回响应,再通过计算节点向客户端回响应,至此,事务执行结束。
本申请实施例中,计算节点使用改进后的prewrite操作(即第一预提交请求)代替当前的加锁操作,改进后的prewrite操作有两个功能:第一,为每个Key加锁以保证当前只有一个线程可以修改这个Key;第二,将数据的同步交由后台线程完成,不再等待副本同步完成,使得计算节点不需要向存储节点发送RPC请求为这些数据进行加锁操作,减少了计算节点与存储节点之间的RPC调用,提高了分布式系统的处理效率。
进一步地,每条写语句都会触发一次prewrite,prewrite完成后释放键值对的内存,降低了对计算节点的内存的消耗,避免了因内存不足对事务处理能力的影响,使得分布式系统能够对大事务进行有效地处理;通过分开处理prewrite请求和commit请求,从而避免了COMMIT语句中集中进行RPC和IO操作带来的资源瓶颈,提高了系统的稳定性。
进一步地,计算节点不需要串行的等待第一存储节点的执行,不需要等待副本同步完成,节省一致性副本的复制消耗的时间,减少了系统的响应时间,提高了系统的性能。
作为一种可选实施例,图3为本申请实施例提供的一种数据处理方法的流程示意图,如图3所示,该方法包括:
(1)客户端向计算节点发送BEGIN语句,以指示计算节点开启事务计算节点收到BEGIN语句,开启一个新事务;
(2)计算节点收到一条INSERT语句(即写语句),将该语句需要修改/写入的数据形成KV键值对(1,“a”),将(1,“a”)加入到缓存中并向第一存储节点发送加锁请求PessimisticLock(1),第一存储节点收到加锁请求后为key=1的数据(即与写语句相关的数据)进行加锁操作(例如可以加悲观锁);
(3)判断缓存中KV键值对的数量是否超过预设数量max_prewrite_keys,如果没有超过则返回步骤(2)继续处理剩余的语句直到缓存的key数量超过阈值max_prewrite_keys或者收到COMMIT语句;当缓存的KV键值对的超过预设数量max_prewrite_keys(假设为20)时,由计算节点异步发起prewrite请求,将prewrite(1,2,……,20)(即第二预提交请求)发送至第一存储节点,并向客户端回响应,之后释放缓存的key;
(4)第一存储节点收到prewrite请求后发起propose将数据复制到follower(即发送副本同步指令),例如可以通过raft算法进行副本同步。此时第一存储节点的工作线程发起请求后必须等待数据同步完成;
(5)计算节点循环执行事务中其他的SQL语句,直到接收到 COMMIT语句。针对客户端发送的每一条写语句,计算节点可以重复执行步骤(2)-(4)进行处理;针对客户端发送的每一条读语句(例如SELECT语句),计算节点接收到一条读语句后,可以向第一存储节点发送读请求,第一存储节点从内存或磁盘中读取与该读语句相关的数据后,将得到的数据返回给计算节点,并通过计算节点向客户端回响应;
(6)计算节点接收到COMMIT语句后检查当前事务是否存在未被prewrite的key(即未被预提交的KV键值对),如果不存在则等待上述异步prewrite完成,之后向第一存储节点发起commit请求完成事务提交;如果仍然存在未被prewrite的key则对这些key发起异步prewrite请求,并等待所有prewrite操作都成功后向第一存储节点发起commit请求完成事务提交。
(7)第一存储节点提交事务之后,向计算节点回响应,再通过计算节点向客户端回响应,至此,事务执行结束。
本申请实施例中,计算节点设置预设数量用于控制计算节点缓存的 key数量,计算节点收到写语句后先缓存该语句生成的key,然后向存储层发送加锁请求。如果缓存的key数量没有达到预设数量,则继续执行下一条语句。如果缓存的key数量达到预设数量,则由计算节点发起异步 prewrite请求并释放缓存的key,使得计算节点只会对预设数量写语句的KV键值对进行批量的缓存,并在发送预提交请求后及时释放缓存的KV键值对的内存,降低了对计算节点的内存的消耗,使得分布式系统能够对大事务进行有效地处理;通过分开处理prewrite请求和commit请求,从而避免了COMMIT语句中集中进行RPC和IO操作带来的资源瓶颈,提高了系统的稳定。
进一步地,如果缓存的key数量达到预设数量,则由计算层发起异步 prewrite请求并向客户端返回第一响应指令,通过计算节点的异步操作,减少了系统的响应时间,提高了系统的性能。
图4为本申请实施例提供的一种数据处理装置的结构示意图,如图4所示,该装置包括:
语句接收模块210,用于接收客户端发送的针对待处理事务的至少一条执行语句;
预提交执行模块220,用于若检测到执行语句中写语句的数量符合预设数量,则向第一存储节点发送至少一条预提交请求,以供所述第一存储节点执行所述至少一条预提交请求;向所述客户端返回第一响应指令;
提交执行模块230,用于若接收到客户端发送的提交语句,且所发送的至少一条预提交请求均已完成,则向第一存储节点发送所述提交语句中的提交请求,以供所述第一存储节点提交所述待处理事务。
作为一种可选实施例,预提交执行模块在若检测到执行语句中写语句的数量符合预设数量,则向第一存储节点发送至少一条预提交请求,以供所述第一存储节点执行所述至少一条预提交请求时,具体用于:
每检测到一条写语句,向所述第一存储节点发送所述写语句对应的第一预提交请求,以指示所述第一存储节点执行如下操作:执行所述第一预提交请求,向所述计算节点返回第二响应指令,所述第二响应指令是所述第一存储节点开始副本同步时触发的;
预提交执行模块在向所述客户端返回第一响应指令时,具体用于:
接收所述第一存储节点返回的第二响应指令;
释放所述写语句对应的至少一个KV键值对的内存;
向所述客户端返回第一响应指令。
作为一种可选实施例,第一存储节点在执行所述第一预提交请求,向所述计算节点返回第二响应指令,具体用于:
对与所述写语句相关的数据进行加锁操作;
向至少一个第二存储节点分别发送副本同步指令,并向所述计算节点返回第二响应指令。
作为一种可选实施例,提交执行模块具体用于:
接收所述客户端发送的提交语句;
向所述第一存储节点发送所述提交语句中的提交请求,以指示所述第一存储节点执行如下操作:
若检测出所述至少一条第一预提交请求均已执行完成时,提交所述待处理事务。
作为一种可选实施例,预提交执行模块在若检测到执行语句中写语句的数量符合预设数量,则向第一存储节点发送至少一条预提交请求,以供所述第一存储节点执行所述至少一条预提交请求时,具体用于:
每检测到一条写语句,对所述写语句对应的至少一个KV键值对进行缓存,向所述第一存储节点发送加锁请求,以供所述第一存储节点对与所述写语句相关的数据进行加锁操作,直至接收到的写语句数据符合预设数量;
若检测到接收到的写语句的数量符合预设数量,向所述第一存储节点发送所述预设数量的写语句对应的第二预提交请求,以供所述第一存储节点执行所述第二预提交请求;
释放所述至少一个KV键值对对应的内存。
作为一种可选实施例,预提交执行模块在向所述第一存储节点发送所述预设数量的写语句对应的一条第二预提交请求,以供所述第一存储节点执行所述第二预提交请求时,具体用于:
向所述第一存储节点发送所述第二预提交请求,以指示所述第一存储节点执行如下操作:
向至少一个第二存储节点分别发送副本同步指令;
当所述至少一个第二存储节点均完成同步时,向所述计算节点返回针对所述第二预提交请求的预提交完成指令。
作为一种可选实施例,提交执行模块具体用于:
接收所述客户端发送的提交语句;
若检测到存在未被预提交的KV键值对,则将所述未被预提交的KV键值对对应的第二预提交请求发送至所述第一存储节点;
若基于所述预提交完成指令确定出所发送的至少一条第二预提交请求均已完成,则将所述提交语句中的提交请求发送至所述第一存储节点,以供所述第一存储节点提交所述待处理事务。
本申请实施例的装置可执行本申请实施例所提供的方法,其实现原理相类似,本申请各实施例的装置中的各模块所执行的动作是与本申请各实施例的方法中的步骤相对应的,对于装置的各模块的详细功能描述具体可以参见前文中所示的对应方法中的描述,此处不再赘述。
本申请实施例中提供了一种电子设备,包括存储器、处理器及存储在存储器上的计算机程序,该处理器执行上述计算机程序以实现上述数据处理方法的步骤,与相关技术相比可实现:计算节点只需要对少量写语句或者不需要对写语句进行缓存操作,降低了对计算节点的内存的消耗,使得分布式系统能够对大事务进行有效地处理;通过在不同的触发条件下分别发送预提交请求和提交请求,使得可以分开处理预提交请求和提交请求,从而避免了提交语句中集中进行RPC和IO操作带来的资源瓶颈,提高了系统的稳定性;计算节点是在接收到客户端发送的提交语句之前,可以向客户端返回针对预提交请求的第一响应指令,从而能够更快的响应客户端,减少了系统的响应时间,提高了系统的性能。同时,计算节点在接收到提交语句之后,还会对检查待处理事务的预提交操作是否完成,从而保证了待处理事务的数据一致性。
在一个可选实施例中提供了一种电子设备,如图5所示,图5所示的电子设备4000包括:处理器4001和存储器4003。其中,处理器4001和存储器4003相连,如通过总线4002相连。可选地,电子设备4000还可以包括收发器4004,收发器4004可以用于该电子设备与其他电子设备之间的数据交互,如数据的发送和/或数据的接收等。需要说明的是,实际应用中收发器4004不限于一个,该电子设备4000的结构并不构成对本申请实施例的限定。
处理器4001可以是CPU(Central Processing Unit,中央处理器),通用处理器,DSP(Digital Signal Processor,数据信号处理器),ASIC(Application SpecificIntegrated Circuit,专用集成电路),FPGA(Field Programmable Gate Array,现场可编程门阵列)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器4001也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,DSP和微处理器的组合等。
总线4002可包括一通路,在上述组件之间传送信息。总线4002可以是PCI(Peripheral Component Interconnect,外设部件互连标准)总线或EISA(ExtendedIndustry Standard Architecture,扩展工业标准结构)总线等。总线4002可以分为地址总线、数据总线、控制总线等。为便于表示,图5中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
存储器4003可以是ROM(Read Only Memory,只读存储器)或可存储静态信息和指令的其他类型的静态存储设备,RAM(Random Access Memory,随机存取存储器)或者可存储信息和指令的其他类型的动态存储设备,也可以是EEPROM(Electrically ErasableProgrammable Read Only Memory,电可擦可编程只读存储器)、CD-ROM(Compact DiscRead Only Memory,只读光盘)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质、其他磁存储设备、或者能够用于携带或存储计算机程序并能够由计算机读取的任何其他介质,在此不做限定。
存储器4003用于存储执行本申请实施例的计算机程序,并由处理器4001来控制执行。处理器4001用于执行存储器4003中存储的计算机程序,以实现前述方法实施例所示的步骤。
本申请实施例提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时可实现前述方法实施例的步骤及相应内容。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”、“1”、“2”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除图示或文字描述以外的顺序实施。
应该理解的是,虽然本申请实施例的流程图中通过箭头指示各个操作步骤,但是这些步骤的实施顺序并不受限于箭头所指示的顺序。除非本文中有明确的说明,否则在本申请实施例的一些实施场景中,各流程图中的实施步骤可以按照需求以其他的顺序执行。此外,各流程图中的部分或全部步骤基于实际的实施场景,可以包括多个子步骤或者多个阶段。这些子步骤或者阶段中的部分或全部可以在同一时刻被执行,这些子步骤或者阶段中的每个子步骤或者阶段也可以分别在不同的时刻被执行。在执行时刻不同的场景下,这些子步骤或者阶段的执行顺序可以根据需求灵活配置,本申请实施例对此不限制。
以上所述仅是本申请部分实施场景的可选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请的方案技术构思的前提下,采用基于本申请技术思想的其他类似实施手段,同样属于本申请实施例的保护范畴。
Claims (10)
1.一种数据处理方法,其特征在于,应用于计算节点,包括:
接收客户端发送的针对待处理事务的至少一条执行语句;
若检测到执行语句中写语句的数量符合预设数量,则向第一存储节点发送至少一条预提交请求,以供所述第一存储节点执行所述至少一条预提交请求;向所述客户端返回第一响应指令;
若接收到客户端发送的提交语句,且所发送的至少一条预提交请求均已完成,则向第一存储节点发送所述提交语句中的提交请求,以供所述第一存储节点提交所述待处理事务;
所述若检测到执行语句中写语句的数量符合预设数量,则向第一存储节点发送至少一条预提交请求,以供所述第一存储节点执行所述至少一条预提交请求,包括:
每检测到一条写语句,向所述第一存储节点发送所述写语句对应的第一预提交请求,以指示所述第一存储节点执行如下操作:执行所述第一预提交请求,向所述计算节点返回第二响应指令,所述第二响应指令是所述第一存储节点开始副本同步时触发的;
所述向所述客户端返回第一响应指令,包括:
接收所述第一存储节点返回的第二响应指令;
释放所述写语句对应的至少一个KV键值对的内存;
向所述客户端返回第一响应指令。
2.根据权利要求1所述的数据处理方法,其特征在于,所述执行所述第一预提交请求,向所述计算节点返回第二响应指令,包括:
对与所述写语句相关的数据进行加锁操作;
向至少一个第二存储节点分别发送副本同步指令,并向所述计算节点返回第二响应指令。
3.根据权利要求1所述的数据处理方法,其特征在于,所述若接收到客户端发送的提交语句,且所发送的至少一条预提交请求均已完成,则向第一存储节点发送所述提交语句中的提交请求,以供所述第一存储节点提交所述待处理事务,包括:
接收所述客户端发送的提交语句;
向所述第一存储节点发送所述提交语句中的提交请求,以指示所述第一存储节点执行如下操作:
若检测出所述至少一条第一预提交请求均已执行完成时,提交所述待处理事务。
4.一种数据处理方法,其特征在于,应用于计算节点,包括:
接收客户端发送的针对待处理事务的至少一条执行语句;
若检测到执行语句中写语句的数量符合预设数量,则向第一存储节点发送至少一条预提交请求,以供所述第一存储节点执行所述至少一条预提交请求;向所述客户端返回第一响应指令;
若接收到客户端发送的提交语句,且所发送的至少一条预提交请求均已完成,则向第一存储节点发送所述提交语句中的提交请求,以供所述第一存储节点提交所述待处理事务;
所述若检测到执行语句中写语句的数量符合预设数量,则向第一存储节点发送至少一条预提交请求,以供所述第一存储节点执行所述至少一条预提交请求,包括:
每检测到一条写语句,对所述写语句对应的至少一个KV键值对进行缓存,向所述第一存储节点发送加锁请求,以供所述第一存储节点对与所述写语句相关的数据进行加锁操作,直至接收到的写语句数据符合预设数量;
若检测到接收到的写语句符合预设数量,向所述第一存储节点发送所述预设数量的写语句对应的第二预提交请求,以供所述第一存储节点执行所述第二预提交请求;
释放所述至少一个KV键值对对应的内存。
5.根据权利要求4所述的数据处理方法,其特征在于,所述向所述第一存储节点发送所述预设数量的写语句对应的第二预提交请求,以供所述第一存储节点执行所述第二预提交请求,包括:
向所述第一存储节点发送所述第二预提交请求,以指示所述第一存储节点执行如下操作:
向至少一个第二存储节点分别发送副本同步指令;
当所述至少一个第二存储节点均完成同步时,向所述计算节点返回针对所述第二预提交请求的预提交完成指令。
6.根据权利要求5所述的数据处理方法,其特征在于,所述若接收到客户端发送的提交语句,且所发送的至少一条预提交请求均已完成,则向第一存储节点发送所述提交语句中的提交请求,以供所述第一存储节点提交所述待处理事务,包括:
接收所述客户端发送的提交语句;
若检测到存在未被预提交的KV键值对,则将所述未被预提交的KV键值对对应的第二预提交请求发送至所述第一存储节点;
若基于所述预提交完成指令确定出所发送的至少一条第二预提交请求均已完成,则将所述提交语句中的提交请求发送至所述第一存储节点,以供所述第一存储节点提交所述待处理事务。
7.一种数据处理装置,其特征在于,包括:
语句接收模块,用于接收客户端发送的针对待处理事务的至少一条执行语句;
预提交执行模块,用于若检测到执行语句中写语句的数量符合预设数量,则向第一存储节点发送至少一条预提交请求,以供所述第一存储节点执行所述至少一条预提交请求;向所述客户端返回第一响应指令;
提交执行模块,用于若接收到客户端发送的提交语句,且所发送的至少一条预提交请求均已完成,则向第一存储节点发送所述提交语句中的提交请求,以供所述第一存储节点提交所述待处理事务;
所述预提交执行模块,在若检测到执行语句中写语句的数量符合预设数量,则向第一存储节点发送至少一条预提交请求,以供所述第一存储节点执行所述至少一条预提交请求时,用于:
每检测到一条写语句,向所述第一存储节点发送所述写语句对应的第一预提交请求,以指示所述第一存储节点执行如下操作:执行所述第一预提交请求,向计算节点返回第二响应指令,所述第二响应指令是所述第一存储节点开始副本同步时触发的;
所述向所述客户端返回第一响应指令,包括:
接收所述第一存储节点返回的第二响应指令;
释放所述写语句对应的至少一个KV键值对的内存;
向所述客户端返回第一响应指令。
8.一种数据处理装置,其特征在于,包括:
语句接收模块,用于接收客户端发送的针对待处理事务的至少一条执行语句;
预提交执行模块,用于若检测到执行语句中写语句的数量符合预设数量,则向第一存储节点发送至少一条预提交请求,以供所述第一存储节点执行所述至少一条预提交请求;向所述客户端返回第一响应指令;
提交执行模块,用于若接收到客户端发送的提交语句,且所发送的至少一条预提交请求均已完成,则向第一存储节点发送所述提交语句中的提交请求,以供所述第一存储节点提交所述待处理事务;
所述预提交执行模块,在若检测到执行语句中写语句的数量符合预设数量,则向第一存储节点发送至少一条预提交请求,以供所述第一存储节点执行所述至少一条预提交请求时,用于:
每检测到一条写语句,对所述写语句对应的至少一个KV键值对进行缓存,向所述第一存储节点发送加锁请求,以供所述第一存储节点对与所述写语句相关的数据进行加锁操作,直至接收到的写语句数据符合预设数量;
若检测到接收到的写语句符合预设数量,向所述第一存储节点发送所述预设数量的写语句对应的第二预提交请求,以供所述第一存储节点执行所述第二预提交请求;
释放所述至少一个KV键值对对应的内存。
9.一种电子设备,包括存储器、处理器及存储在存储器上的计算机程序,其特征在于,所述处理器执行所述计算机程序以实现权利要求1至6中任一项所述方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至6中任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311773689.7A CN117453750B (zh) | 2023-12-21 | 2023-12-21 | 数据处理方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311773689.7A CN117453750B (zh) | 2023-12-21 | 2023-12-21 | 数据处理方法、装置、电子设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117453750A CN117453750A (zh) | 2024-01-26 |
CN117453750B true CN117453750B (zh) | 2024-03-15 |
Family
ID=89591304
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311773689.7A Active CN117453750B (zh) | 2023-12-21 | 2023-12-21 | 数据处理方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117453750B (zh) |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106033437A (zh) * | 2015-03-13 | 2016-10-19 | 阿里巴巴集团控股有限公司 | 一种分布式事务处理方法及系统 |
CN106445644A (zh) * | 2016-08-30 | 2017-02-22 | 中国民生银行股份有限公司 | 基于改进的一阶段提交的分布式事务的处理方法和装置 |
CN109710190A (zh) * | 2018-12-26 | 2019-05-03 | 百度在线网络技术(北京)有限公司 | 一种数据存储方法、装置、设备及存储介质 |
CN112395284A (zh) * | 2019-08-15 | 2021-02-23 | 阿里巴巴集团控股有限公司 | 数据处理方法、装置、数据库系统、电子设备及存储介质 |
CN113326272A (zh) * | 2020-02-29 | 2021-08-31 | 华为技术有限公司 | 分布式事务的处理方法、装置及系统 |
CN114116141A (zh) * | 2020-08-27 | 2022-03-01 | 北京金山云网络技术有限公司 | 分布式系统的事务处理方法和装置、存储介质和电子装置 |
CN116303599A (zh) * | 2023-02-10 | 2023-06-23 | 阿里云计算有限公司 | 一种事务提交方法、装置、电子设备及存储介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10795881B2 (en) * | 2015-12-18 | 2020-10-06 | Sap Se | Table replication in a database environment |
-
2023
- 2023-12-21 CN CN202311773689.7A patent/CN117453750B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106033437A (zh) * | 2015-03-13 | 2016-10-19 | 阿里巴巴集团控股有限公司 | 一种分布式事务处理方法及系统 |
CN106445644A (zh) * | 2016-08-30 | 2017-02-22 | 中国民生银行股份有限公司 | 基于改进的一阶段提交的分布式事务的处理方法和装置 |
CN109710190A (zh) * | 2018-12-26 | 2019-05-03 | 百度在线网络技术(北京)有限公司 | 一种数据存储方法、装置、设备及存储介质 |
CN112395284A (zh) * | 2019-08-15 | 2021-02-23 | 阿里巴巴集团控股有限公司 | 数据处理方法、装置、数据库系统、电子设备及存储介质 |
CN113326272A (zh) * | 2020-02-29 | 2021-08-31 | 华为技术有限公司 | 分布式事务的处理方法、装置及系统 |
CN114116141A (zh) * | 2020-08-27 | 2022-03-01 | 北京金山云网络技术有限公司 | 分布式系统的事务处理方法和装置、存储介质和电子装置 |
CN116303599A (zh) * | 2023-02-10 | 2023-06-23 | 阿里云计算有限公司 | 一种事务提交方法、装置、电子设备及存储介质 |
Non-Patent Citations (2)
Title |
---|
一种高效的并行内存数据库事务提交与恢复技术;周晓云;覃雄派;徐钊;;中国矿业大学学报;20090115(第01期);71-78 * |
分布式数据库两阶段提交协议研究与改进;刘冉、布辉;;电脑知识与技术;20120515;第8卷(第15期);3500-3502 * |
Also Published As
Publication number | Publication date |
---|---|
CN117453750A (zh) | 2024-01-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6769003B2 (en) | Parallel logging method for transaction processing system | |
US7900085B2 (en) | Backup coordinator for distributed transactions | |
US11429599B2 (en) | Method and apparatus for updating database by using two-phase commit distributed transaction | |
CN106844014B (zh) | 分布式事务防悬挂的实现方法和装置 | |
CN105512266A (zh) | 一种实现分布式数据库操作一致性的方法及装置 | |
CN109783204A (zh) | 一种分布式事务处理方法、装置及存储介质 | |
US20230098190A1 (en) | Data processing method, apparatus, device and medium based on distributed storage | |
CN112995262B (zh) | 分布式事务提交方法、系统及计算设备 | |
JP2023541298A (ja) | トランザクション処理方法、システム、装置、機器、及びプログラム | |
CN112053149A (zh) | 一种防止重复支付的方法、装置、电子设备和可读存储介质 | |
CN111475583A (zh) | 事务处理方法及装置 | |
CN106815094B (zh) | 一种用于实现主备同步模式下事务提交的方法与设备 | |
CN115994053A (zh) | 数据库备机的并行回放方法、装置、电子设备及介质 | |
CN112835885A (zh) | 一种分布式表格存储的处理方法、装置及系统 | |
WO2021052237A1 (zh) | 事务处理方法、装置、设备、存储介质、数据库 | |
CN117453750B (zh) | 数据处理方法、装置、电子设备及存储介质 | |
CN108460047B (zh) | 数据同步方法及设备 | |
CN111125168B (zh) | 一种数据处理方法、装置、电子设备及存储介质 | |
CN110532069B (zh) | 一种分布式事务提交方法及装置 | |
WO2023216636A1 (zh) | 事务处理方法、装置及电子设备 | |
CN115292092B (zh) | 一种数据回滚方法、装置、设备及其存储介质 | |
CN115658245A (zh) | 一种基于分布式数据库系统的事务提交系统、方法及装置 | |
CN112434007A (zh) | 一种数据库事务组提交方法、装置、设备及存储介质 | |
CN112162988A (zh) | 一种分布式事务的处理方法、装置和电子设备 | |
CN111104070A (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 |