CN109783578A - 数据读取方法、装置、电子设备以及存储介质 - Google Patents
数据读取方法、装置、电子设备以及存储介质 Download PDFInfo
- Publication number
- CN109783578A CN109783578A CN201910021181.9A CN201910021181A CN109783578A CN 109783578 A CN109783578 A CN 109783578A CN 201910021181 A CN201910021181 A CN 201910021181A CN 109783578 A CN109783578 A CN 109783578A
- Authority
- CN
- China
- Prior art keywords
- global
- transaction
- affairs
- global write
- node device
- 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
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种数据读取方法、装置、电子设备以及存储介质,属于数据库技术领域。本发明实施例提供的方法,通过找到当前全局读事务发生时处于活跃状态的全局写事务,来确定可能影响事务一致性的全局写事务,也即是找到了多个节点设备之间的、基于MVCC的、共同的具有事务一致性的点,基于这样的全局写事务的读取,相当于将所读取的时刻推后到了一个相对于当前时刻更延迟的时刻上,可以看作是一种延迟读的过程,而在数据读取过程中,由于排除了可能导致事务不一致的全局写事务,使得所读取的数据具有事务一致性,实现了数据库***对外的数据一致性。
Description
技术领域
本发明涉及数据库技术领域,特别涉及一种数据读取方法、装置、电子设备以及存储介质。
背景技术
目前的分布式数据库***很多可以支持跨节点的写操作,也即是,对于某一个写操作来说,可能涉及到对分布式数据库***中多个节点设备的写入过程,由此,可能会产生读取数据的一致性问题,例如:当实现跨节点的写操作时,假设有两个节点设备,已经过了准备提交阶段,事务可以提交,第一个节点设备提交完成,第二个节点设备却尚未提交,此时,分布式数据库***新来一个全局读操作,第一个节点设备提交的数据被读取,但是第二个节点设备因尚未完成数据提交,而导致其数据没有被读取,这种不一致现象,称为分布式读半已提交异常(Distributed Read Committed-Committing anomaly,简称DRCC),因此,目前的数据读取不能保证读取的数据处于一致性状态。
发明内容
本发明提供了一种数据读取方法、装置、电子设备以及存储介质,可以解决数据读取的一致性的问题。技术方案如下:
一方面,提供了一种数据读取方法,所述方法包括:
向全局读事务对应的多个节点设备发送第一指示消息,所述第一指示消息用于指示所述多个节点设备停止进行全局写事务的提交操作;
接收所述多个节点设备的相关事务列表,每个节点设备的相关事务列表包含节点设备上正在进行的相关全局写事务以及每个相关全局写事务的事务状态,每个相关全局写事务对应于所述多个节点设备中至少两个节点设备;
根据所述多个节点设备的相关事务列表,确定第一全局写事务组,所述第一全局写事务组所包括的第一全局写事务在对应节点设备上的事务状态包括正在执行状态和准备提交状态;
向所述多个节点设备发送所述第一全局写事务组;
接收所述多个节点设备返回的第一目标数据,所述第一目标数据包括基于所述全局读事务和所述第一全局写事务组获取的数据。
一方面,提供了一种数据读取方法,应用于节点设备,所述方法包括:
根据接收到的第一指示消息,停止进行全局写事务的提交操作,所述第一指示消息用于指示全局读事务对应的多个节点设备停止进行全局写事务的提交操作;
获取相关事务列表,所述相关事务列表包含所述节点设备上正在进行的相关全局写事务以及每个相关全局写事务的事务状态,每个相关全局写事务对应于所述多个节点设备中至少两个节点设备;
发送所述相关事务列表;
接收第一全局写事务组,所述第一全局写事务组所包括的第一全局写事务在对应节点设备上的事务状态包括正在执行状态和准备提交状态;
根据所述第一全局写事务组和所述全局读事务,输出第一目标数据,所述第一目标数据包括基于所述全局读事务和所述第一全局写事务组所获取的数据。
一方面,提供了一种数据读取方法,所述方法包括:
向全局读事务对应的多个节点设备发送第二指示消息,所述第二指示消息用于指示所述多个节点设备返回所述全局读事务的相关事务列表;
接收所述多个节点设备的相关事务列表,每个节点设备的相关事务列表包含节点设备上正在进行的相关全局写事务以及每个相关全局写事务的事务状态,每个相关全局写事务对应于所述多个节点设备中至少两个节点设备;
根据所述多个节点设备的相关事务列表,确定第一全局写事务组和第二全局写事务组,所述第一全局写事务组所包括的第一全局写事务在对应节点设备上的事务状态包括正在执行状态和准备提交状态,所述第二全局写事务组所包括的第二全局写事务在对应节点设备上的事务状态均为正在执行状态;
当所述第一全局写事务组中的第一全局写事务在对应节点设备上均处于已提交状态,向所述多个节点设备发送所述第一全局写事务组和所述第二全局写事务组;
接收所述多个节点设备返回的第二目标数据,所述第二目标数据包括基于所述全局读事务、所述第一全局写事务组以及所述第二全局写事务组获取的数据。
一方面,提供了一种数据读取方法,应用于节点设备,所述方法包括:
接收第二指示消息,所述第二指示消息用于指示全局读事务的多个节点设备返回相关事务列表;
获取相关事务列表,每个节点设备的相关事务列表包含所述节点设备上正在进行的相关全局写事务以及每个相关全局写事务的事务状态,每个相关全局写事务对应于所述多个节点设备中至少两个节点设备;
发送所述相关事务列表;
接收第一全局写事务组和第二全局写事务组,所述第一全局写事务组所包括的第一全局写事务在对应节点设备上的事务状态包括正在执行状态和准备提交状态,所述第二全局写事务组所包括的第二全局写事务在对应节点设备上的事务状态均为正在执行状态;
根据所述第一全局写事务组、所述第二全局写事务组以及所述全局读事务,输出第二目标数据,所述第二目标数据包括基于所述全局读事务、所述第一全局写事务组以及所述第二全局写事务组获取的数据。
一方面,提供了一种数据读取装置,所述装置包括:
发送模块,用于向全局读事务对应的多个节点设备发送第一指示消息,所述第一指示消息用于指示所述多个节点设备停止进行全局写事务的提交操作;
接收模块,用于接收所述多个节点设备的相关事务列表,每个节点设备的相关事务列表包含节点设备上正在进行的相关全局写事务以及每个相关全局写事务的事务状态,每个相关全局写事务对应于所述多个节点设备中至少两个节点设备;
确定模块,用于根据所述多个节点设备的相关事务列表,确定第一全局写事务组,所述第一全局写事务组所包括的第一全局写事务在对应节点设备上的事务状态包括正在执行状态和准备提交状态;
所述发送模块,还用于向所述多个节点设备发送所述第一全局写事务组;
所述接收模块,还用于接收所述多个节点设备返回的第一目标数据,所述第一目标数据包括基于所述全局读事务和所述第一全局写事务组获取的数据。
一方面,提供了一种数据读取装置,该装置包括:
停止模块,用于根据接收到的第一指示消息,停止进行全局写事务的提交操作,所述第一指示消息用于指示全局读事务对应的多个节点设备停止进行全局写事务的提交操作;
获取模块,用于获取相关事务列表,所述相关事务列表包含所述节点设备上正在进行的相关全局写事务以及每个相关全局写事务的事务状态,每个相关全局写事务对应于所述多个节点设备中至少两个节点设备;
发送模块,用于发送所述相关事务列表;
接收模块,用于接收第一全局写事务组,所述第一全局写事务组所包括的第一全局写事务在对应节点设备上的事务状态包括正在执行状态和准备提交状态;
输出模块,用于当所述第一全局写事务组中的第一全局写事务处于已提交状态,根据所述第一全局写事务组和所述全局读事务,输出第一目标数据,所述第一目标数据包括基于所述全局读事务和所述第一全局写事务组所获取的数据。
一方面,提供了一种数据读取装置,该装置包括:
发送模块,用于向全局读事务对应的多个节点设备发送第二指示消息,所述第二指示消息用于指示所述多个节点设备返回所述全局读事务的相关事务列表;
接收模块,用于接收所述多个节点设备的相关事务列表,每个节点设备的相关事务列表包含节点设备上正在进行的相关全局写事务以及每个相关全局写事务的事务状态,每个相关全局写事务对应于所述多个节点设备中至少两个节点设备;
确定模块,用于根据所述多个节点设备的相关事务列表,确定第一全局写事务组和第二全局写事务组,所述第一全局写事务组所包括的第一全局写事务在对应节点设备上的事务状态包括正在执行状态和准备提交状态,所述第二全局写事务组所包括的第二全局写事务在对应节点设备上的事务状态均为正在执行状态;
所述发送模块还用于当所述第一全局写事务组中的第一全局写事务在对应节点设备上均处于已提交状态,向所述多个节点设备发送所述第一全局写事务组和所述第二全局写事务组;
所述接收模块还用于接收所述多个节点设备返回的第二目标数据,所述第二目标数据包括基于所述全局读事务、所述第一全局写事务组以及所述第二全局写事务组获取的数据。
一方面,提供了一种数据读取装置,该装置包括:
接收模块,用于接收第二指示消息,所述第二指示消息用于指示全局读事务的多个节点设备返回相关事务列表;
获取模块,用于获取相关事务列表,每个节点设备的相关事务列表包含所述节点设备上正在进行的相关全局写事务以及每个相关全局写事务的事务状态,每个相关全局写事务对应于所述多个节点设备中至少两个节点设备;
发送模块,用于发送所述相关事务列表;
所述接收模块还用于接收第一全局写事务组和第二全局写事务组,所述第一全局写事务组所包括的第一全局写事务在对应节点设备上的事务状态包括正在执行状态和准备提交状态,所述第二全局写事务组所包括的第二全局写事务在对应节点设备上的事务状态均为正在执行状态;
输出模块,用于当所述第一全局写事务组中的第一全局写事务处于已提交状态,根据所述第一全局写事务组、所述第二全局写事务组以及所述全局读事务,输出第二目标数据,所述第二目标数据包括基于所述全局读事务、所述第一全局写事务组以及所述第二全局写事务组获取的数据。
一方面,提供了一种电子设备,该电子设备包括处理器和存储器,该存储器中存储有至少一条指令,该至少一条指令由该处理器加载并执行以实现如上述数据读取方法所执行的操作。
一方面,提供了一种计算机可读存储介质,该存储介质中存储有至少一条指令,该至少一条指令由处理器加载并执行以实现如上述数据读取方法所执行的操作。
本发明实施例提供的方法,通过找到当前全局读事务发生时处于活跃状态的全局写事务,来确定可能影响事务一致性的全局写事务,也即是找到了多个节点设备之间的、基于MVCC的、共同的具有事务一致性的点,基于这样的全局写事务的读取,相当于将所读取的时刻推后到了一个相对于当前时刻更延迟的时刻上,可以看作是一种延迟读的过程,而在数据读取过程中,由于排除了可能导致事务不一致的全局写事务,使得所读取的数据具有事务一致性,实现了数据库***对外的数据一致性。
附图说明
图1是本发明实施例提供的一种数据读取方法的实施环境示意图;
图2是本发明实施例提供的一种数据读取方法流程图;
图3和图4分别为事务标识的对比图;
图5是本发明实施例提供的一种数据读取方法流程图;
图6提供了一种数据库***中作为主机和备机的节点设备之间的信令交互图;
图7是本发明实施例提供的一种数据读取装置的结构示意图;
图8是本发明实施例提供的一种数据读取装置的结构示意图;
图9是本发明实施例提供的一种数据读取装置的结构示意图;
图10是本发明实施例提供的一种数据读取装置的结构示意图;
图11是本发明实施例提供的一种电子设备的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
本发明实施例涉及的数据库存储有多个数据表,每个数据表可以用于存储元组,元组可以有一个或多个版本。其中,该数据库可以为基于MVCC(Multi-VersionConcurrency Control,多版本并发控制)的任一类型的数据库。在本发明实施例中,对该数据库的类型不作具体限定。需要说明的是,上述数据库中的数据基于状态属性,可以包括三种状态:当前态、过渡态和历史态,该三种状态合称为“数据的全态”,简称全态数据,全态数据中的各个不同状态属性,可以用于标识数据在其生命周期轨迹中所处的状态。
当前态(Current State):元组的最新版本的数据,是处于当前阶段的数据。处于当前阶段的数据的状态,称为当前态。
过渡态(Transitional State):不是元组的最新的版本也不是历史态版本,处于从当前态向历史态转变的过程中,处于过渡态的数据,称为半衰数据。
历史态(Historical state):元组在历史上的一个状态,其值是旧值,不是当前值。处于历史阶段的数据的状态,称为历史态。一个元组的历史态,可以有多个,反映了数据的状态变迁的过程。处于历史态的数据,只能被读取而不能被修改或删除。
需要说明的是,在MVCC机制下,数据的上述三种状态均存在,在非MVCC机制下,数据可以只存在历史态和当前态。在MVCC或封锁并发访问控制机制下,事务提交后的数据的新值处于当前态。以MVCC机制为例,当前活跃事务列表中最小的事务之前的事务生成的数据,其状态处于历史态。在封锁并发访问控制机制下,事务提交后,提交前的数据的值变为历史态的值,即元组的旧值处于历史态。而被读取的版本上尚有活跃事务(非最新相关事务)在使用,而由于最新相关事务修改了元组的值,其最新值已经处于一个当前态,被读取到的值相对当前态已经处于一个历史状态,因此,其数据状态介于当前态和历史态之间,所以称为过渡态。
例如,MVCC机制下,User表的A账户余额从10元充值变为20元,然后消费了15元变为5元,此时金融B机构读取数据做检查事务一直进行中,A之后又充值20元变为25元,则25元为当前态数据,B正在读取到的5元为过渡态,其余的两个值20、10是历史上存在过的状态,都是历史态数据。
图1是本发明实施例提供的一种数据读取方法的实施环境示意图。参见图1,该图1所提供的实施环境可以为分布式数据库***,该***中可以包括网关服务器、全局事务标识生成集群以及分布式存储集群,其中,分布式存储集群可以包括多个节点设备,且该分布式存储集群可以采用主备结构。在一些实施例中,该网关服务器可以与分布式存储集群中的任一个节点设备合并在同一个物理机上,也即是,让某个参与读操作的节点设备充当网关服务器。
其中,网关服务器用于接收读写请求,并基于读写请求所对应的读事务或写事务是否为全局事务,来为该读写请求对应的读事务或写事务向全局事务标识生成集群申请唯一的全局事务标识,以保证数据读写在整个分布式数据库***中的一致性。
全局事务标识生成集群用于生成全局事务标识,即gxid,来标识全局事务,该全局事务可以是指涉及到多个节点设备的事务,例如全局读事务可以涉及到对多个节点设备上存储数据的读取,又例如,全局写事务可以涉及到对多个节点设备上的数据写入。而采用使用集群的形式来实现该全局事务标识的生成,可以防止单点故障。当有全局事务发生的时候,可以通过网关服务器向该全局事务标识生成集群申请一个全局唯一的标识值。在一些实施例中,该全局事务标识生成集群可以是物理独立的,也可以和分布式存储集群(例如ZooKeeper)合并到一起,对各个网关服务器提供全局的全局事务标识生成服务。上述图1仅是提供了一种轻量级的分布式事务处理的架构图,是一种类分布式数据库***。
图2是本发明实施例提供的一种数据读取方法的流程图。参见图2,该方法包括:
201、当读事务涉及到跨节点操作时,网关服务器将该读事务确定为全局读事务,网关服务器向全局事务标识生成集群发送生成请求。
当网关服务器接收到任一个操作语句(例如SQL语句)时,网关服务器作为数据库的高级计算层可以对该操作语句进行解析,当该读事务的操作语句携带指定关键字时,该网关服务器确定该读事务涉及到跨节点操作。例如,该指定关键字可以为“GLOBAL”,用于指示该操作语句的读取对象包括数据库***中的所有数据,也即是覆盖数据库***中的所有节点设备,则当该操作语句中包括“GLOBAL”,则执行步骤201。
当然,在一些实施例中,还可以根据该读事务的操作语句,确定所要读取数据是否在一个节点设备上,如果确定不在同一个节点设备上,则确定该读事务涉及到跨节点操作。具体地,根据所述读事务的操作语句所要读取数据的范围以及所述范围内的元数据,确定所要读取的数据是否存储于两个以上的节点设备,当确定存储于所述两个以上的节点设备时,所述读事务涉及到跨节点操作。由于元数据中会记载有数据目前的存储设备。例如,网关服务器可以根据元数据,为每个事务的每条操作语句(SQL(Structured QueryLanguage,结构化查询语言))确定所访问的节点设备,记录所确定的节点设备,当统计到被访问的不同节点设备数大于等于2时,即执行该步骤201。在上述实施例中,这种基于元数据的确定方式可以适用于单语句的SELECT语句。
上述确定是否涉及跨节点操作的过程可以总结为基于指定关键字的识别以及由网关服务器的自动识别,如果有跨节点操作(全局事务标识),则是全局事务。而如果操作语句(例如SQL语句)只涉及单个节点设备,则属于局部事务,又称为本地事务,则无需申请全局事务标识,仅为该事务分配局部事务标识即可。
以指定关键字为“GLOBAL”为例,该操作语句可以采用以下形式:
BEGIN GLOBAL;//GLOBAL表明开始一个全局事务,向“全局gxid生成集群”申请一个全局唯一的全局事务标识值gxid
SELECT…
…
END;
202、全局事务标识生成集群接收到该生成请求后,为该全局读事务生成全局事务标识,将全局事务标识发送给该网关服务器。
在本发明实施例中,该全局事务标识生成集群所生成的全局事务标识可以是数值型。
203、该网关服务器将该全局事务标识作为该全局读事务的事务标识。
对于元组,如果支持MVCC技术,可以在元组上原先有xid域的情况下,增加一个gxid,xid被改名为lxid,上述格式上的区别可以参见图3和图4。局部事务的事务标识和全局事务标识可以都是单调递增的。
举例来说,假设事务T需要写两个节点设备,做转账操作,则其操作语句可以采用如下形式:
BEGIN GLOBAL;//申请一个全局的gxid,假设为20
UPDATE user_account SET my_wallet=my_wallet–10WHERE key=100;//节点1,本地lxid为18
UPDATE user_account SET my_wallet=my_wallet+10WHERE key=900;//节点2,本地lxid为22
COMMIT;
节点设备1上的key为100的元组,其元组上的事务标识为一个二元组:{gxid,lxid}={20,18}。
节点设备2上的key为900的元组,其元组上的事务标识为一个二元组:{gxid,lxid}={20,22}。
通过上述事务标识,就可以识别来自不同节点设备的数据是否是同一个全局事务操作的数据,即是否属于同一个事务。而如果节点设备1下一个事务是全局事务,则事务标识为{gxid,lxid}={21,19};再下一个事务是局部事务,则事务标识为{gxid,lxid}={0,20};再下一个事务是全局事务,则事务标识为{gxid,lxid}={22,21},依次类推。
204、网关服务器根据该全局读事务的事务标识,向该全局读事务对应的多个节点设备发送第一指示消息,该第一指示消息用于指示该多个节点设备停止进行全局写事务的提交操作。
为了避免全局读事务所涉及的各个节点设备上继续发生可能引起数据不一致的事务继续进行,该网关服务器可以对全局读事务进行分解,先要求所有涉及的节点停止其他事务的全局提交操作。
对于分布式数据库***来说,每个节点设备上均可能具有活跃全局写事务,这些活跃全局写事务如果提交,则可能出现新的数据不一致情况,因此,可以由网关服务器进行指示,让各个节点设备上的活跃全局写事务不再能由正在执行状态变为准备提交状态。当然,本地事务可以继续提交。其中,正在执行状态,表示分布式数据库***中标识的事务阶段尚没有进入准备提交阶段。准备提交状态表示事务已经进入提交阶段。
需要说明的是,网关服务器可以设置超时机制,例如,如果该多个节点设备中有任一个节点设备超时未返回相关事务列表,则说明该节点设备可能出现网络问题或是宕机,则该网关服务器可以重新向该节点设备或该多个节点设备发送该第一指示消息,以保证各个节点设备能够停止全局写事务的提交操作。当然,为了节约信令,避免资源浪费,可以为重发操作设置发送阈值,例如将重试发送操作设置为3次,当达到该发送阈值,仍然有节点设备未返回相关事务列表,则回滚该全局读事务。其中,回滚全局读事务是指将数据库***恢复到全局读事务开始的状态,例如,数据库***将基于该全局读事务的所有已读取到或者已输出的数据全部置为无效。
该第一指示消息可以包括全局读事务的事务标识以及多个节点设备的节点标识,例如,该全局读事务可以用T-current表示,且该T-current所涉及的节点设备包括N1、N3、N5、N9。该节点标识可以采用{N1,N3,N5,N9}这样类似的样式,用于表示本次全局读事务操作涉及这些节点设备。
上述实施例中,是通过一条指示消息来执行停止提交和传递全局读事务所涉及的节点设备,以达到节约信令的目的,而在一些实施例中,上述用于执行停止提交的消息与传递全局读事务所涉及的节点设备的消息可以为两条消息,分两条发送,例如,网关服务器先向多个节点设备发送停止提交消息,使得各个节点设备停止全局写事务的提交操作,该网关服务器在接收到该多个节点设备的停止应答后,再向多个节点设备发送用于传递全局读事务所涉及的节点设备的消息,使得各个节点设备能够基于该全局读事务所涉及的节点设备来返回相关事务列表。
当然,在上述网关服务器的任一次消息发送过程中,均可以设置超时机制,以避免影响数据库***的正常运行。
205、该多个节点设备中的各个节点设备根据接收到的第一指示消息,停止进行全局写事务的提交操作,该第一指示消息用于指示全局读事务对应的多个节点设备停止进行全局写事务的提交操作。
对于任一个节点设备来说,当接收到第一指示消息后,则可以对确定该节点设备上的活跃写事务(正在执行状态或者是准备提交状态的写事务),根据各个活跃写事务的事务标识,识别该活跃写事务是否为全局写事务,当任一个活跃写事务为全局写事务时,则停止该全局写事务的提交操作,该停止该全局写事务的提交操作是指对于任一个全局写事务来说,禁止该全局写事务从正在执行状态转换为准备提交状态。
在一些实施例中,还可以利用资源锁来实现对全局写事务的提交操作,例如,当节点设备接收到第一指示消息,可以对节点设备上的活跃的全局写事务对应的资源进行上锁,使得无法对已上锁的资源进行写操作,在获取了相关事务列表后,可以对资源进行释放。在一种示例中,该上锁时所涉及的资源锁可以为mutex。
在一些实施例中,如果上述第一指示消息分两条发送,则该节点设备可以在接收到停止提交消息后,停止提交操作,并向网关服务器返回停止应答,以便告知网关服务器自己已经停止进行提交操作,以便触发网关服务器进一步发送用于指示获取相关事务列表的消息,来触发获取过程。
206、该多个节点设备中的各个节点设备获取相关事务列表,该相关事务列表包含该节点设备上正在进行的相关全局写事务以及每个相关全局写事务的事务状态,每个相关全局写事务对应于该多个节点设备中至少两个节点设备。
节点设备可以为网关服务器提供该节点设备上正在进行的相关全局写事务以及每个相关全局写事务的事务状态。相关事务是指:其他的全局写事务涉及的节点设备必须被全局读事务涉及的节点设备包含。例如一个全局写事务T9,写了节点设备N1、N3,则确定包含并需要被反馈给网关服务器;而一个全局写事务T10,写了节点设备N3、N7,N7不在全局读事务涉及的节点范围,则不算是包含,则不需要节点设备N7应答proxy。相关事务列表中的事务,必须是至少涉及该全局读事务对应的至少两个节点设备,例如,全局读事务涉及{N1,N3,N5,N9},则该全局读事务的相关全局写事务需要涉及其中至少两个节点设备。
在本发明实施例中,可选地,该获取相关事务列表可以包括:遍历该节点设备上正在进行的全局写事务;当任一个全局写事务所对应的节点设备包括该多个节点设备中的至少两个节点设备,将该写事务添加至该相关事务列表。
该相关事务列表可以携带在节点设备向网关服务器返回的应答中。当然,为了让各个节点设备获知本节点设备上有哪些写事务可能影响了全局读事务的一致性,每个全局写事务也需要把本事务涉及的节点设备同样下发给各个涉及本事务的节点设备获知。例如对于全局写事务T9,N1知道自己的全局写事务只涉及N1、N3,而这两个节点设备在该全局读事务涉及的节点设备范围内,因此,要把全局写事务T9的信息作为应答内容。例如全局写事务T10,N3知道自己的全局写事务只涉及N1、N7,而N7不在该全局读事务涉及的节点设备范围内,因此不把全局写事务T10的信息作为应答内容。
进一步地,如果全局写事务所涉及的节点设备不是上述全局读事务涉及的多个节点设备的子集,则该全局写事务也不是该全局读事务的相关全局写事务,则可以不把该全局写事务的信息作为应答内容。
可选地,节点设备向网关服务器返回的相关事务列表可以为:节点设备的节点标识以及各个全局写事务的事务标识以及事务状态,例如:
N1的相关事务列表:{N1,{gxid2-准备提交状态,gxid5-正在执行状态,gxid9-正在执行状态}}
N3的相关事务列表:{N3,{gxid2-正在执行状态,gxid5-正在执行状态,gxid9-准备提交状态}}
N5的相关事务列表:{N5,{gxid2-准备提交状态,gxid5-正在执行状态}}
N9的相关事务列表:{N9,{gxid5-正在执行状态}}
在一些实施例中,如果上述第一指示消息分两次发送,则该节点设备可以在接收到停止提交消息后,停止提交操作,并向网关服务器返回停止应答,以便告知网关服务器自己已经停止进行提交操作。而该节点设备在接收到用于传递全局读事务所涉及的节点设备的消息,使得各个节点设备能够基于该全局读事务所涉及的节点设备来返回相关事务列表。
207、该多个节点设备中的各个节点设备发送该相关事务列表。
在步骤207中,由于各个节点设备已经基于第一指示消息对全局写事务进行了禁止提交的过程,因此,在各个节点设备已经向网关服务器发送了相关事务列表,即可以恢复全局写事务的提交操作,也即是,对于节点N1,可以在发送完相关事务列表后,继续进行全局写事务的提交操作,允许有正在执行状态变为准备提交状态,甚至是变为已提交状态(Committed)。
208、该网关服务器接收该多个节点设备的相关事务列表后,根据该多个节点设备的相关事务列表,确定第一全局写事务组。
其中,该第一全局写事务组所包括的第一全局写事务在对应节点设备上的事务状态包括正在执行状态和准备提交状态,也即是,对于任一个第一全局写事务来说,其在对应的节点设备上的事务状态既有正在执行状态还有准备提交状态。如果第一全局写事务组内的事务后续提交,则可能造成新的不一致,因此,可以对该类型的事务记录成一组,该第一全局写事务组内的事务均是可能产生不一致的事务,可以在后续通过控制这部分事务提交完成,再将这些事务所对应元组的版本划归在读取范围之内,以避免数据不一致的情况。
在本发明实施例中,该步骤208可以包括:从该多个节点设备的相关事务列表中,当任一全局写事务在对应节点设备上的事务状态包括正在执行状态和准备提交状态时,将该事务作为第一全局写事务添加至该第一全局写事务组。
在一种可能实施方式中,当任一个全局写事务在对应节点设备上的事务状态包括正在执行状态和准备提交状态时,网关服务器可以通知该全局写事务对应的节点设备恢复对该全局写事务的提交操作,当该全局写事务在节点设备上处于已提交状态,则将该全局写事务作为第一全局写事务添加至该第一全局写事务组。对于相关事务列表中的每个全局写事务均可以执行上述控制提交的过程,从而得到各个第一全局写事务。
在另一种可能实施方式中,在确定第一全局写事务组中的各个第一全局写事务后,网关服务器可以通知各个第一全局写事务对应的节点设备恢复对该全局写事务的提交操作,当各个第一全局写事务在节点设备上处于已提交状态,则可以执行下述步骤209的发送过程。
对于节点设备来说,当接收到网关服务器发送的恢复提交消息时,则可以在该节点设备上恢复进行全局写事务的提交操作,当该全局写事务处于已提交状态,则可以向网关服务器返回已提交响应,以使得网关服务器获知该已提交状态。当然,对于节点设备来说,还可以无需网关服务器对恢复进行通知,而是在获取并发送了相关事务列表后,则可以恢复提交操作,而在节点设备执行数据读取时,只需上述全局写事务均已经处于已提交状态即可。
而对于除了第一全局写事务组以外的事务,则也可以通知其回复进行全局写事务的提交操作或者由节点设备自行恢复提交操作,本发明实施例对此不做限定。
为了更明确的表达上述节点设备上的事务状态,参见下表1,该表1表示了节点设备执行全局事务的情况表。
表1
gxid2事务 | gxid5事务 | gxid9事务 | gxid10事务 | |
N1 | 准备提交状态 | 正在执行状态 | 正在执行状态 | |
N3 | 正在执行状态 | 正在执行状态 | 准备提交状态 | 正在执行状态 |
N5 | 准备提交状态 | 正在执行状态 | ||
N9 | 正在执行状态 | |||
N7 | 准备提交状态 |
基于上述表1的示例,可以获知,对于节点设备上的全局写事务,可有以下四种情况:
情况1,全局写事务的子事务在各个节点设备上均处于准备提交状态;
情况2,全局写事务的子事务在各个节点设备上均处于正在执行状态,表明此刻事务没有进入提交阶段则不会造成分布式读不一致;
情况3,全局写事务的子事务在各个节点设备上至少有一个处于正在执行状态和一个处于准备提交状态;
情况4,全局写事务的子事务在各个节点设备上没有处于准备提交状态和正在执行状态的,即没有全局写事务正在执行。由于这种情况已经通过相关事务列表的获取排除,因此不会作为应答内容提供给网关服务器。
基于上述情况1至3,网关服务器可以遍历每个相关全局写事务,如上表1的gxid2、gxid5、gxid9,过滤掉情况2对应的全局写事务,不做任何处理,由于在前述实施例中已经对情况2的全局写事务禁止提交操作,因此,不会造成新的不一致问题。
该第一全局事务组可以是一个事务标识集合,可以看作是构造了一个快照(PostgreSQL成为SanpShot,MySQL/InnoDB称为ReadView),这个快照相当于注册了所有的当前活跃全局写事务到一个列表,后续基于这个列表以及元组可见性判断,就可以确认被读到的元组是否是相对于本事务已经提交的事务所写过的版本,如果是,则可见,这样保证了单机的读一致性。
209、该网关服务器向该多个节点设备发送该第一全局写事务组。
由于实际的读取是由节点设备来完成,因此,网关服务器需要将第一全局写事务组发送给节点设备,以由节点设备来进行可见性判断,从而实现数据的读取。
210、该多个节点设备中的各个节点设备接收第一全局写事务组后,根据该全局读事务的事务快照,输出该全局读事务的目标元组中的第一元组,该第一元组为对于该全局读事务可见的元组。
当各个节点设备将所有的包含准备提交状态的全局写事务都执行完毕,也即是,对于每个节点设备来说,该第一全局写事务组中的每个第一全局写事务在该节点设备上处于已提交状态,则该节点设备可以确定执行后续的数据可见性判断过程,以进行实际的数据读取。
对于该全局读事务来说,可以通过该全局读事务的事务快照来判断元组的多个版本是否可见,例如,根据该全局读事务的事务快照的创建时刻以及元组的创建时刻、删除时刻或提交时刻,来判断该元组是否可见。具体地,本发明实施例涉及的元组是否可见,是指该元组在全局读事务的事务快照所对应时刻是否能够被事务所读取。从数据表中每读取一条元组,均可以读取到该元组的生命周期信息,也即是该元组的创建时刻、删除时刻以及该元组的提交时刻等信息,以基于历史时刻也即是事务快照的创建时刻的可见性判断为例:
(一):当该元组的某一版本为***操作生成,当该创建时刻和提交时刻均在该事务快照的创建时刻的起始时刻之前,确定该元组可见。
(二):当该元组的某一版本为删除操作生成,当该删除时刻和提交时刻均在该事务快照的创建时刻之前,确定该元组可见。
(三):当该元组的某一版本为更新操作生成,当该创建时刻和提交时刻均在该事务快照的创建时刻之前,确定该元组可见。
211、如果该节点设备确定全局读事务的目标元组中包括第二元组,且提交该第二元组的事务为任一个第一全局写事务,输出该第二元组,该第二元组为对于该全局读事务不可见的元组。
在步骤210的可见性判断中,当有任一个元组的某个版本对于全局读事务不可见,也即是不满足可见性条件时,则还可以进一步判断该提交该版本的事务是否为第一全局写事务组中的第一全局写事务,如果是,则也获取该版本的元组,返回至网关服务器。
在上述过程中,该第一全局写事务在节点设备开始读取时已经完成了提交,因此,这部分数据不会存在一部分已提交一部分未提交的状态,也就不会造成读取的不一致,且由于在节点设备的读取过程中排除了第2种情况中全处于正在执行状态的全局写事务的相关数据,因此,也就不会存在有的事务的相关数据出现上文所说的分布式读半已提交异常现象,保证了数据读取的一致性。
例如,有任一元组虽然对于全局读事务不可见,但是,该元组是由gxid2这个事务提交,且gxid2在第一全局写事务组中,则输出该元组。
上述步骤210至211为根据该第一全局写事务组和该全局读事务,输出第一目标数据,该第一目标数据包括基于该全局读事务和该第一全局写事务组所获取的数据。
212、该多个节点设备中的各个节点设备向该网关服务器发送获取到的第一目标数据。
213、该网关服务器输出接收到的第一目标数据。
对于各个节点设备来说,可以根据接收到的第一全局写事务组中的事务以及该全局读事务,来获取可见数据,从而为全局读事务输出数据。在一种可能实现方式中,网关服务器可以在接收到任一个节点设备所返回的第一目标数据,即输出已获取到的数据,在另一种可能实现方式中,网关服务器还可以在接收到所有节点设备所返回的第一目标数据后,再输出已获取到的数据,本发明实施例对此不做限定。
本发明实施例提供的方法,通过找到当前全局读事务发生时处于活跃状态的全局写事务,来确定可能影响事务一致性的全局写事务,也即是找到了多个节点设备之间的、基于MVCC的、共同的具有事务一致性的点,基于这样的全局写事务的读取,相当于将所读取的时刻推后到了一个相对于当前时刻更延迟的时刻上,可以看作是一种延迟读的过程,而在数据读取过程中,由于排除了可能导致事务不一致的全局写事务,使得所读取的数据具有事务一致性,实现了数据库***对外的数据一致性。由于在进行延迟读的过程中,通过对全局读事务所涉及的各个节点设备上活跃全局写事务的分析,从而将一些可能导致数据不一致的全局写事务组成事务组,用在后续的节点设备读取过程中,能够排除可能会导致数据不一致的情况,保证读取的数据处于一致性状态,实现了数据库***对外的数据一致性。
上述实施例是基于对提交操作的禁止和恢复来确定第一全局写事务组,再基于第一全局写事务组来获取元组的实施例,在一些实施例,为了提高并发度,避免由于禁止提交而可能引发的阻塞,还可以不进行提交的禁止,而是通过确定第一全局写事务组和第二全局写事务组的方式,来确定一些会引起数据不一致的事务以及不会引起数据不一致的事务,再基于第一全局写事务组和第二全局写事务组,来获取元组,参见图5,该实施例可以包括以下步骤:
501、当读事务涉及到跨节点操作时,网关服务器将该读事务确定为全局读事务,网关服务器向全局事务标识生成集群发送生成请求。
502、全局事务标识生成集群接收到该生成请求后,为该全局读事务生成全局事务标识,将全局事务标识发送给该网关服务器。
503、该网关服务器将该全局事务标识和该读事务的局部事务标识作为该全局读事务的事务标识。
上述步骤501至503与步骤201至203同理,在此不做赘述。
504、网关服务器向该全局读事务对应的多个节点设备发送第二指示消息,该第二指示消息用于指示该多个节点设备返回该全局读事务的相关事务列表。
该第二指示消息可以包括全局读事务的事务标识以及多个节点设备的节点标识。每个节点设备的相关事务列表包含节点设备上正在进行的相关全局写事务以及每个相关全局写事务的事务状态,每个相关全局写事务对应于所述多个节点设备中至少两个节点设备。
505、该多个节点设备中的各个节点设备根据接收到的第二指示消息,获取相关事务列表,该相关事务列表包含该节点设备上正在进行的相关全局写事务以及每个相关全局写事务的事务状态,每个相关全局写事务对应于该多个节点设备中至少两个节点设备。
该步骤505与步骤206同理,在此不做赘述。
506、该多个节点设备中的各个节点设备发送该相关事务列表。
507、该网关服务器接收该多个节点设备的相关事务列表后,根据所述多个节点设备的相关事务列表,确定第一全局写事务组和第二全局写事务组。
其中,该第一全局写事务组所包括的第一全局写事务在对应节点设备上的事务状态包括正在执行状态和准备提交状态,该第二全局写事务组所包括的第二全局写事务在对应节点设备上的事务状态均为正在执行状态。
可选地,该步骤507可以包括下述步骤507A至507B:
507A:从该多个节点设备的相关事务列表中,当任一事务在对应节点上的事务状态包括正在执行状态和准备提交状态时,将该事务作为第一全局写事务添加至该第一全局写事务组。
该过程与上述步骤208同理,在此不做赘述。
507B:从该多个节点设备的相关事务列表中,当任一事务在对应节点上的事务状态均为正在执行状态时,将该事务作为第二全局写事务添加至该第二全局写事务组。
如果第二全局写事务组内的事务后续提交,则可能造成新的不一致,因此,可以也对该类型的事务记录成一组,该第二全局写事务组内的事务均是可能产生不一致的事务,可以在后续将这些事务所对应元组的版本排除在读取之外,以避免数据不一致的情况。该第二全局写事务组可以看作是一个元组不可见集合。例如,基于上述表1所提供的示例,情况2所涉及的事务,即属于该第二全局写事务组。
需要说明的是,上述步骤507A和507B可以并行进行,或者按照任一先后顺序进行,本发明实施例对此不做限定。
508、该网关服务器将该第一全局写事务组和第二全局写事务组发送至该多个节点设备。
509、节点设备根据所述第一全局写事务组、所述第二全局写事务组以及所述全局读事务,输出第二目标数据,所述第二目标数据包括基于所述全局读事务、所述第一全局写事务组以及所述第二全局写事务组获取的数据。
当节点设备将所有的包含准备提交状态的全局写事务都执行完毕,也即是,第一全局写事务已处于已提交状态时,则可以确定执行后续的数据可见性判断过程,以进行实际的数据读取。其中,全局写事务处于已提交状态是指该全局写事务在各个节点设备上的事务状态均为已提交状态。
具体地,该步骤509包括:根据所述全局读事务的事务快照,输出所述全局读事务的目标元组中的第一元组,所述第一元组为对于所述全局读事务可见的元组;如果所述全局读事务的目标元组中包括第二元组,且提交所述第二元组的事务为任一个第一全局写事务,输出所述第二元组,所述第二元组为对于所述全局读事务不可见的元组;如果所述全局读事务的目标元组中包括第二元组,且提交所述第二元组的事务为任一个第二全局写事务,忽略所述第二元组。
上述的获取数据过程主要是结合了MVCC可见性判断以及两个不同用途的事务组来确定,对于不满足可见性条件的元组版本,如果是第一全局写事务组中的某个事务生成的数据,则可见。但如果是第二全局写事务组中的某个事务生成的数据,则不可见。
在上述过程中,该第一全局写事务在节点设备开始读取时已经完成了提交,因此,这部分数据不会存在一部分已提交一部分未提交的状态,也就不会造成读取的不一致,而由于在整个流程中没有控制情况2中在各个节点设备上均处于正在执行状态的事务的提交,因此,需要在节点设备的读取过程中排除这部分事务,也即是第二全局写事务所产生的相关数据,因此,基于第一全局写事务组的数据读取过程和第二全局写事务组的数据排除过程,能够在保证所输出的数据具有一致性的同时,排除影响数据一致性的数据。
在上述步骤501至509中,不会禁止事务的提交,后续也就不用解禁事务提交,不仅减少了信令的交互数量,还提高了并发度。
510、节点设备向该网关服务器发送获取到的第二目标数据。
511、该网关服务器输出接收到的第二目标数据。
对于各个节点设备来说,可以根据接收到的第一全局写事务组中的事务以及该全局读事务,来获取可见数据,从而为全局读事务输出数据。在一种可能实现方式中,网关服务器可以在接收到任一个节点设备所返回的第二目标数据,即输出已获取到的数据,在另一种可能实现方式中,网关服务器还可以在接收到所有节点设备所返回的第二目标数据后,再输出已获取到的数据,本发明实施例对此不做限定。
当然,在上述网关服务器的任一次消息发送过程中,均可以设置超时机制,以避免影响数据库***的正常运行。在一些实施例中,对于只涉及只读事务的全局读事务来说,如果任一次信息发送过程发生超时,也可以不进行回滚,例如,对于只读事务,网关服务器可以从新开始获取一个GTID(Global TransactionID,全局事务标识符)值,然后分发给各个节点设备,各个节点设备重新构建第一全局事务组,以进行只读操作。这个机制避免了只读事务的回滚操作,能提高***的事务吞吐量,尤其是对HTAP***中读频繁的应用场景更有效。
本发明实施例提供的方法还可以支持多个全局读事务并发执行。例如,当多个全局读事务之间的时间间隔小于预设时间间隔(如1秒内,可作为参数设置),且所读取的节点设备相同或是包含关系(例如前一个全局读事务所读取的节点范围包含后一个全局读事务的读取节点设备范围),则允许后一个全局读事务复用前一个全局读事务的第一全局读事务组和第二全局读事务组中至少一组,以进一步提高整体性能。
本发明实施例提供的方法,通过找到当前全局读事务发生时处于活跃状态的全局写事务,来确定可能影响事务一致性的全局写事务,也即是找到了多个节点设备之间的、基于MVCC的、共同的具有事务一致性的点,基于这样的全局写事务的读取,相当于将所读取的时刻推后到了一个相对于当前时刻更延迟的时刻上,可以看作是一种延迟读的过程,而在数据读取过程中,由于排除了可能导致事务不一致的全局写事务,使得所读取的数据具有事务一致性,实现了数据库***对外的数据一致性。
进一步地,本发明实施例所涉及的***架构提供了一种为分布式数据库***提供的一个轻量的、去中心化的事务处理架构,其中,轻量特性体现在于使用了全局事务标识生成集群,该集群功能单一,可在内存中批量生成全局事务标识,效率极高。相对于一个实现了全局事务管理、冲突访问控制、MVCC机制的全局事务管理器而言,性能优势特别明显。去中心化体现在于该***内的事务的处理所依赖的是各个节点设备,而不是全局事务管理器,因此,架构中不存在单点的、复杂而耗时的全局事务管理器,从而实现了在功能完备基础上的去中心化。
进一步地,本发明实施例还能够保证分布式数据库***实现外部一致性的特性,也即是,发生在分布式数据库中的事件,获取数据需要按事件发生的次序,且在数据库中被查阅数据时,依旧能体现出原来的事件次序。而由于全局事务标识生成集群为类TDSQL***提供了全局唯一的、单调递增的一个逻辑时间标识,可以有效保证外部一致性。即全局读事务之后的新事务,即使事务先于全局读事务提交,但其数据依旧对于全局读事务不可见。再者,该全局事务标识生成集群在逻辑上是一个单点,物理上主副本、从副本却都能提供服务,所以全局事务标识生成集群成为性能瓶颈的机会降低。
本发明实施例适用于分布式数据库(SQL、NoSQL、NewSQL,关系型、非关系型)、基于MVCC的关系型数据库、基于MVCC的非关系型数据库、分布式大数据处理等***等任一种支持跨节点的全局写操作的事务性数据库***。进一步地,本发明实施例特别适合于构建分布式的HTAP数据库,尤其是海量时态分布式HTAP(Hybird Transactional/AnalyticalProcessing,事务处理/在线分析处理)数据库。由于本发明实施例为分布式事务、分析型数据库的架构在事务处理机制层面减负,使得事务处理机制简单高效。而采用MVCC的单机数据库***作为每个节点的基线,配合去中心化的、轻量的事务处理机制,使得并发的查询受到的限制更少,且查询操作是各节点之间自治的,因而非常适合于分析***使用。综上所述,本发明实施例为分布式混合型(事务、分析型)数据库的高性能提供了可能,在分布式数据库的架构层面,整个***的性能提升的技术优势明显。
对于单机实现MVCC技术的数据库***,其不同的实现方式对本发明实施例会有一定影响。例如,数据的并发访问控制技术实现了可串行化的场景下,对于依赖于TO(时间戳)+MVCC的数据库来说,例如PostgreSQL,使用SSI(spring struts ibatis)技术保证了可串行化,由于SSI技术本质上也是MVCC技术,因此不管在哪个隔离级别下,本发明实施例提供的数据读取方法可以适用。当然,跨节点的事务在每个节点设备上设置的隔离级别需要保持一致。而对于依赖基于封锁的技术的数据库来说,例如MySQL/InnoDB,使用MVCC实现了RR(Repeatable Read,可重复读隔离级别)和RC(Read_Committed,读已提交隔离级别),本发明实施例提供的数据读取方法可以适用。当然,跨节点的事务在每个节点上设置的隔离级别也需要保持一致。而对于采用SI隔离方式的数据库,本发明实施例同样适用。
需要说明的是,上述数据读取方法可以应用于备份技术中,当执行全局备份时,需要读取的对象是集群内的所有节点设备,此种情况下,该数据读取方式可能会暂停所有正在执行的写事务进行提交,(时间相对于全局事务管理器理论上更短)。但不影响新事务的启动、运行,不影响正在执行的所有子事务处于正在执行状态阶段的分布式写事务。而对于非全局的备份,由于涉及的节点数有限,对数据库***的影响较小;采用本发明实施例提供的方法,从架构上消除了全局事务的单点瓶颈,根本上可以较大幅度提高***整体的事务吞吐量,而由于暂停部分全局写事务的提交操作带来的性能损耗实际上非常小,不会影响整体性能,不会造成读写操作的互相阻塞。
在一些实施例中,节点设备之间可以保持心跳,一旦有任一个被读取的节点设备发生宕机等情况,而无法应答读取,则可以上报给网关服务器,由网关服务器负责事务回滚释放禁止写继续执行等禁令,处理写事务失败等事件)。而如果一些节点设备已经完成了子事务,则可以通知用户返回的数据无效,当然,对于集中式返回结果的机制,则在任一节点设备发生情况时,不会向用户输出结果,也就无需进行上述对用户的通知。
在一些实施例中,每个节点集群均可能存在不同的主备架构,而在执行全局读事务时,可以基于不同的主备架构进行,该全局读事务的优先读取对象为存储有主副本的节点设备。而基于不同的主备架构,本发明实施例提供的方法的应用可以有不同的适用:
第一种方式是依靠主从逻辑复制技术,来实现高可靠性,如MySQL的主从复制是使用binglog的逻辑复制。对于第一种方式,因为写事务首先发生在主副本的节点设备上,从副本的目的只是做备份和只读服务,因此,采用本发明实施例提供的读取方法在主机(也即是用于存储主副本的节点设备)进行读操作,能够确保全局读的事务一致性。以MySQL的主从复制技术为例,由于其主从复制机制,有可能会导致在备机也即是用于存储从副本的节点设备)上,用户的SQL语句被重新执行,而由于事务标识是每个数据库引擎自动分配的,可能会造成主副本和从副本上元组上的事务标识不同,为此,主机和备机之间可以进行一定的信令交互,例如,图6提供了一种数据库***中作为主机和备机的节点设备之间的信令交互图,参见图6所示,上述方法还可以包括:当主备结构的数据库中采用主从逻辑复制技术时,在备机接收到主机传递的全局事务的操作指令时,根据所述全局事务的全局事务标识对所述备机上执行事务的事务标识进行赋值。其中,该全局事务即可以为全局读事务也可以为全局写事务,本发明实施例对此不做限定。例如,在主机生成binglog的时候,对于每个事务,可以向备机传递全局事务的{gxid,lxid},备机收到{gxid,lxid}并执行binglog中的SQL语句时,为每个事务的gxid和lxid用收到的{gxid,lxid}赋值。如下表2,提供了MySQLBinlog格式改进的对比表。
表2
以上方式,解决了逻辑复制架构下的全局读一致性问题,而且还能够解决对于任一种跨节点事务(例如主主、主备、备备组合)情况下的全局读数据一致性问题。例如,全局读事务读取的数据,全部源自备机***,这样不影响生成分布式数据库***中的主机,整体性能高。
第二种方式是主从物理复制技术,来实现高可靠性,如使用REDO日志(Log)的物理复制,例如,PostgreSQL的流复制技术就是依靠REDO Log的物理复制技术。对于该第二种方式,也即是物理复制的方式,因为元组是物理级别的复制,所以不会丢失元组的事务标识,但是,不同的数据库其多版本的数据的组织方式不同,导致其恢复的过程可能不同。典型的方式有如下两种:
类PostgreSQL方式:此类方式的特点,是多版本数据存储在页面(PAGE)内,使用REDO方式恢复的时候,已经被恢复到备机,所以读取“脏”的历史数据可以被成功读取,不会影响本发明实施例的数据读取方法的应用。
类MySQL/InnoDB方式:此类方式的特点,是多版本数据存储在内存的回滚段内。基于RODO日志做恢复,缺少回滚段的信息被同时在备机恢复,为此,可以把回滚段的信息也同步到备机(如回滚段信息记入REDO Log,恢复时根据记录的回滚段信息进行内存复原),而在实施本发明实施例提供的读取方法时,读取所述备机中存储的当前态数据和所述备机的回滚段信息中的过渡态数据,也就避免了对本发明实施例的数据读取方法的应用造成影响。
第三种方式是依靠分布式一致性协议,实现逻辑或物理的多副本的数据一致性,来实现高可靠性,如以Paxos、Raft等分布式一致性协议构建的高可靠***。对于第三种方式,可以区分逻辑的方式和物理的方式,具体可以参见上述第一种方式和第二种方式的处理。
图7是本发明实施例提供的一种数据读取装置的结构示意图,参见图4,该装置包括:
发送模块701,用于向全局读事务对应的多个节点设备发送第一指示消息,所述第一指示消息用于指示所述多个节点设备停止进行全局写事务的提交操作;
接收模块702,用于接收所述多个节点设备的相关事务列表,每个节点设备的相关事务列表包含节点设备上正在进行的相关全局写事务以及每个相关全局写事务的事务状态,每个相关全局写事务对应于所述多个节点设备中至少两个节点设备;
确定模块703,用于根据所述多个节点设备的相关事务列表,确定第一全局写事务组,所述第一全局写事务组所包括的第一全局写事务在对应节点设备上的事务状态包括正在执行状态和准备提交状态;
所述发送模块701,还用于向所述多个节点设备发送所述第一全局写事务组;
所述接收模块702,还用于接收所述多个节点设备返回的第一目标数据,所述第一目标数据包括基于所述全局读事务和所述第一全局写事务组获取的数据。
在一种可能实施方式中,所述确定模块用于:
从所述多个节点设备的相关事务列表中,当任一事务在对应节点设备上的事务状态包括正在执行状态和准备提交状态时,将所述事务作为第一全局写事务添加至所述第一全局写事务组。
在一种可能实施方式中,所述装置还包括:
全局事务标识获取模块,用于将当任一读事务涉及到跨节点操作时,将所述读事务确定为全局读事务,为所述全局读事务获取全局事务标识。
在一种可能实施方式中,所述全局事务标识获取模块用于向全局事务标识生成集群发送生成请求;接收所述全局事务标识生成集群所返回的全局事务标识,将该全局事务标识作为该全局读事务的事务标识。
在一种可能实施方式中,当所述读事务的操作语句携带指定关键字时,确定所述读事务涉及到跨节点操作;
根据所述读事务的操作语句所要读取数据的范围以及所述范围内的元数据,确定所要读取的数据是否存储于两个以上的节点设备,当确定存储于所述两个以上的节点设备时,确定所述读事务涉及到跨节点操作。
在一种可能实施方式中,所述装置还包括:
当主备结构的数据库中采用主从逻辑复制技术时,在备机接收到主机传递的全局事务的操作指令时,根据所述全局事务的全局事务标识对所述备机上执行事务的事务标识进行赋值;
当主备结构的数据库中采用主从物理复制技术时,在基于所述全局读事务进行读取的过程中,读取所述备机中存储的当前态数据和所述备机的回滚段信息中的过渡态数据。
在一种可能实施方式中,所述装置还包括:
回滚模块,用于当在目标时长内未接收到所述多个节点设备的至少一个节点设备的应答时,回滚所述全局读事务。
上述所有可选技术方案,可以采用任意结合形成本公开的可选实施例,在此不再一一赘述。
需要说明的是:上述实施例提供的数据读取装置在数据读取时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的数据读取装置与数据读取方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
图8是本发明实施例提供的一种数据读取装置的结构示意图,参见图8,该装置包括:
停止模块801,用于根据接收到的第一指示消息,停止进行全局写事务的提交操作,所述第一指示消息用于指示全局读事务对应的多个节点设备停止进行全局写事务的提交操作;
获取模块802,用于获取相关事务列表,所述相关事务列表包含所述节点设备上正在进行的相关全局写事务以及每个相关全局写事务的事务状态,每个相关全局写事务对应于所述多个节点设备中至少两个节点设备;
发送模块803,用于发送所述相关事务列表;
接收模块804,用于接收第一全局写事务组,所述第一全局写事务组所包括的第一全局写事务在对应节点设备上的事务状态包括正在执行状态和准备提交状态;
输出模块805,用于当所述第一全局写事务组中的第一全局写事务处于已提交状态,根据所述第一全局写事务组和所述全局读事务,输出第一目标数据,所述第一目标数据包括基于所述全局读事务和所述第一全局写事务组所获取的数据。
在一种可能实施方式中,所述获取模块用于:遍历所述节点设备上正在进行的全局写事务;当任一个全局写事务所对应的节点设备包括所述多个节点设备中的至少两个节点设备,将所述写事务添加至所述相关事务列表。
在一种可能实施方式中,所述输出模块用于根据所述全局读事务的事务快照,输出所述全局读事务对应的第一元组,所述第一元组为目标元组的可见版本;
如果所述目标元组包括第二元组,且提交所述第二元组的事务为任一个第一全局写事务,输出所述第二元组,所述第二元组为所述目标元组的不可见版本。
需要说明的是:上述实施例提供的数据读取装置在数据读取时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的数据读取装置与数据读取方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
图9是本发明实施例提供的一种数据读取装置的结构示意图,参见图9,该装置包括:
发送模块901,用于向全局读事务对应的多个节点设备发送第二指示消息,所述第二指示消息用于指示所述多个节点设备返回所述全局读事务的相关事务列表;
接收模块902,用于接收所述多个节点设备的相关事务列表,每个节点设备的相关事务列表包含节点设备上正在进行的相关全局写事务以及每个相关全局写事务的事务状态,每个相关全局写事务对应于所述多个节点设备中至少两个节点设备;
确定模块903,用于根据所述多个节点设备的相关事务列表,确定第一全局写事务组和第二全局写事务组,所述第一全局写事务组所包括的第一全局写事务在对应节点设备上的事务状态包括正在执行状态和准备提交状态,所述第二全局写事务组所包括的第二全局写事务在对应节点设备上的事务状态均为正在执行状态;
所述发送模块901还用于当所述第一全局写事务组中的第一全局写事务在对应节点设备上均处于已提交状态,向所述多个节点设备发送所述第一全局写事务组和所述第二全局写事务组;
所述接收模块902还用于接收所述多个节点设备返回的第二目标数据,所述第二目标数据包括基于所述全局读事务、所述第一全局写事务组以及所述第二全局写事务组获取的数据。
在一种可能实施方式中,
所述确定模块用于从所述多个节点设备的相关事务列表中,若任一全局写事务在对应节点设备上的事务状态包括正在执行状态和准备提交状态,将所述全局写事务作为第一全局写事务添加至所述第一全局写事务组;从所述多个节点设备的相关事务列表中,若任一全局写事务在对应节点设备上的事务状态均为正在执行状态,将所述全局写事务作为第二全局写事务添加至所述第二全局写事务组。
需要说明的是:上述实施例提供的数据读取装置在数据读取时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的数据读取装置与数据读取方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
图10是本发明实施例提供的一种数据读取装置的结构示意图,参见图10,该装置包括:
接收模块1001,用于接收第二指示消息,所述第二指示消息用于指示全局读事务的多个节点设备返回相关事务列表;
获取模块1002,用于获取相关事务列表,每个节点设备的相关事务列表包含所述节点设备上正在进行的相关全局写事务以及每个相关全局写事务的事务状态,每个相关全局写事务对应于所述多个节点设备中至少两个节点设备;
发送模块1003,用于发送所述相关事务列表;
所述接收模块1001还用于接收第一全局写事务组和第二全局写事务组,所述第一全局写事务组所包括的第一全局写事务在对应节点设备上的事务状态包括正在执行状态和准备提交状态,所述第二全局写事务组所包括的第二全局写事务在对应节点设备上的事务状态均为正在执行状态;
输出模块1004,用于当所述第一全局写事务组中的第一全局写事务处于已提交状态,根据所述第一全局写事务组、所述第二全局写事务组以及所述全局读事务,输出第二目标数据,所述第二目标数据包括基于所述全局读事务、所述第一全局写事务组以及所述第二全局写事务组获取的数据。
在一种可能实施方式中,所述输出模块用于根据所述全局读事务的事务快照,输出所述全局读事务对应的第一元组,所述第一元组为目标元组的可见版本;如果所述目标元组包括第二元组,且提交所述第二元组的事务为任一个第一全局写事务,输出所述第二元组,所述第二元组为所述目标元组的不可见版本;如果所述目标元组包括第二元组,且提交所述第二元组的事务为任一个第二全局写事务,忽略所述第二元组。
需要说明的是:上述实施例提供的数据读取装置在数据读取时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的数据读取装置与数据读取方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
图11是本发明实施例提供的一种电子设备的结构示意图,该电子设备1100可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器(centralprocessing units,CPU)1101和一个或一个以上的存储器1102,其中,所述存储器1102中存储有至少一条指令,所述至少一条指令由所述处理器1101加载并执行以实现上述各个方法实施例提供的数据读取方法。当然,该电子设备还可以具有有线或无线网络接口、键盘以及输入输出接口等部件,以便进行输入输出,该电子设备还可以包括其他用于实现设备功能的部件,在此不做赘述。上述数据读取过程中所涉及到的网关服务器以及节点设备均可以采用该电子设备的硬件结构。
本发明实施例还提供了一种计算机可读存储介质,该计算机可读存储介质应用于服务器,该计算机可读存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,该指令、该程序、该代码集或该指令集由处理器加载并执行以实现上述实施例的数据读取方法中网关服务器或节点设备所执行的操作。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (15)
1.一种数据读取方法,其特征在于,所述方法包括:
向全局读事务对应的多个节点设备发送第一指示消息,所述第一指示消息用于指示所述多个节点设备停止进行全局写事务的提交操作;
接收所述多个节点设备的相关事务列表,每个节点设备的相关事务列表包含节点设备上正在进行的相关全局写事务以及每个相关全局写事务的事务状态,每个相关全局写事务对应于所述多个节点设备中至少两个节点设备;
根据所述多个节点设备的相关事务列表,确定第一全局写事务组,所述第一全局写事务组所包括的第一全局写事务在对应节点设备上的事务状态包括正在执行状态和准备提交状态;
向所述多个节点设备发送所述第一全局写事务组;
接收所述多个节点设备返回的第一目标数据,所述第一目标数据包括基于所述全局读事务和所述第一全局写事务组获取的数据。
2.根据权利要求1所述的方法,其特征在于,所述根据所述多个节点设备的相关事务列表,确定第一全局写事务组包括:
从所述多个节点设备的相关事务列表中,当任一事务在对应节点设备上的事务状态包括正在执行状态和准备提交状态时,将所述事务作为第一全局写事务添加至所述第一全局写事务组。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
当任一读事务涉及到跨节点操作时,将所述读事务确定为全局读事务,向全局事务标识生成集群发送生成请求;
接收所述全局事务标识生成集群所返回的全局事务标识,将该全局事务标识作为该全局读事务的事务标识。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
当主备结构的数据库中采用主从逻辑复制技术时,在备机接收到主机传递的全局事务的操作指令时,根据所述全局事务的全局事务标识对所述备机上执行事务的事务标识进行赋值;
当主备结构的数据库中采用主从物理复制技术时,在基于所述全局读事务进行读取的过程中,读取所述备机中存储的当前态数据和所述备机的回滚段信息中的过渡态数据。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
当在目标时长内未接收到所述多个节点设备的至少一个节点设备的应答时,回滚所述全局读事务。
6.一种数据读取方法,其特征在于,应用于节点设备,所述方法包括:
根据接收到的第一指示消息,停止进行全局写事务的提交操作,所述第一指示消息用于指示全局读事务对应的多个节点设备停止进行全局写事务的提交操作;
获取相关事务列表,所述相关事务列表包含所述节点设备上正在进行的相关全局写事务以及每个相关全局写事务的事务状态,每个相关全局写事务对应于所述多个节点设备中至少两个节点设备;
发送所述相关事务列表;
接收第一全局写事务组,所述第一全局写事务组所包括的第一全局写事务在对应节点设备上的事务状态包括正在执行状态和准备提交状态;
当所述第一全局写事务组中的第一全局写事务处于已提交状态,根据所述第一全局写事务组和所述全局读事务,输出第一目标数据,所述第一目标数据包括基于所述全局读事务和所述第一全局写事务组所获取的数据。
7.根据权利要求6所述的方法,其特征在于,所述获取相关事务列表包括:
遍历所述节点设备上正在进行的全局写事务;
当任一个全局写事务所对应的节点设备包括所述多个节点设备中的至少两个节点设备,将所述写事务添加至所述相关事务列表。
8.根据权利要求6所述的方法,其特征在于,所述根据所述第一全局写事务组和所述全局读事务,输出所述第一目标数据,所述目标数据包括基于所述全局读事务和所述第一全局写事务组所获取的数据包括:
根据所述全局读事务的事务快照,输出所述全局读事务的目标元组中的第一元组,所述第一元组为对于所述全局读事务可见的元组;
如果所述全局读事务的目标元组中包括第二元组,且提交所述第二元组的事务为任一个第一全局写事务,输出所述第二元组,所述第二元组为对于所述全局读事务不可见的元组。
9.一种数据读取方法,其特征在于,所述方法包括:
向全局读事务对应的多个节点设备发送第二指示消息,所述第二指示消息用于指示所述多个节点设备返回所述全局读事务的相关事务列表;
接收所述多个节点设备的相关事务列表,每个节点设备的相关事务列表包含节点设备上正在进行的相关全局写事务以及每个相关全局写事务的事务状态,每个相关全局写事务对应于所述多个节点设备中至少两个节点设备;
根据所述多个节点设备的相关事务列表,确定第一全局写事务组和第二全局写事务组,所述第一全局写事务组所包括的第一全局写事务在对应节点设备上的事务状态包括正在执行状态和准备提交状态,所述第二全局写事务组所包括的第二全局写事务在对应节点设备上的事务状态均为正在执行状态;
当所述第一全局写事务组中的第一全局写事务在对应节点设备上均处于已提交状态,向所述多个节点设备发送所述第一全局写事务组和所述第二全局写事务组;
接收所述多个节点设备返回的第二目标数据,所述第二目标数据包括基于所述全局读事务、所述第一全局写事务组以及所述第二全局写事务组获取的数据。
10.根据权利要求9所述的方法,其特征在于,所述根据所述多个节点设备的相关事务列表,确定第一全局写事务组和第二全局写事务组包括:
从所述多个节点设备的相关事务列表中,若任一全局写事务在对应节点设备上的事务状态包括正在执行状态和准备提交状态,将所述全局写事务作为第一全局写事务添加至所述第一全局写事务组;
从所述多个节点设备的相关事务列表中,若任一全局写事务在对应节点设备上的事务状态均为正在执行状态,将所述全局写事务作为第二全局写事务添加至所述第二全局写事务组。
11.一种数据读取方法,其特征在于,应用于节点设备,所述方法包括:
接收第二指示消息,所述第二指示消息用于指示全局读事务的多个节点设备返回相关事务列表;
获取相关事务列表,每个节点设备的相关事务列表包含所述节点设备上正在进行的相关全局写事务以及每个相关全局写事务的事务状态,每个相关全局写事务对应于所述多个节点设备中至少两个节点设备;
发送所述相关事务列表;
接收第一全局写事务组和第二全局写事务组,所述第一全局写事务组所包括的第一全局写事务在对应节点设备上的事务状态包括正在执行状态和准备提交状态,所述第二全局写事务组所包括的第二全局写事务在对应节点设备上的事务状态均为正在执行状态;
当所述第一全局写事务组中的第一全局写事务处于已提交状态,根据所述第一全局写事务组、所述第二全局写事务组以及所述全局读事务,输出第二目标数据,所述第二目标数据包括基于所述全局读事务、所述第一全局写事务组以及所述第二全局写事务组获取的数据。
12.根据权利要求11所述的方法,其特征在于,所述根据所述第一全局写事务组、所述第二全局写事务组以及所述全局读事务,输出第二目标数据,所述第二目标数据包括基于所述全局读事务、所述第一全局写事务组以及所述第二全局写事务组获取的数据包括:
根据所述全局读事务的事务快照,输出所述全局读事务的目标元组中的第一元组,所述第一元组为对于所述全局读事务可见的元组;
如果所述全局读事务的目标元组中包括第二元组,且提交所述第二元组的事务为任一个第一全局写事务,输出所述第二元组,所述第二元组为对于所述全局读事务不可见的元组;
如果所述全局读事务的目标元组中包括第二元组,且提交所述第二元组的事务为任一个第二全局写事务,忽略所述第二元组。
13.一种数据读取装置,其特征在于,所述装置包括:
发送模块,用于向全局读事务对应的多个节点设备发送第一指示消息,所述第一指示消息用于指示所述多个节点设备停止进行全局写事务的提交操作;
接收模块,用于接收所述多个节点设备的相关事务列表,每个节点设备的相关事务列表包含节点设备上正在进行的相关全局写事务以及每个相关全局写事务的事务状态,每个相关全局写事务对应于所述多个节点设备中至少两个节点设备;
确定模块,用于根据所述多个节点设备的相关事务列表,确定第一全局写事务组,所述第一全局写事务组所包括的第一全局写事务在对应节点设备上的事务状态包括正在执行状态和准备提交状态;
所述发送模块,还用于向所述多个节点设备发送所述第一全局写事务组;
所述接收模块,还用于接收所述多个节点设备返回的第一目标数据,所述第一目标数据包括基于所述全局读事务和所述第一全局写事务组获取的数据。
14.一种电子设备,其特征在于,所述电子设备包括处理器和存储器,所述存储器中存储有至少一条指令,所述至少一条指令由该处理器加载并执行以实现如权利要求1至12中任一项所提供的数据读取方法所执行的操作。
15.一种计算机可读存储介质,其特征在于,所述存储介质中存储有至少一条指令,所述至少一条指令由该处理器加载并执行以实现如权利要求1至12中任一项所提供的数据读取方法所执行的操作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910021181.9A CN109783578B (zh) | 2019-01-09 | 2019-01-09 | 数据读取方法、装置、电子设备以及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910021181.9A CN109783578B (zh) | 2019-01-09 | 2019-01-09 | 数据读取方法、装置、电子设备以及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109783578A true CN109783578A (zh) | 2019-05-21 |
CN109783578B CN109783578B (zh) | 2022-10-21 |
Family
ID=66499299
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910021181.9A Active CN109783578B (zh) | 2019-01-09 | 2019-01-09 | 数据读取方法、装置、电子设备以及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109783578B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111190935A (zh) * | 2019-08-27 | 2020-05-22 | 中国人民大学 | 数据读取方法、装置、计算机设备及存储介质 |
CN111338766A (zh) * | 2020-03-12 | 2020-06-26 | 腾讯科技(深圳)有限公司 | 事务处理方法、装置、计算机设备及存储介质 |
WO2021217863A1 (zh) * | 2020-04-29 | 2021-11-04 | 平安科技(深圳)有限公司 | 订单标识生成方法、装置、服务器及存储介质 |
CN114661816A (zh) * | 2020-12-24 | 2022-06-24 | 金篆信科有限责任公司 | 数据同步方法、装置、电子设备、存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102831156A (zh) * | 2012-06-29 | 2012-12-19 | 浙江大学 | 一种云计算平台上的分布式事务处理方法 |
CN103164219A (zh) * | 2013-01-08 | 2013-06-19 | 华中科技大学 | 去中心化架构中使用多类型副本的分布式事务处理*** |
WO2016078423A1 (zh) * | 2014-11-17 | 2016-05-26 | 中兴通讯股份有限公司 | 分布式数据库***的事务处理方法及装置 |
CN108027829A (zh) * | 2015-07-10 | 2018-05-11 | 起元技术有限责任公司 | 在具有分布式数据库***的网络中提供数据库访问控制的***和架构 |
US20180150504A1 (en) * | 2016-11-30 | 2018-05-31 | Sap Se | Write Access Control in a Database |
-
2019
- 2019-01-09 CN CN201910021181.9A patent/CN109783578B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102831156A (zh) * | 2012-06-29 | 2012-12-19 | 浙江大学 | 一种云计算平台上的分布式事务处理方法 |
CN103164219A (zh) * | 2013-01-08 | 2013-06-19 | 华中科技大学 | 去中心化架构中使用多类型副本的分布式事务处理*** |
WO2016078423A1 (zh) * | 2014-11-17 | 2016-05-26 | 中兴通讯股份有限公司 | 分布式数据库***的事务处理方法及装置 |
CN108027829A (zh) * | 2015-07-10 | 2018-05-11 | 起元技术有限责任公司 | 在具有分布式数据库***的网络中提供数据库访问控制的***和架构 |
US20180150504A1 (en) * | 2016-11-30 | 2018-05-31 | Sap Se | Write Access Control in a Database |
Non-Patent Citations (3)
Title |
---|
卢正鼎等: "多数据库***中的一致性维护", 《计算机研究与发展》 * |
鄢勇等: "一基于数据驱动的分布式事务计算模型", 《计算机学报》 * |
黄超等: "分布式数据库***中数据一致性维护方法讨论", 《沿海企业与科技》 * |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111190935A (zh) * | 2019-08-27 | 2020-05-22 | 中国人民大学 | 数据读取方法、装置、计算机设备及存储介质 |
CN111338766A (zh) * | 2020-03-12 | 2020-06-26 | 腾讯科技(深圳)有限公司 | 事务处理方法、装置、计算机设备及存储介质 |
CN111338766B (zh) * | 2020-03-12 | 2022-10-25 | 腾讯科技(深圳)有限公司 | 事务处理方法、装置、计算机设备及存储介质 |
WO2021217863A1 (zh) * | 2020-04-29 | 2021-11-04 | 平安科技(深圳)有限公司 | 订单标识生成方法、装置、服务器及存储介质 |
CN114661816A (zh) * | 2020-12-24 | 2022-06-24 | 金篆信科有限责任公司 | 数据同步方法、装置、电子设备、存储介质 |
CN114661816B (zh) * | 2020-12-24 | 2023-03-24 | 金篆信科有限责任公司 | 数据同步方法、装置、电子设备、存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN109783578B (zh) | 2022-10-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109739935A (zh) | 数据读取方法、装置、电子设备以及存储介质 | |
WO2020224374A1 (zh) | 数据复制方法、装置、计算机设备及存储介质 | |
CN106991113B (zh) | 数据库环境中的表格复制 | |
US10678808B2 (en) | Eager replication of uncommitted transactions | |
CN104793988B (zh) | 跨数据库分布式事务的实现方法和装置 | |
CN109710388A (zh) | 数据读取方法、装置、电子设备以及存储介质 | |
US7801851B2 (en) | Method for ensuring referential integrity in multi-threaded replication engines | |
JP4833590B2 (ja) | 同時トランザクション(concurrenttransactions)とページ同期(pagesynchronization) | |
JP5660693B2 (ja) | ハイブリッドoltp及びolap高性能データベースシステム | |
CN109783578A (zh) | 数据读取方法、装置、电子设备以及存储介质 | |
US7103586B2 (en) | Collision avoidance in database replication systems | |
US7779295B1 (en) | Method and apparatus for creating and using persistent images of distributed shared memory segments and in-memory checkpoints | |
US7917596B2 (en) | Super master | |
US11263236B2 (en) | Real-time cross-system database replication for hybrid-cloud elastic scaling and high-performance data virtualization | |
CN107148617B (zh) | 日志协调存储组的自动配置 | |
US10601890B2 (en) | Recoverable stream processing | |
Yan et al. | Carousel: Low-latency transaction processing for globally-distributed data | |
US11693828B2 (en) | Real-time data replication in a multiple availability zone cloud platform | |
EP4276651A1 (en) | Log execution method and apparatus, and computer device and storage medium | |
WO2022048416A1 (zh) | 操作请求的处理方法、装置、设备、可读存储介质及*** | |
US9201685B2 (en) | Transactional cache versioning and storage in a distributed data grid | |
US20230289368A1 (en) | Asynchronous data replication in a multiple availability zone cloud platform | |
Suganuma et al. | Distributed and fault-tolerant execution framework for transaction processing | |
Carvalho | Generic replication of software transactional memory | |
Almeida | Geo-replication in large scale cloud computing applications |
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 | ||
TR01 | Transfer of patent right |
Effective date of registration: 20230920 Address after: 518057 Tencent Building, No. 1 High-tech Zone, Nanshan District, Shenzhen City, Guangdong Province, 35 floors Patentee after: TENCENT TECHNOLOGY (SHENZHEN) Co.,Ltd. Patentee after: TENCENT CLOUD COMPUTING (BEIJING) Co.,Ltd. Address before: 518057 Tencent Building, No. 1 High-tech Zone, Nanshan District, Shenzhen City, Guangdong Province, 35 floors Patentee before: TENCENT TECHNOLOGY (SHENZHEN) Co.,Ltd. |
|
TR01 | Transfer of patent right |