CN113297320A - 分布式数据库系统及数据处理方法 - Google Patents
分布式数据库系统及数据处理方法 Download PDFInfo
- Publication number
- CN113297320A CN113297320A CN202010721315.0A CN202010721315A CN113297320A CN 113297320 A CN113297320 A CN 113297320A CN 202010721315 A CN202010721315 A CN 202010721315A CN 113297320 A CN113297320 A CN 113297320A
- Authority
- CN
- China
- Prior art keywords
- transaction
- target
- storage module
- target transaction
- execution
- 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
- 238000003672 processing method Methods 0.000 title claims abstract description 53
- 238000003860 storage Methods 0.000 claims abstract description 324
- 238000004364 calculation method Methods 0.000 claims abstract description 43
- 238000012545 processing Methods 0.000 claims description 169
- 238000000034 method Methods 0.000 claims description 27
- 238000012163 sequencing technique Methods 0.000 claims description 18
- 238000009826 distribution Methods 0.000 claims description 6
- 230000008859 change Effects 0.000 claims description 5
- 230000000977 initiatory effect Effects 0.000 claims 6
- 238000010586 diagram Methods 0.000 description 14
- 230000008569 process Effects 0.000 description 13
- 238000004891 communication Methods 0.000 description 6
- 230000001413 cellular effect Effects 0.000 description 3
- 238000002955 isolation Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 239000004984 smart glass Substances 0.000 description 3
- 238000004590 computer program Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 239000012634 fragment Substances 0.000 description 2
- 238000007726 management method Methods 0.000 description 2
- 238000011084 recovery Methods 0.000 description 2
- 238000004904 shortening Methods 0.000 description 2
- 230000004075 alteration Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000013523 data management Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000007123 defense Effects 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
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/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/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
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本说明书提供一种分布式数据库系统及数据处理方法,其中所述系统包括:计算模块和存储模块;所述计算模块,被配置为接收事务开启请求;根据所述事务开启请求,确定目标事务及所述目标事务对应的目标存储模块;向所述目标存储模块发送执行指令;所述目标存储模块返回目标事务执行成功的消息的情况下,向所述目标存储模块发送提交指令,所述提交指令携带有待提交目标事务和所述目标事务的提交时间戳;所述目标存储模块,被配置为接收所述执行指令,根据所述执行指令执行所述目标事务;接收所述提交指令,根据所述提交指令对所述目标事务进行提交,并根据所述目标事务的提交时间戳生成二进制日志。
Description
技术领域
本说明书涉及分布式数据库技术领域,特别涉及一种分布式数据库系统。本说明书同时涉及一种数据处理方法,一种计算设备,以及一种计算机可读存储介质。
背景技术
随着计算机技术的日益发展,为了满足用户日益增长的需求,分布式数据库应运而生。分布式数据库由多个存储节点组成,在每个存储节点中,每一次DML(DataManipulation Language,数据操纵语言)写入操作都会独立生成一个二进制日志(binlog),这些二进制日志在所在的存储节点内保持有序。然而,在分布式数据库中,时间上前后的两次操作可能会发生在两个不同的存储节点上,直接订阅两个存储节点的二进制日志,有可能导致这两次操作的顺序发生错乱,最终的数据出现不一致。
发明内容
有鉴于此,本说明书实施例提供了一种分布式数据库系统。本说明书同时涉及一种数据处理方法,一种计算设备,以及一种计算机可读存储介质,以解决现有技术中存在的技术缺陷。
根据本说明书实施例的第一方面,提供了一种分布式数据库系统,包括:计算模块和存储模块;
所述计算模块,被配置为接收事务开启请求;根据所述事务开启请求,确定目标事务及所述目标事务对应的目标存储模块;向所述目标存储模块发送执行指令,所述执行指令中携带有待执行目标事务;所述目标存储模块返回目标事务执行成功的消息的情况下,向所述目标存储模块发送提交指令,所述提交指令携带有待提交目标事务和所述目标事务的提交时间戳;
所述目标存储模块,被配置为接收所述执行指令,根据所述执行指令执行所述目标事务;所述目标事务执行成功的情况下,向所述计算模块返回目标事务执行成功的消息;接收所述提交指令,根据所述提交指令对所述目标事务进行提交,并根据所述目标事务的提交时间戳生成二进制日志。
可选的,所述系统还包括:多个执行模块和一个排序模块,所述多个执行模块中每一个执行模块均对应有存储模块;
所述执行模块,被配置为读取自身对应的存储模块的二进制日志,并根据所述二进制日志生成内存序列;
所述排序模块,被配置为读取每一个所述执行模块的内存序列,获取所述内存序列中每一个二进制日志中目标事务的提交时间戳;按照所述目标事务的提交时间戳,对所述内存序列中的二进制日志进行排序;将排序后的二进制日志写入消息队列中。
可选的,所述计算模块进一步被配置为:
若检测到表格处理事件,则确定所述表格处理事件的执行逻辑;
根据所述执行逻辑,生成所述表格处理事件的时间戳;
根据所述时间戳,生成所述表格处理事件的二进制日志。
可选的,所述计算模块进一步被配置为:
确定所述表格处理事件的操作类型;
根据所述操作类型,确定所述表格处理事件对应的兼容类型;
根据所述兼容类型,确定所述表格处理事件的执行逻辑。
可选的,所述计算模块进一步被配置为:
若所述操作类型属于第一类型,则确定所述表格处理事件对应的兼容类型为第一版本兼容第二版本,所述第一版本为所述表格处理事件执行前的版本,所述第二版本为所述表格处理事件执行后的版本;
若所述操作类型属于第二类型,则确定所述表格处理事件对应的兼容类型为第二版本兼容第一版本。
可选的,所述计算模块进一步被配置为:
若所述表格处理事件对应的兼容类型为第一版本兼容第二版本,则确定所述表格处理事件的执行逻辑为后序执行;
若所述表格处理事件对应的兼容类型为第二版本兼容第一版本,则确定所述表格处理事件的执行逻辑为前序执行。
可选的,所述计算模块进一步被配置为:
若所述表格处理事件的执行逻辑为前序执行,则在生成所有第二版本的数据对应的二进制日志之前,获取所述表格处理事件的时间戳;
若所述表格处理事件的执行逻辑为后序执行,则在生成所有第一版本的数据对应的二进制日志之后,获取所述表格处理事件的时间戳。
可选的,所述排序模块进一步被配置为:
根据所述表格处理事件的时间戳,将所述表格处理事件的二进制日志插入所述消息队列中。
可选的,所述系统还包括时间戳产生器,所述计算模块进一步被配置为:
向所述时间戳产生器申请全局有序的时间戳;
将所述时间戳确定为所述目标事务的提交时间戳。
可选的,所述事务开启请求中携带事务标识及对应的存储模块标识,所述计算模块进一步被配置为:
将所述事务标识指示的事务确定为目标事务;
将所述存储模块标识指示的存储模块确定为对应的目标存储模块。
可选的,所述事务开启请求中携带事务标识,所述计算模块进一步被配置为:
将所述事务标识指示的事务确定为目标事务;
根据预设分配规则,确定所述目标事务对应的目标存储模块。
可选的,所述执行模块进一步被配置为:
若检测到自身对应的存储模块生成新的二进制日志,则返回执行所述读取所述存储模块的二进制日志的操作步骤;
相应的,所述排序模块进一步被配置为:
返回执行所述读取每一个所述执行模块的内存序列的操作步骤;或者,
获取所述执行模块中增加的二进制日志,将所述二进制日志放入所述消息队列的队尾。
可选的,所述计算模块进一步被配置为:
记录所述目标存储模块的存储模块标识。
可选的,所述计算模块进一步被配置为:
向所述目标存储模块发送目标事务开启请求;
所述目标存储模块返回开启消息的情况下,执行所述向所述目标存储模块发送执行指令的操作步骤。
可选的,所述存储模块进一步被配置为:
生成二进制日志,并将所述目标事务的提交时间戳记录在所述二进制日志的注释中。
根据本说明书实施例的第二方面,提供了一种数据处理方法,应用于上述第一方面提供的分布式数据库系统中的计算模块,所述方法包括:
接收事务开启请求;
根据所述事务开启请求,确定目标事务及所述目标事务对应的目标存储模块;
向所述目标存储模块发送执行指令,所述执行指令中携带有待执行目标事务;
所述目标存储模块返回目标事务执行成功的消息的情况下,向所述目标存储模块发送提交指令,所述提交指令携带有待提交目标事务和所述目标事务的提交时间戳。
可选的,所述方法还包括:
若检测到表格处理事件,则确定所述表格处理事件的执行逻辑;
根据所述执行逻辑,生成所述表格处理事件的时间戳;
根据所述时间戳,生成所述表格处理事件的二进制日志。
可选的,所述确定所述表格处理事件的执行逻辑,包括:
确定所述表格处理事件的操作类型;
根据所述操作类型,确定所述表格处理事件对应的兼容类型;
根据所述兼容类型,确定所述表格处理事件的执行逻辑。
可选的,所述根据所述操作类型,确定所述表格处理事件对应的兼容类型,包括:
若所述操作类型属于第一类型,则确定所述表格处理事件对应的兼容类型为第一版本兼容第二版本,所述第一版本为所述表格处理事件执行前的版本,所述第二版本为所述表格处理事件执行后的版本;
若所述操作类型属于第二类型,则确定所述表格处理事件对应的兼容类型为第二版本兼容第一版本。
可选的,所述根据所述兼容类型,确定所述表格处理事件的执行逻辑,包括:
若所述表格处理事件对应的兼容类型为第一版本兼容第二版本,则确定所述表格处理事件的执行逻辑为后序执行;
若所述表格处理事件对应的兼容类型为第二版本兼容第一版本,则确定所述表格处理事件的执行逻辑为前序执行。
可选的,所述根据所述执行逻辑,生成所述表格处理事件的时间戳,包括:
若所述表格处理事件的执行逻辑为前序执行,则在生成所有第二版本的数据对应的二进制日志之前,获取所述表格处理事件的时间戳;
若所述表格处理事件的执行逻辑为后序执行,则在生成所有第一版本的数据对应的二进制日志之后,获取所述表格处理事件的时间戳。
可选的,所述向所述目标存储模块发送提交指令之前,还包括:
向时间戳产生器申请全局有序的时间戳;
将所述时间戳确定为所述目标事务的提交时间戳。
可选的,所述事务开启请求中携带事务标识及对应的存储模块标识,所述根据所述事务开启请求,确定目标事务及所述目标事务对应的目标存储模块,包括:
将所述事务标识指示的事务确定为目标事务;
将所述存储模块标识指示的存储模块确定为对应的目标存储模块。
可选的,所述事务开启请求中携带事务标识,所述根据所述事务开启请求,确定目标事务及所述目标事务对应的目标存储模块包括:
将所述事务标识指示的事务确定为目标事务;
根据预设分配规则,确定所述目标事务对应的目标存储模块。
可选的,所述向所述目标存储模块发送执行指令之后,还包括:
记录所述目标存储模块的存储模块标识。
可选的,所述根据所述事务开启请求,确定目标事务及所述目标事务对应的目标存储模块之后,且所述向所述目标存储模块发送执行指令之前,还包括:
向所述目标存储模块发送目标事务开启请求;
所述目标存储模块返回开启消息的情况下,执行所述向所述目标存储模块发送执行指令的操作步骤。
根据本说明书实施例的第三方面,提供了一种数据处理方法,应用于上述第一方面提供的分布式数据库系统中的存储模块,所述方法包括:
接收到执行指令后,根据所述执行指令执行目标事务,所述执行指令中携带有待执行目标事务;
所述目标事务执行成功的情况下,向计算模块返回目标事务执行成功的消息;
接收提交指令,根据所述提交指令对所述目标事务进行提交,并根据所述目标事务的提交时间戳生成二进制日志,所述提交指令携带有待提交目标事务和所述目标事务的提交时间戳。
可选的,所述根据所述目标事务的提交时间戳生成二进制日志,包括:
生成二进制日志,并将所述目标事务的提交时间戳记录在所述二进制日志的注释中。
根据本说明书实施例的第四方面,提供了一种数据处理方法,应用于上述第一方面提供的分布式数据库系统中的排序模块,所述方法包括:
读取每一个执行模块的内存序列;
获取所述内存序列中每一个二进制日志中目标事务的提交时间戳;
按照所述目标事务的提交时间戳,对所述内存序列中的二进制日志进行排序;
将排序后的二进制日志写入消息队列中。
可选的,所述将排序后的二进制日志写入消息队列中之后,还包括:
若检测到执行模块的内存序列发生变化,则返回执行所述读取每一个所述执行模块的内存序列的操作步骤。
可选的,所述将排序后的二进制日志写入消息队列中之后,还包括:
若检测到执行模块的内存序列发生变化,则获取所述执行模块中增加的二进制日志,将所述二进制日志放入所述消息队列的队尾。
可选的,所述将排序后的二进制日志写入消息队列中之后,还包括:
根据表格处理事件的时间戳,将所述表格处理事件的二进制日志插入所述消息队列中。
根据本说明书实施例的第五方面,提供了一种计算设备,包括:
存储器和处理器;
所述存储器用于存储计算机可执行指令,所述处理器用于执行所述计算机可执行指令:
接收事务开启请求;
根据所述事务开启请求,确定目标事务及所述目标事务对应的目标存储模块;
向所述目标存储模块发送执行指令,所述执行指令中携带有待执行目标事务;
所述目标存储模块返回目标事务执行成功的消息的情况下,向所述目标存储模块发送提交指令,所述提交指令携带有待提交目标事务和所述目标事务的提交时间戳。
根据本说明书实施例的第六方面,提供了一种计算设备,包括:
存储器和处理器;
所述存储器用于存储计算机可执行指令,所述处理器用于执行所述计算机可执行指令:
接收到执行指令后,根据所述执行指令执行目标事务,所述执行指令中携带有待执行目标事务;
所述目标事务执行成功的情况下,向计算模块返回目标事务执行成功的消息;
接收提交指令,根据所述提交指令对所述目标事务进行提交,并根据所述目标事务的提交时间戳生成二进制日志,所述提交指令携带有待提交目标事务和所述目标事务的提交时间戳。
根据本说明书实施例的第七方面,提供了一种计算设备,包括:
存储器和处理器;
所述存储器用于存储计算机可执行指令,所述处理器用于执行所述计算机可执行指令:
读取每一个执行模块的内存序列;
获取所述内存序列中每一个二进制日志中目标事务的提交时间戳;
按照所述目标事务的提交时间戳,对所述内存序列中的二进制日志进行排序;
将排序后的二进制日志写入消息队列中。
根据本说明书实施例的第八方面,提供了一种计算机可读存储介质,其存储有计算机可执行指令,该指令被处理器执行时实现上述第二方面任意所述数据处理方法的步骤。
根据本说明书实施例的第九方面,提供了一种计算机可读存储介质,其存储有计算机可执行指令,该指令被处理器执行时实现上述第三方面任意所述数据处理方法的步骤。
根据本说明书实施例的十方面,提供了一种计算机可读存储介质,其存储有计算机可执行指令,该指令被处理器执行时实现上述第四方面任意所述数据处理方法的步骤。
本说明书提供的分布式数据库系统包括计算模块和存储模块,所述计算模块被配置为接收事务开启请求;根据所述事务开启请求,确定目标事务及所述目标事务对应的目标存储模块;向所述目标存储模块发送执行指令;所述目标存储模块返回目标事务执行成功的消息的情况下,向所述目标存储模块发送提交指令,所述提交指令携带有待提交目标事务和所述目标事务的提交时间戳;所述目标存储模块被配置为接收所述执行指令,根据所述执行指令执行所述目标事务;所述目标事务执行成功的情况下,向所述计算模块返回目标事务执行成功的消息;接收所述提交指令,根据所述提交指令对所述目标事务进行提交,并根据所述目标事务的提交时间戳生成二进制日志。如此,每个存储模块都是根据计算模块发送的目标事务的提交时间戳生成的二进制日志,每个二进制日志中都携带一个全局有序的时间戳,使得分布式数据库系统中时间上前后的两次操作可以按序排列,避免了操作的顺序发生错乱。
附图说明
图1是本说明书一实施例提供的一种分布式数据库系统的结构框图;
图2是本说明书一实施例提供的第一种数据处理方法的流程图;
图3是本说明书一实施例提供一种前序执行和后序执行示意图;
图4是本说明书一实施例提供的第二种数据处理方法的流程图;
图5是本说明书一实施例提供的第三种数据处理方法的流程图;
图6是本说明书一实施例提供的第四种数据处理方法的流程图;
图7是本说明书一实施例提供的一种二进制日志生成过程示意图;
图8是本说明书一实施例提供的一种排序过程示意图;
图9是本说明书一实施例提供的第一种计算设备的结构框图;
图10是本说明书一实施例提供的第二种计算设备的结构框图;
图11是本说明书一实施例提供的第三种计算设备的结构框图。
具体实施方式
在下面的描述中阐述了很多具体细节以便于充分理解本说明书。但是本说明书能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本说明书内涵的情况下做类似推广,因此本说明书不受下面公开的具体实施的限制。
在本说明书一个或多个实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本说明书一个或多个实施例中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书一个或多个实施例中可能采用术语第一、第二等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一也可以被称为第二,类似地,第二也可以被称为第一。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
首先,对本说明书一个或多个实施例涉及的名词术语进行解释。
SQL(Structured Query Language,结构化查询语言):是一种特殊目的的编程语言,一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。SQL是高级的非过程化编程语言,允许用户在高层数据结构上工作,它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统,可以使用相同的SQL作为数据输入与管理的接口,SQL可以嵌套,这使它具有极大的灵活性和强大的功能。SQL语言包括四种主要程序设计语言类别的语句:数据定义语言(DDL),数据操作语言(DML),数据控制语言(DCL)和事务控制语言(TCL)。其中,数据操作语言(DML),例如增、删、改等语句;数据定义语言(Data Definition Language,DDL),例如增加列、变更列类型、长度、增加约束等语句。
事务:是恢复和并发控制的基本单位,是由多条SQL语句组成的一个执行单元,具有原子性、一致性、隔离性、持久性4个特性,原子性(atomicity)是指一个事务是一个不可分割的工作单位,事务中包括的操作要么都做,要么都不做;一致性(consistency)是指事务必须是使数据库从一个一致性状态变到另一个一致性状态,一致性与原子性是密切相关的;隔离性(isolation)是指一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰;持久性(durability)也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的,接下来的其他操作或故障不应该对其有任何影响。
MySQL:是一个关系型数据库管理系统,随着MySQL的不断成熟,逐渐用于更多大规模网站和应用。
PolarDB:是新一代关系型云原生数据库,既拥有分布式设计的低成本优势,又具有集中式的易用性,实现了计算模块及存储模块的分离,提供即时生效的可扩展能力和运维能力,软硬一体化设计,满足大规模应用场景需求。
PolarDB-X:PolarDB的分布式版,一个基于MySQL sharding(数据库分片)的分布式数据库,主要由存储模块(MySQL server)与计算模块组成。
TSO:一个中心化的时间戳产生器,提供全局有序的时间戳服务。
binlog:二进制格式的日志文件,用来记录Mysql内部对数据库的改动(只记录对数据的修改操作),主要用于数据库的主从复制以及增量恢复。MySQL官方支持三种binlog数据格式,对应参数为binlog_format,可选值分别为ROW、STATEMENT、MIXED,对应的默认值为MIXED,需要调整为ROW模式,该模式的特点为:每个增删改的SQL,都会在binlog里记录SQL所影响的行在变更前和变更后的值。在MySQL中,每一次DML(增删改等写入,包括DDL)操作都会生成binlog(binary log)日志,此日志在MySQL中是按照操作时间有序的,下游应用可以基于此日志做一些订阅操作(例如数据同步)。
物理binlog:PolarDB-X的每个存储模块的binlog。
逻辑binlog:PolarDB-X层提供的binlog,包含所有存储模块的binlog,对外展现形式是一个kafka消息队列。
Commit指令:提交指令,用于把事务所做的修改保存到数据库。
commit_timestamp:用来标明事务的提交时间,缩写commit_ts。
精卫worker:一个执行工作的模块,与存储模块一一对应,负责读取对应的存储模块的binlog文件,并负责进行解析,同时将解析后的结果生成一个内存序列。
精卫merger:相当于一个归并排序的模块,将多个有序的队列,归并为一个全局有序的队列。
接下来,对本说明书的基本构思进行简述:
目前,在分布式数据库中,每个存储节点执行事务(DML相关的操作)后都会独立生成一个二进制日志,每个存储节点生成的二进制日志在该存储节点内保持有序,然而不同的存储节点生成的二进制日志之间时间先后顺序并不确定,因而在分布式数据库中,时间上前后的两次操作可能会发生在两个不同的存储节点上,下游应用直接订阅两个存储节点的二进制日志,有可能导致这两次操作的顺序发生错乱,从而导致下游应用最终的数据出现不一致。
例如,分布式数据库系统中包括MySQL1、MySQL2和MySQL3,MySQL1内生成了2个二进制日志:日志A1和日志A2,MySQL2内生成了3个二进制日志:日志B1、日志B2和日志B3,MySQL3内生成了2个二进制日志:日志C1和日志C2。现有技术中,只能确定日志A1早于日志A2,日志B1早于日志B2早于日志B3,日志C1早于日志C2,但日志A1、日志A2、日志B1、日志B2、日志B3、日志C1和日志C2之间的先后顺序并不确定,有可能会出现错乱,导致下游应用订阅的数据出现不一样。
本说明书中提供了一种分布式数据库系统,包括计算模块和存储模块(如MySQL),计算模块控制存储模块执行目标事务,存储模块执行成功后向计算模块返回成功消息,此时计算模块会向存储模块发送目标事务的提交时间戳,以使存储模块根据该时间戳生成二进制日志,这种情况下的二进制日志中记录有全局有序的目标事务的提交时间戳,使得分布式数据库系统中所有的二进制日志都是有时间顺序的,从而避免了事务的操作顺序发生错乱,保证了下游应用订阅数据的一致性。
在本说明书中,提供了一种分布式数据库系统,本说明书同时涉及一种数据处理方法,一种计算设备,以及一种计算机可读存储介质,在下面的实施例中逐一进行详细说明。
图1示出了根据本说明书一实施例提供的一种分布式数据库系统的结构框图,具体包括计算模块102和存储模块104。
所述计算模块102,被配置为接收事务开启请求;根据所述事务开启请求,确定目标事务及所述目标事务对应的目标存储模块104;向所述目标存储模块104发送执行指令,所述执行指令中携带有待执行目标事务;所述目标存储模块104返回目标事务执行成功的消息的情况下,向所述目标存储模块104发送提交指令,所述提交指令携带有待提交目标事务和所述目标事务的提交时间戳;
所述目标存储模块104,被配置为接收所述执行指令,根据所述执行指令执行所述目标事务;所述目标事务执行成功的情况下,向所述计算模块102返回目标事务执行成功的消息;接收所述提交指令,根据所述提交指令对所述目标事务进行提交,并根据所述目标事务的提交时间戳生成二进制日志。
一个可选的实施例中,所述系统还包括:多个执行模块和一个排序模块,所述多个执行模块中每一个执行模块均对应有存储模块104;
所述执行模块,被配置为读取自身对应的存储模块104的二进制日志,并根据所述二进制日志生成内存序列;
所述排序模块,被配置为读取每一个所述执行模块的内存序列,获取所述内存序列中每一个二进制日志中目标事务的提交时间戳;按照所述目标事务的提交时间戳,对所述内存序列中的二进制日志进行排序;将排序后的二进制日志写入消息队列中。
一个可选的实施例中,所述计算模块进一步被配置为:
若检测到表格处理事件,则确定所述表格处理事件的执行逻辑;
根据所述执行逻辑,生成所述表格处理事件的时间戳;
根据所述时间戳,生成所述表格处理事件的二进制日志。
一个可选的实施例中,所述计算模块进一步被配置为:
确定所述表格处理事件的操作类型;
根据所述操作类型,确定所述表格处理事件对应的兼容类型;
根据所述兼容类型,确定所述表格处理事件的执行逻辑。
一个可选的实施例中,所述计算模块进一步被配置为:
若所述操作类型属于第一类型,则确定所述表格处理事件对应的兼容类型为第一版本兼容第二版本,所述第一版本为所述表格处理事件执行前的版本,所述第二版本为所述表格处理事件执行后的版本;
若所述操作类型属于第二类型,则确定所述表格处理事件对应的兼容类型为第二版本兼容第一版本。
一个可选的实施例中,所述计算模块进一步被配置为:
若所述表格处理事件对应的兼容类型为第一版本兼容第二版本,则确定所述表格处理事件的执行逻辑为后序执行;
若所述表格处理事件对应的兼容类型为第二版本兼容第一版本,则确定所述表格处理事件的执行逻辑为前序执行。
一个可选的实施例中,所述计算模块进一步被配置为:
若所述表格处理事件的执行逻辑为前序执行,则在生成所有第二版本的数据对应的二进制日志之前,获取所述表格处理事件的时间戳;
若所述表格处理事件的执行逻辑为后序执行,则在生成所有第一版本的数据对应的二进制日志之后,获取所述表格处理事件的时间戳。
一个可选的实施例中,所述排序模块进一步被配置为:
根据所述表格处理事件的时间戳,将所述表格处理事件的二进制日志插入所述消息队列中。
一个可选的实施例中,所述系统还包括时间戳产生器,所述计算模块102进一步被配置为:
向所述时间戳产生器申请全局有序的时间戳;
将所述时间戳确定为所述目标事务的提交时间戳。
一个可选的实施例中,所述事务开启请求中携带事务标识及对应的存储模块标识,所述计算模块102进一步被配置为:
将所述事务标识指示的事务确定为目标事务;
将所述存储模块标识指示的存储模块确定为对应的目标存储模块104。
一个可选的实施例中,所述事务开启请求中携带事务标识,所述计算模块102进一步被配置为:
将所述事务标识指示的事务确定为目标事务;
根据预设分配规则,确定所述目标事务对应的目标存储模块104。
一个可选的实施例中,所述执行模块进一步被配置为:
若检测到自身对应的存储模块104生成新的二进制日志,则返回执行所述读取所述存储模块104的二进制日志的操作步骤;
相应的,所述排序模块进一步被配置为:
返回执行所述读取每一个所述执行模块的内存序列的操作步骤;或者,
获取所述执行模块中增加的二进制日志,将所述二进制日志放入所述消息队列的队尾。
一个可选的实施例中,所述计算模块102进一步被配置为:
记录所述目标存储模块104的存储模块标识。
一个可选的实施例中,所述计算模块102进一步被配置为:
向所述目标存储模块104发送目标事务开启请求;
所述目标存储模块104返回开启消息的情况下,执行所述向所述目标存储模块104发送执行指令的操作步骤。
一个可选的实施例中,所述存储模块104进一步被配置为:
生成二进制日志,并将所述目标事务的提交时间戳记录在所述二进制日志的注释中。
本说明书提供的分布式数据库系统包括计算模块和存储模块,所述计算模块被配置为接收事务开启请求;根据所述事务开启请求,确定目标事务及所述目标事务对应的目标存储模块;向所述目标存储模块发送执行指令;所述目标存储模块返回目标事务执行成功的消息的情况下,向所述目标存储模块发送提交指令,所述提交指令携带有待提交目标事务和所述目标事务的提交时间戳;所述目标存储模块被配置为接收所述执行指令,根据所述执行指令执行所述目标事务;所述目标事务执行成功的情况下,向所述计算模块返回目标事务执行成功的消息;接收所述提交指令,根据所述提交指令对所述目标事务进行提交,并根据所述目标事务的提交时间戳生成二进制日志。如此,每个存储模块都是根据计算模块发送的目标事务的提交时间戳生成的二进制日志,每个二进制日志中都携带一个全局有效的时间戳,使得分布式数据库系统中时间上前后的两次操作生成的二进制日志可以按序排列,从而避免了事务的操作顺序发生错乱,保证了下游应用订阅数据的一致性。
图2示出了根据本说明书一实施例提供的一种数据处理方法的流程图,应用于图1所示的分布式数据库系统中的计算模块,具体包括如下步骤:
步骤202:接收事务开启请求。
实际应用中,当用户要在分布式数据库系统中执行某个事务时,可以通过应用程序向分布式数据库系统中的计算模块发送一个事务开启请求,计算模块接收该事务开启请求,从而开启后续执行事务的整个过程。此处的分布式数据库系统可以是指PolarDB-X,也可以是其他分布式数据库,本说明书对此不进行限制。
步骤204:根据所述事务开启请求,确定目标事务及所述目标事务对应的目标存储模块。
具体的,在接收事务开启请求的基础上,进一步的,将根据所述事务开启请求,确定目标事务及所述目标事务对应的目标存储模块。
其中,所述目标事务是指事务开启请求指示开启的事务,所述目标存储模块是指执行所述目标事务所需涉及到的存储模块。此处的存储模块可以是分布式数据库系统中的单片数据库,例如单片MySQL。
实际应用中,计算模块接收到事务开启请求后,首先需要确定该请求指示执行的具体事务,由于事务最终是由存储模块执行的,因而计算模块还需要进一步确定出执行该事务的存储模块。由于事务是由多条SQL语句组成的执行单元,因而一个事务中可能包括有多个SQL操作,该多个操作可能会由不同的存储模块执行,因而一个事务可能会涉及到多个存储模块,也即确定出的目标存储模块可能为多个。
在本实施例的一个或多个实施方式中,用户要在分布式数据库系统中执行某个事务时,可以直接指定执行该事务的存储模块,此时应用程序会将要执行的事务对应的事务标识,以及执行所述事务的存储模块的标识携带在事务开启请求中发送给计算模块,计算模块可以直接根据接收到的事务开启请求中携带的事务标识及对应的存储模块标识,确定目标事务及所述目标事务对应的目标存储模块,具体实现过程如下:
将所述事务标识指示的事务确定为目标事务;
将所述存储模块标识指示的存储模块确定为对应的目标存储模块。
具体的,事务标识用于标识要执行的事务,存储模块标识用于标识执行事务的存储模块。
例如,用户要在分布式数据库系统中执行事务A,且用户指定了由存储模块1和存储模块2来执行所述事务A,此时用户可以通过某应用程序向分布式数据库系统中的计算模块发送一个事务开启指令,该指令中会携带事务A、存储模块1和存储模块2。计算模块接收到该事务开启指令后,就可以确定出要执行的目标事务为事务A,执行事务A的存储模块为存储模块1和存储模块2。
在事务开启请求中直接携带事务标识及对应的存储模块标识,计算模块直接根据标识即可确定出目标事务及目标事务对应的目标存储模块,确定过程简单易行,不需要计算模块进行复杂的运算,一定程度上节省了计算资源。
在本实施例的一个或多个实施方式中,用户要在分布式数据库系统中执行某个事务时,也可以不指定执行该事务的存储模块,由计算模块根据存储模块的性能属性、负载等参数指定对应的存储模块执行所述目标事务,此时应用程序只将要执行的事务对应的事务标识携带在事务开启请求中发送给计算模块,计算模块确定出要执行的目标事务后,可以指定执行所述目标事务的目标存储模块,具体实现过程如下:
将所述事务标识指示的事务确定为目标事务;
根据预设分配规则,确定所述目标事务对应的目标存储模块。
具体的,预设分配规则是指为待执行的目标事务分配存储模块的规则,该规则由技术人员预先进行设置,可以是负载均衡规则,还可以是存储模块性能规则,本说明书中不对分配规则进行具体限定,只要能为目标事务分配合理的存储模块的规则均可。
例如,预设分配规则为负载均衡,且假设分布式数据库系统包括存储模块1和存储模块2,存储模块1正在执行或待执行的事务有事务A、事务B,存储模块2正在执行或待执行的事务有事务C。此时,某用户通过应用程序向分布式数据库系统中的计算模块发送了一个事务开启指令,该指令中携带事务D,计算模块接收到该事务开启指令后,确定出待执行的目标事务为事务D,然后根据负载均衡规则,确定执行事务D的存储模块为存储模块2。
只在事务开启请求中携带事务标识,计算模块确定出目标事务后,根据预先设置的分配规则,为所述目标事务分配对应的目标存储模块,可以根据性能属性、负载等参数灵活指定执行事务的存储模块,可以适应分布式数据库系统中各个存储模块自身的实际情况,保证了事务可以高效准确执行,适应性更高。
本说明书中既可以直接在事务开启请求中指定目标事务和执行目标事务的目标存储模块,还可以不指定,由计算模块为目标事务分配执行的存储模块,灵活性更高,可以适应不同事务的执行特点,从而可以更高效、更准确的执行目标事务。
步骤206:向所述目标存储模块发送执行指令,所述执行指令中携带有待执行目标事务。
具体的,在根据所述事务开启请求,确定目标事务及所述目标事务对应的目标存储模块的基础上,进一步的,将向所述目标存储模块发送执行指令,所述执行指令中携带有待执行目标事务。
在本实施例的一个或多个实施方式中,计算模块确定出目标事务及执行目标事务的目标存储模块后,目标存储模块并不知道自身被选定要开始执行目标事务了,因此在根据所述事务开启请求,确定目标事务及所述目标事务对应的目标存储模块之后,且所述向所述目标存储模块发送执行指令之前,计算模块还可以通知目标存储模块开启目标事务,具体实现过程如下:
向所述目标存储模块发送目标事务开启请求;
所述目标存储模块返回开启消息的情况下,执行所述向所述目标存储模块发送执行指令的操作步骤。
在本实施例的一个或多个实施方式中,后续目标存储模块执行目标事务后,计算模块还需要向目标存储模块发送提交指令,以使目标存储模块对目标事务进行提交,因而计算模块在向目标存储模块发送执行指令后,还需要记录所述目标存储模块的存储模块标识,从而方便后续向目标存储模块发送提交指令。
步骤208:所述目标存储模块返回目标事务执行成功的消息的情况下,向所述目标存储模块发送提交指令,所述提交指令携带有待提交目标事务和所述目标事务的提交时间戳。
具体的,在向所述目标存储模块发送执行指令的基础上,进一步的,将在所述目标存储模块返回目标事务执行成功的消息的情况下,向所述目标存储模块发送提交指令,所述提交指令携带有待提交目标事务和所述目标事务的提交时间戳。
实际应用中,目标存储模块接收到执行指令后,会执行目标事务,在目标事务执行成功的情况下,会向计算模块返回执行成功的消息,以通知计算模块,其已经成功执行了目标事务,可以提交了。计算模块接收到该执行成功的消息后,就可以控制存储模块对目标事务进行提交。
在本实施例的一个或多个实施方式中,用户是通过应用程序使分布式数据库系统执行对应的目标事务,目标存储模块在目标事务执行成功的情况下,向计算模块返回执行成功的消息,进一步的此时计算模块还可以向应用程序返回目标事务执行完毕的消息,应用程序会向计算模块返回事务提交消息,以使计算模块控制目标存储模块对事务进行提交。
在本实施例的一个或多个实施方式中,为了使各个存储模块提交事务时生成的二进制日志之间是有时间先后顺序的,计算模块在向目标存储模块发送提交指令时,会在该指令中携带目标事务的提交时间戳,因而在向所述目标存储模块发送提交指令之前,计算模块还可以获取全局有序的目标事务的提交时间戳,具体实现方式如下:
向时间戳产生器申请全局有序的时间戳;
将所述时间戳确定为所述目标事务的提交时间戳。
具体的,时间戳产生器可以是分布式数据库系统中的TSO,向TSO获取的目标事务的提交时间戳为commit_timestamp。
实际应用过程中,计算模块除了会接收到与增删改数据相关的DML操作,还有可能会接收到DDL事件,如变更列类型、长度,增加约束等事件。分布式数据库系统在DDL变更过程中,同一个时刻,数据库的Schema元数据会存在两个版本,例如加列操作,新列对部分分片已经可见,对部分分片还未可见,此时会同时产生两个版本的数据。这两个版本的数据在通过逻辑binlog队列往下游系统(例如单机MySQL)进行传递的过程中,需要将DDL事件放在消息队列适当的位置,确保下游系统能正确的接受这两个版本的数据,不会出现同一条数据在下游系统中出现不一致,具体实现过程如下:
若检测到表格处理事件,则确定所述表格处理事件的执行逻辑;
根据所述执行逻辑,生成所述表格处理事件的时间戳;
根据所述时间戳,生成所述表格处理事件的二进制日志。
其中,表格处理事件是指DDL事件,例如,加列、列的长度变长、增加列的默认值、删除列、列的长度变短等事件。
在本实施例的一个或多个实施方式中,确定所述表格处理事件的执行逻辑,具体实现过程可以为:
确定所述表格处理事件的操作类型;
根据所述操作类型,确定所述表格处理事件对应的兼容类型;
根据所述兼容类型,确定所述表格处理事件的执行逻辑。
其中,操作类型是设定好的,不同的操作类型对应不同的兼容类型。
在本实施例的一个或多个实施方式中,根据所述操作类型,确定所述表格处理事件对应的兼容类型,具体实现过程可以为:
若所述操作类型属于第一类型,则确定所述表格处理事件对应的兼容类型为第一版本兼容第二版本,所述第一版本为所述表格处理事件执行前的版本,所述第二版本为所述表格处理事件执行后的版本;
若所述操作类型属于第二类型,则确定所述表格处理事件对应的兼容类型为第二版本兼容第一版本。
具体的,一个时刻的Schema结构(包含表结构等)称为一个版本,DDL事件执行前的版本称为第一版本,DDL事件执行后的版本称为第二版本。需要说明的是,Va版本兼容Vb版本是指:使用Vb版本的数据可以被写入使用Va版本的目标端;从使用Va版本的目标端将该数据读出后,其包含足够的信息,在经过一定的转换后,可以转换为Vb版本的数据,并且和原数据完全相等。
另外,第一类型即为第一版本可以兼容第二版本的操作类型,例如,删除列,列的长度变短,删表,减小列的精度等操作均为第一类型。第二类型即为第二版本可以兼容第一版本的操作类型,例如,加列,列的长度变长,增加列的默认值,创建、删除索引,创建、删除约束(创建唯一键约束),建表,增加列的精度等操作均为第二类型。
在本实施例的一个或多个实施方式中,根据所述兼容类型,确定所述表格处理事件的执行逻辑,具体实现过程可以为:
若所述表格处理事件对应的兼容类型为第一版本兼容第二版本,则确定所述表格处理事件的执行逻辑为后序执行;
若所述表格处理事件对应的兼容类型为第二版本兼容第一版本,则确定所述表格处理事件的执行逻辑为前序执行。
具体的,若所述表格处理事件的执行逻辑为前序执行,则在生成所有第二版本的数据对应的二进制日志之前,获取所述表格处理事件的时间戳;若所述表格处理事件的执行逻辑为后序执行,则在生成所有第一版本的数据对应的二进制日志之后,获取所述表格处理事件的时间戳。
实际应用中,参见图3所示,前序执行是指DDL事件的二进制日志,应该在所有第二版本(V2)数据的二进制日志的最前面,因而在生成所有第二版本(V2)的数据对应的二进制日志之前,获取一个时间戳,将该时间戳作为DDL事件的时间戳,也即,DDL事件应该位于所有的第二版本(V2)的二进制日志之前。后序执行是指DDL事件的二进制日志,应该在所有第一版本(V1)数据的二进制日志的最后面,因而在生成所有第一版本(V1)的数据对应的二进制日志之后,获取一个时间戳,将该时间戳作为DDL事件的时间戳,也即DDL事件应该位于所有的第一版本(V1)的二进制日志之后。
另外,某些表格处理事件(DDL事件)的操作类型,第一版本可以兼容第二版本,第二版本也可以兼容第一版本,此时所述表格处理事件的执行逻辑既可以为后序执行,也可以为前序执行。
在检测到表格处理事件的情况下,根据表格处理事件的执行逻辑,生成所述表格处理事件的时间戳,然后可以根据所述时间戳,生成所述表格处理事件的二进制日志,从而使得该表格处理事件的二进制日志可以处于适当的位置,保证下游应用订阅数据的一致性。
本说明书中提供的数据处理方法,计算模块接收事务开启请求,并根据所述事务开启请求,确定目标事务及所述目标事务对应的目标存储模块;然后向目标存储模块发送执行指令;在目标存储模块返回目标事务执行成功的消息的情况下,向所述目标存储模块发送提交指令,所述提交指令携带有待提交目标事务和所述目标事务的提交时间戳。这种情况下,计算模块可以向时间戳产生器申请一个全局有序的时间戳,将该时间戳作为目标事务的提交时间戳,并发送给目标存储模块,使得后续目标存储模块可以生成带全局有序时间戳的二进制日志,从而使得分布式数据库系统中时间上前后的两次操作生成的二进制日志可以按序排列,避免了事务的操作顺序发生错乱,保证了下游应用订阅数据的一致性。
图4示出了根据本说明书一实施例提供的一种数据处理方法的流程图,应用于图1所示的分布式数据库系统中的存储模块,具体包括如下步骤:
步骤402:接收执行指令,根据所述执行指令执行目标事务,所述执行指令中携带有待执行目标事务。
实际应用中,计算模块确定出目标事务及执行目标事务的目标存储模块后,目标存储模块自身并不知道被选定要开始执行目标事务了,因此目标存储模块在接收到执行指令之前,还会接收到计算模块发送的目标事务开启请求,目标存储模块接收到该目标事务开启请求的情况下,会开启目标事务,并通知计算模块自己准备好执行目标事务了,因而在接收执行指令,根据所述执行指令执行目标事务之前,目标存储模块还应该在接收到目标事务开启请求的情况下,向计算模块返回开启消息。
步骤404:所述目标事务执行成功的情况下,向计算模块返回目标事务执行成功的消息。
具体的,在接收执行指令,根据所述执行指令执行目标事务的基础上,进一步的,将在所述目标事务执行成功的情况下,向计算模块返回目标事务执行成功的消息。
步骤406:接收提交指令,根据所述提交指令对所述目标事务进行提交,并根据所述目标事务的提交时间戳生成二进制日志,所述提交指令携带有待提交目标事务和所述目标事务的提交时间戳。
具体的,在所述目标事务执行成功的情况下,向计算模块返回目标事务执行成功的消息的基础上,进一步的,将接收提交指令,根据所述提交指令对所述目标事务进行提交,并根据所述目标事务的提交时间戳生成二进制日志。
实际应用中,二进制日志即binlog,每个存储模块生成的二进制日志被称作物理binlog。
在本实施例的一个或多个实施方式中,根据所述目标事务的提交时间戳生成二进制日志,具体实现过程可以为:生成二进制日志,并将所述目标事务的提交时间戳记录在所述二进制日志的注释中。
本说明书中提供的数据处理方法,目标存储模块接收执行指令,根据所述执行指令执行目标事务;并在所述目标事务执行成功的情况下,向计算模块返回目标事务执行成功的消息;之后接收提交指令,根据所述提交指令对所述目标事务进行提交,并根据所述目标事务的提交时间戳生成二进制日志。这种情况下,每个存储模块都是根据计算模块发送的目标事务的提交时间戳生成的二进制日志,每个二进制日志中都携带一个全局有序的时间戳,使得分布式数据库系统中时间上前后的两次操作生成的二进制日志可以按序排列,从而避免了事务的操作顺序发生错乱,保证了下游应用订阅数据的一致性。
图5示出了根据本说明书一实施例提供的一种数据处理方法的流程图,应用于分布式数据库系统中的排序模块,具体包括如下步骤:
步骤502:读取每一个执行模块的内存序列。
实际应用中,每一个执行模块都对应有一个存储模块,在排序模块读取每一个执行模块的内存序列之前,执行模块还可以读取自身对应的存储模块的二进制日志,并根据所述二进制日志生成内存序列。
具体的,此处的执行模块可以指PolarDB-X生成的精卫worker,一个执行工作的模块。排序模块可以指PolarDB-X生成的精卫merger,用于管控生成的精卫worker,一个归并排序的模块,可以将多个有序的队列,归并为一个全局有序的队列。
本说明书中每个执行模块都生成了一个内存序列,该内存序列包括其对应的存储模块生成的全部二进制日志,后续对二进制日志进行排序时,只需要获取内存序列中的二进制日志即可,不需要再去分别一个个获取存储模块生成的每个二进制日志,操作简单方便,方便后续进行排序。
步骤504:获取所述内存序列中每一个二进制日志中目标事务的提交时间戳。
具体的,在读取每一个执行模块的内存序列的基础上,进一步的,将获取所述内存序列中每一个二进制日志中目标事务的提交时间戳。
步骤506:按照所述目标事务的提交时间戳,对所述内存序列中的二进制日志进行排序。
具体的,在获取所述内存序列中每一个二进制日志中目标事务的提交时间戳的基础上,进一步的,将按照所述目标事务的提交时间戳,对所述内存序列中的二进制日志进行排序。
步骤508:将排序后的二进制日志写入消息队列中。
具体的,在按照所述目标事务的提交时间戳,对所述内存序列中的二进制日志进行排序的基础上,进一步的,将排序后的二进制日志写入消息队列中。
实际应用中,消息队列可以指kafka消息队列,该消息队列是一个开源的消息队列,将排序后的二进制日志写入消息队列中,即生成了分布式数据库系统的逻辑binlog,下游应用需要订阅分布式数据库中的数据时,可以直接读取该开源的消息队列中的逻辑binlog,即可获得分布式数据库系统中存储模块的各个二进制日志,且该二进制日志在消息队列中都是有序排列的。
在本实施例的一个或多个实施方式中,对存储模块当前各个二进制日志进行排序后,存储模块可能会执行新的事务,生成新的二进制日志,因而执行模块在检测到其对应的存储模块生成新的二进制日志的情况下,可以返回执行读取对应的存储模块的二进制日志,并根据所述二进制日志生成内存序列的操作步骤,此时排序模块可以对所有二进制日志全部重新排序,具体实现过程如下:
若检测到执行模块的内存序列发生变化,则返回执行所述读取每一个所述执行模块的内存序列的操作步骤。
实际应用中,若检测到执行模块的内存序列发生变化,说明执行模块对应的存储模块执行了新的事务,生成了新的二进制日志,此时排序模块会返回执行步骤502-508,对所有二进制日志全部重新排序。
在本实施例的一个或多个实施方式中,对存储模块当前各个二进制日志进行排序后,存储模块可能会执行新的事务,生成新的二进制日志,因而执行模块在检测到其对应的存储模块生成新的二进制日志的情况下,可以返回执行读取对应的存储模块的二进制日志,并根据所述二进制日志生成内存序列的操作步骤,由于新生成的二进制日志在时间上一定是晚于已经排序好的二进制日志的,因而此时排序模块可以直接将执行模块中增加的二进制日志放入消息队列的队尾。
本说明书中在存储模块执行了新的事务,生成新的二进制日志的情况下,既可以对所有的二进制日志全部重新排序,也可以直接将新生成的二进制日志放入消息队列的队尾,实现了实时对存储模块的所有二进制日志进行排序,且排序方式灵活,可以适用不同情况,使得排序结果更高效准确。
在本实施例的一个或多个实施方式中,若计算模块检测到了表格处理事件,则可以根据表格处理事件的时间戳,生成表格处理事件的二进制日志,此情况下,排序模块可以根据表格处理事件的时间戳,将所述表格处理事件的二进制日志插入所述消息队列中。
在检测到表格处理事件的情况下,可以根据表格处理事件的执行逻辑,生成所述表格处理事件的时间戳,然后可以根据所述时间戳,生成所述表格处理事件的二进制日志,且可以根据该表格处理事件的时间戳,将该表格处理事件插入消息队列中,从而使得该表格处理事件可以放在消息队列中适当的位置,确保下游系统能正确的接收表格处理事件执行前和执行后两个版本的数据,避免了同一条数据在下游系统中出现不一致的情况。
本说明书提供的数据处理方法,排序模块可以读取每一个执行模块的内存序列,并获取所述内存序列中每一个二进制日志中目标事务的提交时间戳;然后按照所述目标事务的提交时间戳,对所述内存序列中的二进制日志进行排序,将排序后的二进制日志写入消息队列中。这种情况下,消息队列中包括分布式数据库系统中所有存储模块生成的二进制日志,且都是按时间先后顺序有序排列,下游应用需要订阅分布式数据库中的数据时,可以直接读取该消息队列,即可避免事务的操作顺序发生错乱,保证订阅数据的一致性。
以本说明书提供的数据处理方法在分布式数据库系统中整体的应用为例,对所述数据处理方法进行进一步说明。其中,图6示出了本说明书一实施例提供的一种数据处理方法的处理流程图,具体包括以下步骤:
步骤602:计算模块接收应用程序发送的事务开启请求,并根据所述事务开启请求,确定目标事务及所述目标事务对应的目标存储模块。
实际应用中,在一个事务包括多个操作的情况下,应用程序向计算模块发送事务开启请求时,可以分多次发送,并将多个操作的标识分别携带在多个请求中,因而计算模块可以分多次接收到事务开启请求,每个请求中携带事务包括的一个操作。例如,目标事务为事务A,包括操作1和操作2,此时计算模块会先接收到一个携带操作1标识的请求,然后控制对应的存储模块执行操作1,在操作1执行完毕后,计算模块会再接收到一个携带操作2标识的请求,然后再控制对应的存储模块执行操作2,执行完毕后,再对整个事务A进行提交。
步骤604:计算模块向所述目标存储模块发送目标事务开启请求。
步骤606:目标存储模块接收所述目标事务开启请求,开启目标事务,并向计算模块返回开启消息。
步骤608:计算模块向所述目标存储模块发送执行指令,并记录所述目标存储模块的存储模块标识,所述执行指令中携带有待执行目标事务。
步骤610:目标存储模块接收所述执行指令,根据所述执行指令执行所述目标事务,并在所述目标事务执行成功的情况下,向所述计算模块返回目标事务执行成功的消息。
步骤612:计算模块向应用程序返回所述目标事务执行成功的消息,并接收应用程序发送的提交指令。
步骤614:计算模块向时间戳产生器申请全局有序的时间戳,将所述时间戳确定为所述目标事务的提交时间戳,并向所述目标存储模块发送提交指令,所述提交指令携带有待提交目标事务和所述目标事务的提交时间戳。
步骤616:目标存储模块接收所述提交指令,根据所述提交指令对所述目标事务进行提交,并根据所述目标事务的提交时间戳生成二进制日志。
步骤618:执行模块读取自身对应的存储模块的二进制日志,并根据所述二进制日志生成内存序列。
步骤620:排序模块读取每一个执行模块的内存序列,并获取所述内存序列中每一个二进制日志中目标事务的提交时间戳。
步骤622:排序模块按照所述目标事务的提交时间戳,对所述内存序列中的二进制日志进行排序,并将排序后的二进制日志写入消息队列中。
需要说明的是,虽然一个事务可能会包括多个SQL操作,但是一个事务内的SQL操作本就是有序的(即一个SQL操作执行完毕,才会开始执行下一个SQL操作),不需要再进行排序,只有不同事务之间前后顺序才可能会发生错乱,因而本说明书中的提交时间戳是针对事务整体的,也即一个事务对应一个提交时间戳。
步骤624:计算模块检测到表格处理事件,若所述表格处理事件的操作类型属于第一类型,则确定所述表格处理事件对应的兼容类型为第一版本兼容第二版本,并确定所述表格处理事件的执行逻辑为后序执行,在生成所有第一版本的数据对应的二进制日志之后,获取所述表格处理事件的时间戳;若所述表格处理事件的操作类型属于第二类型,则确定所述表格处理事件对应的兼容类型为第二版本兼容第一版本,并确定所述表格处理事件的执行逻辑为前序执行,在生成所有第二版本的数据对应的二进制日志之前,获取所述表格处理事件的时间戳;根据所述时间戳,生成所述表格处理事件的二进制日志。
步骤626:排序模块根据表格处理事件的时间戳,将所述表格处理事件的二进制日志插入所述消息队列中。
接下来,参见图7,假设事务中包括2个SQL操作,对上述完整的二进制日志生成过程进行举例说明:
应用程序向计算模块发送事务开启请求,该事务开启请求指示开启的目标事务为事务A,该事务A包括2个操作:操作1和操作2,且操作1由存储模块1执行,操作2由存储模块2执行。应用程序向计算模块发送操作1,计算模块向存储模块1发送操作1开启请求,存储模块1接收到该开启请求后,向计算模块返回开启消息,计算模块接收到该开启消息后,向存储模块1发送操作1的执行指令,存储模块1接收到该执行指令后,执行操作1,操作1执行成功后,向计算模块返回操作1执行成功的消息。
计算模块接收到操作1执行成功的消息后,还可以将该操作1执行成功的消息返回给应用程序,进一步的应用程序将向计算模块发送操作2,之后计算模块可以向存储模块2发送操作2的开启请求,存储模块2接收到该开启请求后,向计算模块返回开启消息,计算模块接收到该开启消息后,向存储模块2发送操作2的执行指令,存储模块2接收到该执行指令后,执行操作2,操作2执行成功后,向计算模块返回操作2执行成功的消息。
计算模块接收到操作2执行成功的消息,向应用程序返回事务A执行完毕的消息(即操作2执行成功的消息),应用程序接收到该消息后,向计算模块发送提交指令,计算模块向时间戳产生器获取全局有序的时间戳,然后将该时间戳作为事务A的提交时间戳发送给存储模块1和存储模块2,存储模块1和存储模块2分别根据该提交时间戳生成事务A的二进制日志,并返回成功生成二进制日志的消息。
接下来,结合附图8,对上述排序过程进行完整举例说明:
假设有4个存储模块,分别为存储模块1、存储模块2、存储模块3、存储模块4,其分别对应执行模块1、执行模块2、执行模块3、执行模块4。假设存储模块1中生成了二进制日志1(时间戳为0002)、二进制日志2(时间戳为0000),存储模块2中生成了二进制日志3(时间戳为0005)、二进制日志4(时间戳为0001),存储模块3中生成了二进制日志5(时间戳为0006)、二进制日志6(时间戳为0003),存储模块4中生成了二进制日志7(时间戳为0007)、二进制日志8(时间戳为0004)。执行模块1、执行模块2、执行模块3、执行模块4分别生成对应的内存序列,排序模块读取4个执行模块的内存序列,得到8个二进制日志,将其按照时间戳进行排序,得到二进制日志2、二进制日志4、二进制日志1、二进制日志6、二进制日志8、二进制日志3、二进制日志5、二进制日志7,将该8个二进制日志按照排好的顺序放入消息队列中,即生成逻辑binlog。
本说明书中提供的数据处理方法,目标存储模块可以根据目标事务的提交时间戳生成二进制日志,然后由排序模块按照所述目标事务的提交时间戳,对所有二进制日志进行排序,将排序后的二进制日志写入消息队列中。这种情况下,每个二进制日志中都携带一个全局有序的时间戳,消息队列中会包括分布式数据库系统中所有存储模块生成的二进制日志,且都是按时间先后顺序有序排列,下游应用需要订阅分布式数据库中的数据时,可以直接读取该消息队列,使得分布式数据库系统中时间上前后的两次操作生成的二进制日志都是按序排列,从而避免了事务的操作顺序发生错乱,保证了下游应用订阅数据的一致性。
需要说明的是,此实施例中的技术方案与上述的图2、图4和图5所示的数据处理方法的技术方案属于同一构思,该数据处理方法的技术方案未详细描述的细节内容,均可以参见上述图2、图4和图5所示的数据处理方法的技术方案的描述。
图9示出了根据本说明书一实施例提供的一种计算设备900的结构框图。该计算设备900的部件包括但不限于存储器910和处理器920。处理器920与存储器910通过总线930相连接,数据库950用于保存数据。
计算设备900还包括接入设备940,接入设备940使得计算设备900能够经由一个或多个网络960通信。这些网络的示例包括公用交换电话网(PSTN)、局域网(LAN)、广域网(WAN)、个域网(PAN)或诸如因特网的通信网络的组合。接入设备940可以包括有线或无线的任何类型的网络接口(例如,网络接口卡(NIC))中的一个或多个,诸如IEEE802.11无线局域网(WLAN)无线接口、全球微波互联接入(Wi-MAX)接口、以太网接口、通用串行总线(USB)接口、蜂窝网络接口、蓝牙接口、近场通信(NFC)接口,等等。
在本说明书的一个实施例中,计算设备900的上述部件以及图9中未示出的其他部件也可以彼此相连接,例如通过总线。应当理解,图9所示的计算设备结构框图仅仅是出于示例的目的,而不是对本说明书范围的限制。本领域技术人员可以根据需要,增添或替换其他部件。
计算设备900可以是任何类型的静止或移动计算设备,包括移动计算机或移动计算设备(例如,平板计算机、个人数字助理、膝上型计算机、笔记本计算机、上网本等)、移动电话(例如,智能手机)、可佩戴的计算设备(例如,智能手表、智能眼镜等)或其他类型的移动设备,或者诸如台式计算机或PC的静止计算设备。计算设备900还可以是移动式或静止式的服务器。
其中,处理器920用于执行如下计算机可执行指令:
接收事务开启请求;
根据所述事务开启请求,确定目标事务及所述目标事务对应的目标存储模块;
向所述目标存储模块发送执行指令,所述执行指令中携带有待执行目标事务;
所述目标存储模块返回目标事务执行成功的消息的情况下,向所述目标存储模块发送提交指令,所述提交指令携带有待提交目标事务和所述目标事务的提交时间戳。
图10示出了根据本说明书一实施例提供的一种计算设备1000的结构框图。该计算设备1000的部件包括但不限于存储器1010和处理器1020。处理器1020与存储器1010通过总线1030相连接,数据库1050用于保存数据。
计算设备1000还包括接入设备1040,接入设备1040使得计算设备1000能够经由一个或多个网络1060通信。这些网络的示例包括公用交换电话网(PSTN)、局域网(LAN)、广域网(WAN)、个域网(PAN)或诸如因特网的通信网络的组合。接入设备1040可以包括有线或无线的任何类型的网络接口(例如,网络接口卡(NIC))中的一个或多个,诸如IEEE 802.11无线局域网(WLAN)无线接口、全球微波互联接入(Wi-MAX)接口、以太网接口、通用串行总线(USB)接口、蜂窝网络接口、蓝牙接口、近场通信(NFC)接口,等等。
在本说明书的一个实施例中,计算设备1000的上述部件以及图10中未示出的其他部件也可以彼此相连接,例如通过总线。应当理解,图10所示的计算设备结构框图仅仅是出于示例的目的,而不是对本说明书范围的限制。本领域技术人员可以根据需要,增添或替换其他部件。
计算设备1000可以是任何类型的静止或移动计算设备,包括移动计算机或移动计算设备(例如,平板计算机、个人数字助理、膝上型计算机、笔记本计算机、上网本等)、移动电话(例如,智能手机)、可佩戴的计算设备(例如,智能手表、智能眼镜等)或其他类型的移动设备,或者诸如台式计算机或PC的静止计算设备。计算设备1000还可以是移动式或静止式的服务器。
其中,处理器1020用于执行如下计算机可执行指令:
接收到执行指令后,根据所述执行指令执行目标事务,所述执行指令中携带有待执行目标事务;
所述目标事务执行成功的情况下,向计算模块返回目标事务执行成功的消息;
接收提交指令,根据所述提交指令对所述目标事务进行提交,并根据所述目标事务的提交时间戳生成二进制日志,所述提交指令携带有待提交目标事务和所述目标事务的提交时间戳。
图11示出了根据本说明书一实施例提供的一种计算设备1100的结构框图。该计算设备1100的部件包括但不限于存储器1110和处理器1120。处理器1120与存储器1110通过总线1130相连接,数据库1150用于保存数据。
计算设备1100还包括接入设备1140,接入设备1140使得计算设备1100能够经由一个或多个网络1160通信。这些网络的示例包括公用交换电话网(PSTN)、局域网(LAN)、广域网(WAN)、个域网(PAN)或诸如因特网的通信网络的组合。接入设备1140可以包括有线或无线的任何类型的网络接口(例如,网络接口卡(NIC))中的一个或多个,诸如IEEE 802.11无线局域网(WLAN)无线接口、全球微波互联接入(Wi-MAX)接口、以太网接口、通用串行总线(USB)接口、蜂窝网络接口、蓝牙接口、近场通信(NFC)接口,等等。
在本说明书的一个实施例中,计算设备1100的上述部件以及图11中未示出的其他部件也可以彼此相连接,例如通过总线。应当理解,图11所示的计算设备结构框图仅仅是出于示例的目的,而不是对本说明书范围的限制。本领域技术人员可以根据需要,增添或替换其他部件。
计算设备1100可以是任何类型的静止或移动计算设备,包括移动计算机或移动计算设备(例如,平板计算机、个人数字助理、膝上型计算机、笔记本计算机、上网本等)、移动电话(例如,智能手机)、可佩戴的计算设备(例如,智能手表、智能眼镜等)或其他类型的移动设备,或者诸如台式计算机或PC的静止计算设备。计算设备1100还可以是移动式或静止式的服务器。
其中,处理器1120用于执行如下计算机可执行指令:
读取每一个执行模块的内存序列;
获取所述内存序列中每一个二进制日志中目标事务的提交时间戳;
按照所述目标事务的提交时间戳,对所述内存序列中的二进制日志进行排序;
将排序后的二进制日志写入消息队列中。
上述为本实施例的三种计算设备的示意性方案。需要说明的是,该计算设备的技术方案与上述的数据处理方法的技术方案属于同一构思,计算设备的技术方案未详细描述的细节内容,均可以参见上述数据处理方法的技术方案的描述。
本说明书一实施例还提供一种计算机可读存储介质,其存储有计算机指令,该指令被处理器执行时以用于:
接收事务开启请求;
根据所述事务开启请求,确定目标事务及所述目标事务对应的目标存储模块;
向所述目标存储模块发送执行指令,所述执行指令中携带有待执行目标事务;
所述目标存储模块返回目标事务执行成功的消息的情况下,向所述目标存储模块发送提交指令,所述提交指令携带有待提交目标事务和所述目标事务的提交时间戳。
本说明书一实施例还提供一种计算机可读存储介质,其存储有计算机指令,该指令被处理器执行时以用于:
接收到执行指令后,根据所述执行指令执行目标事务,所述执行指令中携带有待执行目标事务;
所述目标事务执行成功的情况下,向计算模块返回目标事务执行成功的消息;
接收提交指令,根据所述提交指令对所述目标事务进行提交,并根据所述目标事务的提交时间戳生成二进制日志,所述提交指令携带有待提交目标事务和所述目标事务的提交时间戳。
本说明书一实施例还提供一种计算机可读存储介质,其存储有计算机指令,该指令被处理器执行时以用于:
读取每一个执行模块的内存序列;
获取所述内存序列中每一个二进制日志中目标事务的提交时间戳;
按照所述目标事务的提交时间戳,对所述内存序列中的二进制日志进行排序;
将排序后的二进制日志写入消息队列中。
上述为本实施例的三种计算机可读存储介质的示意性方案。需要说明的是,该存储介质的技术方案与上述的数据处理方法的技术方案属于同一构思,存储介质的技术方案未详细描述的细节内容,均可以参见上述数据处理方法的技术方案的描述。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
所述计算机指令包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本说明书并不受所描述的动作顺序的限制,因为依据本说明书,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本说明书所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
以上公开的本说明书优选实施例只是用于帮助阐述本说明书。可选实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施方式。显然,根据本说明书的内容,可作很多的修改和变化。本说明书选取并具体描述这些实施例,是为了更好地解释本说明书的原理和实际应用,从而使所属技术领域技术人员能很好地理解和利用本说明书。本说明书仅受权利要求书及其全部范围和等效物的限制。
Claims (38)
1.一种分布式数据库系统,包括计算模块和存储模块;
所述计算模块,被配置为接收事务开启请求;根据所述事务开启请求,确定目标事务及所述目标事务对应的目标存储模块;向所述目标存储模块发送执行指令,所述执行指令中携带有待执行目标事务;所述目标存储模块返回目标事务执行成功的消息的情况下,向所述目标存储模块发送提交指令,所述提交指令携带有待提交目标事务和所述目标事务的提交时间戳;
所述目标存储模块,被配置为接收所述执行指令,根据所述执行指令执行所述目标事务;所述目标事务执行成功的情况下,向所述计算模块返回目标事务执行成功的消息;接收所述提交指令,根据所述提交指令对所述目标事务进行提交,并根据所述目标事务的提交时间戳生成二进制日志。
2.根据权利要求1所述的分布式数据库系统,所述系统还包括:多个执行模块和一个排序模块,所述多个执行模块中每一个执行模块均对应有存储模块;
所述执行模块,被配置为读取自身对应的存储模块的二进制日志,并根据所述二进制日志生成内存序列;
所述排序模块,被配置为读取每一个所述执行模块的内存序列,获取所述内存序列中每一个二进制日志中目标事务的提交时间戳;按照所述目标事务的提交时间戳,对所述内存序列中的二进制日志进行排序;将排序后的二进制日志写入消息队列中。
3.根据权利要求2所述的分布式数据库系统,所述计算模块进一步被配置为:
若检测到表格处理事件,则确定所述表格处理事件的执行逻辑;
根据所述执行逻辑,生成所述表格处理事件的时间戳;
根据所述时间戳,生成所述表格处理事件的二进制日志。
4.根据权利要求3所述的分布式数据库系统,所述计算模块进一步被配置为:
确定所述表格处理事件的操作类型;
根据所述操作类型,确定所述表格处理事件对应的兼容类型;
根据所述兼容类型,确定所述表格处理事件的执行逻辑。
5.根据权利要求4所述的分布式数据库系统,所述计算模块进一步被配置为:
若所述操作类型属于第一类型,则确定所述表格处理事件对应的兼容类型为第一版本兼容第二版本,所述第一版本为所述表格处理事件执行前的版本,所述第二版本为所述表格处理事件执行后的版本;
若所述操作类型属于第二类型,则确定所述表格处理事件对应的兼容类型为第二版本兼容第一版本。
6.根据权利要求5所述的分布式数据库系统,所述计算模块进一步被配置为:
若所述表格处理事件对应的兼容类型为第一版本兼容第二版本,则确定所述表格处理事件的执行逻辑为后序执行;
若所述表格处理事件对应的兼容类型为第二版本兼容第一版本,则确定所述表格处理事件的执行逻辑为前序执行。
7.根据权利要求6所述的分布式数据库系统,所述计算模块进一步被配置为:
若所述表格处理事件的执行逻辑为前序执行,则在生成所有第二版本的数据对应的二进制日志之前,获取所述表格处理事件的时间戳;
若所述表格处理事件的执行逻辑为后序执行,则在生成所有第一版本的数据对应的二进制日志之后,获取所述表格处理事件的时间戳。
8.根据权利要求3所述的分布式数据库系统,所述排序模块进一步被配置为:
根据所述表格处理事件的时间戳,将所述表格处理事件的二进制日志插入所述消息队列中。
9.根据权利要求1所述的分布式数据库系统,所述系统还包括时间戳产生器,所述计算模块进一步被配置为:
向所述时间戳产生器申请全局有序的时间戳;
将所述时间戳确定为所述目标事务的提交时间戳。
10.根据权利要求1所述的分布式数据库系统,所述事务开启请求中携带事务标识及对应的存储模块标识,所述计算模块进一步被配置为:
将所述事务标识指示的事务确定为目标事务;
将所述存储模块标识指示的存储模块确定为对应的目标存储模块。
11.根据权利要求1所述的分布式数据库系统,所述事务开启请求中携带事务标识,所述计算模块进一步被配置为:
将所述事务标识指示的事务确定为目标事务;
根据预设分配规则,确定所述目标事务对应的目标存储模块。
12.根据权利要求2所述的分布式数据库系统,所述执行模块进一步被配置为:
若检测到自身对应的存储模块生成新的二进制日志,则返回执行所述读取所述存储模块的二进制日志的操作步骤;
相应的,所述排序模块进一步被配置为:
返回执行所述读取每一个所述执行模块的内存序列的操作步骤;或者,
获取所述执行模块中增加的二进制日志,将所述二进制日志放入所述消息队列的队尾。
13.根据权利要求11所述的分布式数据库系统,所述计算模块进一步被配置为:
记录所述目标存储模块的存储模块标识。
14.根据权利要求1所述的分布式数据库系统,所述计算模块进一步被配置为:
向所述目标存储模块发送目标事务开启请求;
所述目标存储模块返回开启消息的情况下,执行所述向所述目标存储模块发送执行指令的操作步骤。
15.根据权利要求1所述的分布式数据库系统,所述存储模块进一步被配置为:
生成二进制日志,并将所述目标事务的提交时间戳记录在所述二进制日志的注释中。
16.一种数据处理方法,应用于分布式数据库系统中的计算模块,所述方法包括:
接收事务开启请求;
根据所述事务开启请求,确定目标事务及所述目标事务对应的目标存储模块;
向所述目标存储模块发送执行指令,所述执行指令中携带有待执行目标事务;
所述目标存储模块返回目标事务执行成功的消息的情况下,向所述目标存储模块发送提交指令,所述提交指令携带有待提交目标事务和所述目标事务的提交时间戳。
17.根据权利要求16所述的数据处理方法,所述方法还包括:
若检测到表格处理事件,则确定所述表格处理事件的执行逻辑;
根据所述执行逻辑,生成所述表格处理事件的时间戳;
根据所述时间戳,生成所述表格处理事件的二进制日志。
18.根据权利要求17所述的数据处理方法,所述确定所述表格处理事件的执行逻辑,包括:
确定所述表格处理事件的操作类型;
根据所述操作类型,确定所述表格处理事件对应的兼容类型;
根据所述兼容类型,确定所述表格处理事件的执行逻辑。
19.根据权利要求18所述的数据处理方法,所述根据所述操作类型,确定所述表格处理事件对应的兼容类型,包括:
若所述操作类型属于第一类型,则确定所述表格处理事件对应的兼容类型为第一版本兼容第二版本,所述第一版本为所述表格处理事件执行前的版本,所述第二版本为所述表格处理事件执行后的版本;
若所述操作类型属于第二类型,则确定所述表格处理事件对应的兼容类型为第二版本兼容第一版本。
20.根据权利要求19所述的数据处理方法,所述根据所述兼容类型,确定所述表格处理事件的执行逻辑,包括:
若所述表格处理事件对应的兼容类型为第一版本兼容第二版本,则确定所述表格处理事件的执行逻辑为后序执行;
若所述表格处理事件对应的兼容类型为第二版本兼容第一版本,则确定所述表格处理事件的执行逻辑为前序执行。
21.根据权利要求20所述的数据处理方法,所述根据所述执行逻辑,生成所述表格处理事件的时间戳,包括:
若所述表格处理事件的执行逻辑为前序执行,则在生成所有第二版本的数据对应的二进制日志之前,获取所述表格处理事件的时间戳;
若所述表格处理事件的执行逻辑为后序执行,则在生成所有第一版本的数据对应的二进制日志之后,获取所述表格处理事件的时间戳。
22.根据权利要求16所述的数据处理方法,所述向所述目标存储模块发送提交指令之前,还包括:
向时间戳产生器申请全局有序的时间戳;
将所述时间戳确定为所述目标事务的提交时间戳。
23.根据权利要求16所述的数据处理方法,所述事务开启请求中携带事务标识及对应的存储模块标识,所述根据所述事务开启请求,确定目标事务及所述目标事务对应的目标存储模块,包括:
将所述事务标识指示的事务确定为目标事务;
将所述存储模块标识指示的存储模块确定为对应的目标存储模块。
24.根据权利要求16所述的数据处理方法,所述事务开启请求中携带事务标识,所述根据所述事务开启请求,确定目标事务及所述目标事务对应的目标存储模块包括:
将所述事务标识指示的事务确定为目标事务;
根据预设分配规则,确定所述目标事务对应的目标存储模块。
25.根据权利要求24所述的数据处理方法,所述向所述目标存储模块发送执行指令之后,还包括:
记录所述目标存储模块的存储模块标识。
26.根据权利要求16所述的数据处理方法,所述根据所述事务开启请求,确定目标事务及所述目标事务对应的目标存储模块之后,且所述向所述目标存储模块发送执行指令之前,还包括:
向所述目标存储模块发送目标事务开启请求;
所述目标存储模块返回开启消息的情况下,执行所述向所述目标存储模块发送执行指令的操作步骤。
27.一种数据处理方法,应用于分布式数据库系统中的存储模块,所述方法包括:
接收到执行指令后,根据所述执行指令执行目标事务,所述执行指令中携带有待执行目标事务;
所述目标事务执行成功的情况下,向计算模块返回目标事务执行成功的消息;
接收提交指令,根据所述提交指令对所述目标事务进行提交,并根据所述目标事务的提交时间戳生成二进制日志,所述提交指令携带有待提交目标事务和所述目标事务的提交时间戳。
28.根据权利要求27所述的数据处理方法,所述根据所述目标事务的提交时间戳生成二进制日志,包括:
生成二进制日志,并将所述目标事务的提交时间戳记录在所述二进制日志的注释中。
29.一种数据处理方法,应用于分布式数据库系统中的排序模块,所述方法包括:
读取每一个执行模块的内存序列;
获取所述内存序列中每一个二进制日志中目标事务的提交时间戳;
按照所述目标事务的提交时间戳,对所述内存序列中的二进制日志进行排序;
将排序后的二进制日志写入消息队列中。
30.根据权利要求29所述的数据处理方法,所述将排序后的二进制日志写入消息队列中之后,还包括:
若检测到执行模块的内存序列发生变化,则返回执行所述读取每一个所述执行模块的内存序列的操作步骤。
31.根据权利要求29所述的数据处理方法,所述将排序后的二进制日志写入消息队列中之后,还包括:
若检测到执行模块的内存序列发生变化,则获取所述执行模块中增加的二进制日志,将所述二进制日志放入所述消息队列的队尾。
32.根据权利要求29所述的数据处理方法,所述将排序后的二进制日志写入消息队列中之后,还包括:
根据表格处理事件的时间戳,将所述表格处理事件的二进制日志插入所述消息队列中。
33.一种计算设备,包括:
存储器和处理器;
所述存储器用于存储计算机可执行指令,所述处理器用于执行所述计算机可执行指令:
接收事务开启请求;
根据所述事务开启请求,确定目标事务及所述目标事务对应的目标存储模块;
向所述目标存储模块发送执行指令,所述执行指令中携带有待执行目标事务;
所述目标存储模块返回目标事务执行成功的消息的情况下,向所述目标存储模块发送提交指令,所述提交指令携带有待提交目标事务和所述目标事务的提交时间戳。
34.一种计算设备,包括:
存储器和处理器;
所述存储器用于存储计算机可执行指令,所述处理器用于执行所述计算机可执行指令:
接收到执行指令后,根据所述执行指令执行目标事务,所述执行指令中携带有待执行目标事务;
所述目标事务执行成功的情况下,向计算模块返回目标事务执行成功的消息;
接收提交指令,根据所述提交指令对所述目标事务进行提交,并根据所述目标事务的提交时间戳生成二进制日志,所述提交指令携带有待提交目标事务和所述目标事务的提交时间戳。
35.一种计算设备,包括:
存储器和处理器;
所述存储器用于存储计算机可执行指令,所述处理器用于执行所述计算机可执行指令:
读取每一个执行模块的内存序列;
获取所述内存序列中每一个二进制日志中目标事务的提交时间戳;
按照所述目标事务的提交时间戳,对所述内存序列中的二进制日志进行排序;
将排序后的二进制日志写入消息队列中。
36.一种计算机可读存储介质,其存储有计算机指令,该指令被处理器执行时实现权利要求16至26任意一项所述数据处理方法的步骤。
37.一种计算机可读存储介质,其存储有计算机指令,该指令被处理器执行时实现权利要求27至28任意一项所述数据处理方法的步骤。
38.一种计算机可读存储介质,其存储有计算机指令,该指令被处理器执行时实现权利要求29至32任意一项所述数据处理方法的步骤。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010721315.0A CN113297320B (zh) | 2020-07-24 | 2020-07-24 | 分布式数据库系统及数据处理方法 |
PCT/CN2021/107243 WO2022017347A1 (zh) | 2020-07-24 | 2021-07-20 | 分布式数据库系统及数据处理方法 |
US18/101,049 US20230161758A1 (en) | 2020-07-24 | 2023-01-24 | Distributed Database System and Data Processing Method |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010721315.0A CN113297320B (zh) | 2020-07-24 | 2020-07-24 | 分布式数据库系统及数据处理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113297320A true CN113297320A (zh) | 2021-08-24 |
CN113297320B CN113297320B (zh) | 2024-05-14 |
Family
ID=77318655
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010721315.0A Active CN113297320B (zh) | 2020-07-24 | 2020-07-24 | 分布式数据库系统及数据处理方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US20230161758A1 (zh) |
CN (1) | CN113297320B (zh) |
WO (1) | WO2022017347A1 (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113448757A (zh) * | 2021-08-30 | 2021-09-28 | 阿里云计算有限公司 | 消息处理方法、装置、设备、存储介质和系统 |
CN113656384A (zh) * | 2021-10-18 | 2021-11-16 | 阿里云计算有限公司 | 数据处理方法、分布式数据库系统、电子设备及存储介质 |
CN114691307A (zh) * | 2022-03-16 | 2022-07-01 | 阿里巴巴(中国)有限公司 | 事务处理方法及计算机系统 |
CN114925123A (zh) * | 2022-04-24 | 2022-08-19 | 杭州悦数科技有限公司 | 一种分布式的图数据库与图计算系统间的数据传输方法 |
WO2023061249A1 (zh) * | 2021-10-11 | 2023-04-20 | 阿里云计算有限公司 | 分布式数据库的数据处理方法、系统、设备和存储介质 |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114691051B (zh) * | 2022-05-30 | 2022-10-04 | 恒生电子股份有限公司 | 数据处理方法以及装置 |
CN115658805B (zh) * | 2022-09-15 | 2023-10-17 | 星环信息科技(上海)股份有限公司 | 一种事务一致性管理引擎及方法 |
CN115905402B (zh) * | 2022-09-26 | 2023-07-18 | 北京奥星贝斯科技有限公司 | 处理事务日志的方法及装置 |
CN117131060B (zh) * | 2023-07-26 | 2024-08-06 | 泽拓科技(深圳)有限责任公司 | 分布式数据库并发控制方法、系统、计算机设备 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102037463A (zh) * | 2008-02-26 | 2011-04-27 | 甲骨文国际公司 | 使用全局确认的提交进行分布式事务的基于日志的复制 |
WO2019037617A1 (zh) * | 2017-08-25 | 2019-02-28 | 阿里巴巴集团控股有限公司 | 数据事务处理方法、装置以及电子设备 |
CN110018884A (zh) * | 2019-03-19 | 2019-07-16 | 阿里巴巴集团控股有限公司 | 分布式事务处理方法、协调装置、数据库及电子设备 |
CN110196760A (zh) * | 2018-07-12 | 2019-09-03 | 腾讯科技(深圳)有限公司 | 分布式事务一致性实现方法及装置 |
CN110457157A (zh) * | 2019-08-05 | 2019-11-15 | 腾讯科技(深圳)有限公司 | 分布式事务异常处理方法、装置、计算机设备及存储介质 |
CN111427966A (zh) * | 2020-06-10 | 2020-07-17 | 腾讯科技(深圳)有限公司 | 数据库事务处理方法、装置及服务器 |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7962458B2 (en) * | 2008-06-12 | 2011-06-14 | Gravic, Inc. | Method for replicating explicit locks in a data replication engine |
US9928264B2 (en) * | 2014-10-19 | 2018-03-27 | Microsoft Technology Licensing, Llc | High performance transactions in database management systems |
US9984140B1 (en) * | 2015-02-05 | 2018-05-29 | Amazon Technologies, Inc. | Lease based leader election system |
US10795881B2 (en) * | 2015-12-18 | 2020-10-06 | Sap Se | Table replication in a database environment |
CN106897123B (zh) * | 2015-12-21 | 2021-07-16 | 阿里巴巴集团控股有限公司 | 数据库操作方法及装置 |
CN106897306B (zh) * | 2015-12-21 | 2019-04-30 | 阿里巴巴集团控股有限公司 | 数据库操作方法及装置 |
US10671642B2 (en) * | 2016-11-11 | 2020-06-02 | International Business Machines Corporation | Copying data changes to a target database |
US10474695B1 (en) * | 2016-12-20 | 2019-11-12 | Gravic, Inc. | Method for replacing a currently operating data replication engine with a new data replication engine without application downtime and while preserving target database consistency |
US11645261B2 (en) * | 2018-04-27 | 2023-05-09 | Oracle International Corporation | System and method for heterogeneous database replication from a remote server |
EP3576368A1 (de) * | 2018-05-29 | 2019-12-04 | Siemens Aktiengesellschaft | Verfahren und system zum steuern einer freigabe einer ressource |
WO2021048572A1 (en) * | 2019-09-09 | 2021-03-18 | Citrix Systems, Inc | Conversational ai platform using declarative graph model |
CN111858629B (zh) * | 2020-07-02 | 2023-08-22 | 北京奥星贝斯科技有限公司 | 二阶段提交分布式事务更新数据库的实现方法和装置 |
-
2020
- 2020-07-24 CN CN202010721315.0A patent/CN113297320B/zh active Active
-
2021
- 2021-07-20 WO PCT/CN2021/107243 patent/WO2022017347A1/zh active Application Filing
-
2023
- 2023-01-24 US US18/101,049 patent/US20230161758A1/en active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102037463A (zh) * | 2008-02-26 | 2011-04-27 | 甲骨文国际公司 | 使用全局确认的提交进行分布式事务的基于日志的复制 |
WO2019037617A1 (zh) * | 2017-08-25 | 2019-02-28 | 阿里巴巴集团控股有限公司 | 数据事务处理方法、装置以及电子设备 |
CN110196760A (zh) * | 2018-07-12 | 2019-09-03 | 腾讯科技(深圳)有限公司 | 分布式事务一致性实现方法及装置 |
CN110018884A (zh) * | 2019-03-19 | 2019-07-16 | 阿里巴巴集团控股有限公司 | 分布式事务处理方法、协调装置、数据库及电子设备 |
CN110457157A (zh) * | 2019-08-05 | 2019-11-15 | 腾讯科技(深圳)有限公司 | 分布式事务异常处理方法、装置、计算机设备及存储介质 |
CN111427966A (zh) * | 2020-06-10 | 2020-07-17 | 腾讯科技(深圳)有限公司 | 数据库事务处理方法、装置及服务器 |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113448757A (zh) * | 2021-08-30 | 2021-09-28 | 阿里云计算有限公司 | 消息处理方法、装置、设备、存储介质和系统 |
WO2023061249A1 (zh) * | 2021-10-11 | 2023-04-20 | 阿里云计算有限公司 | 分布式数据库的数据处理方法、系统、设备和存储介质 |
CN113656384A (zh) * | 2021-10-18 | 2021-11-16 | 阿里云计算有限公司 | 数据处理方法、分布式数据库系统、电子设备及存储介质 |
CN113656384B (zh) * | 2021-10-18 | 2022-04-08 | 阿里云计算有限公司 | 数据处理方法、分布式数据库系统、电子设备及存储介质 |
CN114691307A (zh) * | 2022-03-16 | 2022-07-01 | 阿里巴巴(中国)有限公司 | 事务处理方法及计算机系统 |
CN114925123A (zh) * | 2022-04-24 | 2022-08-19 | 杭州悦数科技有限公司 | 一种分布式的图数据库与图计算系统间的数据传输方法 |
CN114925123B (zh) * | 2022-04-24 | 2024-06-07 | 杭州悦数科技有限公司 | 一种分布式的图数据库与图计算系统间的数据传输方法 |
Also Published As
Publication number | Publication date |
---|---|
US20230161758A1 (en) | 2023-05-25 |
CN113297320B (zh) | 2024-05-14 |
WO2022017347A1 (zh) | 2022-01-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113297320B (zh) | 分布式数据库系统及数据处理方法 | |
CN111797121B (zh) | 读写分离架构业务系统的强一致性查询方法、装置及系统 | |
US11132383B2 (en) | Techniques for processing database tables using indexes | |
US10824968B2 (en) | Transformation of logical data object instances and updates to same between hierarchical node schemas | |
US11615076B2 (en) | Monolith database to distributed database transformation | |
CN111324610A (zh) | 一种数据同步的方法及装置 | |
CN110019251A (zh) | 一种数据处理系统、方法及设备 | |
WO2008144262A1 (en) | Easily queriable software repositories | |
CN107506356B (zh) | 数据处理方法及其系统 | |
US12007992B2 (en) | Serverless data lake indexing subsystem and application programming interface | |
JPWO2011111532A1 (ja) | データベースシステム | |
EP3824397B1 (en) | Version-based table locking | |
US9396218B2 (en) | Database insert with deferred materialization | |
US11567957B2 (en) | Incremental addition of data to partitions in database tables | |
CN110955719B (zh) | 一种数据存取处理设备、系统和方法 | |
CN114860727A (zh) | 拉链表更新方法及装置 | |
US9390131B1 (en) | Executing queries subject to different consistency requirements | |
CN113297159B (zh) | 数据存储方法以及装置 | |
CN107391539A (zh) | 事务处理方法、服务器和存储介质 | |
CN113297231A (zh) | 数据库处理方法及装置 | |
CN116501700B (zh) | 一种app格式化文件离线存储方法、装置、设备及存储介质 | |
US10803030B2 (en) | Asynchronous SQL execution tool for zero downtime and migration to HANA | |
CN111913926A (zh) | 一种基于Hadoop的云平台存储方法 | |
CN112835932B (zh) | 业务表的批量处理方法及装置、非易失性存储介质 | |
CN117312420A (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 | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40057449 Country of ref document: HK |
|
GR01 | Patent grant | ||
GR01 | Patent grant |