一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

事务处理方法、系统、设备及存储介质与流程

2021-11-03 21:09:00 来源:中国专利 TAG:


1.本技术涉及计算机技术领域,尤其涉及一种事务处理方法、系统、设备及存储介质。


背景技术:

2.事务(transaction)是访问并可能操作各种数据对象(如:数据记录)的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。
3.事务系统是实现数据库acid属性(原子性、一致性、隔离性和持久性)的保证,它性能的好坏影响整个事务系统对事务处理的响应时间和整体吞吐率。


技术实现要素:

4.本技术实施例提供了一种事务处理方法、系统、设备及存储介质,能够提高事务系统的性能。
5.于是,在本技术的一个实施例中,提供了一种事务处理方法。所述方法适用于事务系统中的第一计算节点;
6.所述方法,包括:
7.启动第一事务后,从数据库中获取第一数据对象的最近一次修改所涉及的第二事务的事务标识;所述第一数据对象为所述第一事务所要访问的对象;
8.根据所述事务标识,从处理所述第二事务的第二计算节点的内存中获取目标事务状态信息;所述事务系统包括所述第二计算节点;所述第二计算节点的内存中存储有所述第二计算节点所处理的事务的事务状态信息;
9.基于所述目标事务状态信息,确定所述第二事务对所述第一数据对象的修改结果对所述第一事务是否可见。
10.在本技术的另一实施例中,提供了一种事务系统。该事务系统,包括:多个计算节点;所述多个计算节点中包括第一计算节点;
11.所述第一计算节点,用于:
12.启动第一事务后,从数据库中获取第一数据对象的最近一次修改所涉及的第二事务的事务标识;所述第一数据对象为所述第一事务所要访问的对象;
13.根据所述事务标识,从处理所述第二事务的第二计算节点的内存中获取目标事务状态信息;所述事务系统包括所述第二计算节点;所述第二计算节点的内存中存储有所述第二计算节点所处理的事务的事务状态信息;
14.基于所述目标事务状态信息,确定所述第二事务对所述第一数据对象的修改结果对所述第一事务是否可见。
15.在本技术的又一实施例中,提供了一种电子设备,该电子设备,包括:存储器和处理器,其中,
16.所述存储器,用于存储程序;
17.所述处理器,与所述存储器耦合,用于执行所述存储器中存储的所述程序,以用于实现上述所述事务处理方法中的步骤。
18.在本技术的另一实施例中,提供了一种存储有计算机程序的计算机可读存储介质,其中,所述计算机程序被计算机执行时能够实现上述所述的事务处理方法。
19.本技术实施例提供的技术方案中,计算节点将其本地处理的事务的事务状态存储在本地内存;一个计算节点可直接从另一个计算节点的内存中获取所需的事务状态信息。与现有技术中通过查询存储节点的磁盘上的回滚日志得到事务状态信息的方案相比,可避免磁盘操作,不仅可降低事务状态信息的获取开销,还可降低事务时延,从而有效提高事务系统的性能。
附图说明
20.为了更清楚地说明本技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
21.图1为本技术一实施例提供的事务系统的结构示意图;
22.图2为本技术一实施例提供的事务处理方法的流程示意图;
23.图3为本技术一实施例提供的事务处理方法的又一流程示意图;
24.图4为本技术一实施例提供的事务处理装置的结构框图;
25.图5为本技术另一实施例提供的电子设备的结构框图。
具体实施方式
26.目前,现有的事务系统中,所有的计算节点所处理的事务的事务状态信息是放在回滚日志中的,而回滚日志是需要交换(swap)到存储节点的磁盘上的。因此,某一计算节点在开启一个事务后,需要对存储节点的磁盘上存储的回滚日志进行回查,以获取事务状态信息。对存储节点的磁盘上存储的回滚日志进行回查,查询开销大,时延长,导致事务系统事务处理效率低,性能差。
27.为了解决上述问题,本技术实施例提供了一种事务处理方法。在该方法中,计算节点将其本地处理的事务的事务状态存储在本地内存;一个计算节点可直接从另一个计算节点的内存中获取所需的事务状态信息。与现有技术中需要对存储节点的磁盘上的回滚日志进行回查得到事务状态信息的方案相比,可避免磁盘操作,不仅可降低事务状态信息的获取开销,还可降低事务时延,从而有效提高事务系统的性能。
28.为了使本技术领域的人员更好地理解本技术方案,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
29.此外,在本技术的说明书、权利要求书及上述附图中描述的一些流程中,包含了按照特定顺序出现的多个操作,这些操作可以不按照其在本文中出现的顺序来执行或并行执行。操作的序号如101、102等,仅仅是用于区分各个不同的操作,序号本身不代表任何的执
行顺序。另外,这些流程可以包括更多或更少的操作,并且这些操作可以按顺序执行或并行执行。需要说明的是,本文中的“第一”、“第二”等描述,是用于区分不同的消息、设备、模块等,不代表先后顺序,也不限定“第一”和“第二”是不同的类型。
30.在介绍本技术实施例提供的事务处理方法之前,对该方法所涉及的事务系统进行介绍。如图1所示,该事务处理系统包括多个计算节点20以及多个存储节点30。各计算节点20用于处理各自的事务,具体可以为分布式事务。计算节点20的数量以及存储节点30的数量具体可根据实际需要来设计,本技术实施例对此不作具体限定。在本实施例中,上述计算节点20可理解为是事务协调节点,用于将事务分布到事务所涉及的相关存储节点上执行。实际应用时,多个计算节点20中可包括一个或多个支持读写的计算节点。在一写多读事务系统中,多个计算节点20中包括一个支持读写的计算节点,其他均为仅支持读的计算节点;在多写事务系统中,多个计算节点20可均为支持读写的计算节点;或者,多个计算节点20中包括多个支持读写的计算节点以及至少一个仅支持读的计算节点。
31.在一实例中,所述事务系统,包括多个计算节点;所述多个计算节点中包括第一计算节点;
32.其中,所述第一计算节点,用于:
33.启动第一事务后,从数据库中获取第一数据对象的最近一次修改所涉及的第二事务的事务标识;所述第一数据对象为所述第一事务所要访问的对象;
34.根据所述事务标识,从处理所述第二事务的第二计算节点的内存中获取目标事务状态信息;所述事务系统包括所述第二计算节点;所述第二计算节点的内存中存储有所述第二计算节点所处理的事务的事务状态信息;
35.基于所述目标事务状态信息,确定所述第二事务对所述第一数据对象的修改结果对所述第一事务是否可见。
36.在另一实例中,如图1所示,上述事务系统还可包括授时服务节点。授时服务节点具体可以为服务器集群,这样可提高授时服务节点的授时服务的可靠性。
37.上述事务系统中各节点内部的数据处理流程以及各节点之间的信息交互过程将在下述各实施例中详细介绍。
38.图2示出了本技术一实施例提供的事务处理方法的流程示意图。所述方法适用于事务系统中的第一计算节点,也即该方法的执行主体为事务系统中的第一计算节点。如图2,该方法包括:
39.201、启动第一事务后,从数据库中获取第一数据对象的最近一次修改所涉及的第二事务的事务标识。
40.其中,所述第一数据对象为所述第一事务所要访问的对象;
41.202、根据所述事务标识,从处理所述第二事务的第二计算节点的内存中获取目标事务状态信息。
42.其中,所述事务系统包括所述第二计算节点;所述第二计算节点的内存中存储有所述第二计算节点所处理的事务的事务状态信息。
43.203、基于所述目标事务状态信息,确定所述第二事务对所述第一数据对象的修改结果对所述第一事务是否可见。
44.上述201中,第一计算节点启动第一事务后,可确定出第一事务所要访问的第一数
据对象;然后,从数据库中获取第一数据对象的最近一次修改所涉及的第二事务的事务标识。该数据库具体可以为分布式数据库,分布式数据库分布在多个存储节点上(如图1所示)。第二事务的事务标识由处理所述第二事务的第二计算节点生成。
45.上述202中,所述第二计算节点的内存中存储有所述第二计算节点所处理的事务的事务状态信息。第一计算节点根据所述事务标识,可从处理所述第二计算节点的内存中获取目标事务状态信息。
46.其中,所述目标事务状态信息在所述第一计算节点来获取之前就已存储在第二计算节点的内存中。
47.上述203中,基于所述目标事务状态信息,确定所述第二事务对所述第一数据对象的修改结果对所述第一事务是否可见。通过可见性判断,可确保多个节点之间的数据一致性和事务隔离性。
48.本技术实施例提供的技术方案中,计算节点将其本地处理的事务的事务状态存储在本地内存;一个计算节点可直接从另一个计算节点的内存中获取所需的事务状态信息。与现有技术中需要对数据库所在磁盘上的回滚日志进行回查得到事务状态信息的方案相比,可避免磁盘操作,不仅可降低事务状态信息的获取开销,还可降低事务时延,从而有效提高事务系统的性能。
49.在一种可实现的方案中,所述第二计算节点的内存中预先分配有用于存储事务状态信息的第一内存区间;所述第一内存区间中存储有所述第二计算节点上全部活跃事务的事务状态信息。这样,可确保其他节点能够在第二计算节点上获取到第二计算节点上的任何一个活跃事务的事务状态信息。活跃事务指的是开启之后但未提交的事务。
50.在一实例中,上述202中“根据所述事务标识,从处理所述第二事务的第二计算节点的内存中获取目标事务状态信息”,具体为:根据所述事务标识,通过远程直接数据存取rdma读操作,从处理所述第二事务的第二计算节点的内存中读取目标事务状态信息。
51.其中,rdma读操作是单边操作,不需要cpu参与,减少了cpu的等待时间。因此,通过rdma读操作可快速获取到非本机事务状态信息,提高单机判断跨机事务的效率,从而提高整个事务系统的性能。需要说明的是,实现rdma读操作的前提条件是第二计算节点所处理的事务的事务状态信息预先存储在内存中,这样,第一计算节点才可通过rdma读操作来读取预先存储在第二计算节点内存中的目标事务状态信息。
52.实际应用时,所述第一计算节点和所述第二计算节点上分别设置有rdma网卡;所述第二计算节点将所述第一内存区间的内存地址可预注册到其上设置的rdma网卡上。通过预注册,可降低事务状态获取的时延。
53.可选的,上述202中“根据所述事务标识,从处理所述第二事务的第二计算节点的内存中读取目标事务状态信息”,具体可采用如下步骤实现:
54.2021、根据所述事务标识中的节点标识,确定出处理所述第二事务的第二计算节点。
55.2022、根据所述事务标识中的内存块标识,从所述第二计算节点的内存中读取所述内存块标识所标识的内存块中的目标数据。
56.其中,所述目标数据包括所述目标事务状态信息。
57.上述2021中,所述事务标识中包含有处理所述第二事务的第二计算节点的节点标
识。这样,根据事务标识中的节点标识,即可确定出处理所述第二事务的第二计算节点。节点标识具体可以为节点id号。
58.上述2022中,所述事务标识中包含有第二计算节点的内存中用于存储第二事务的事务状态信息的内存块的内存块标识。根据所述事务标识中的内存块标识,从所述第二计算节点的内存中读取所述内存块标识所标识的内存块中的目标数据。具体地,可根据所述事务标识中的内存块标识,通过远程直接数据存取rdma读操作,从所述第二计算节点的内存中读取所述内存块标识所标识的内存块中的目标数据。
59.其中,内存块标识具体可以为上述内存块的内存地址。
60.此外,上述方法,还可包括:
61.204、根据所述事务标识中的写覆盖次数以及所述目标数据中的写覆盖次数,确定所述目标事务状态信息是否为所述第二事务的事务状态信息。
62.205、所述目标事务状态信息为所述第二事务的事务状态信息时,触发所述基于所述目标事务状态信息,确定所述第二事务对所述第一数据对象的修改结果对所述第一事务是否可见的步骤。
63.上述204中,实际应用时,内存块中存储的某一事务的事务状态信息变为提交完成状态后,就可能会被新事务的事务状态所覆盖。内存块每覆盖一次,内存块中记录的写覆盖次数就会相应被更新。因此,需要根据所述事务标识中的写覆盖次数以及所述目标数据中的写覆盖次数,确定所述目标事务状态信息是否为所述第二事务的事务状态信息。
64.具体地,所述事务标识中的写覆盖次数与所述目标数据中的写覆盖次数一致时,确定所述目标事务状态信息为所述第二事务的事务状态信息。所述事务标识中的写覆盖次数与所述目标数据中的写覆盖次数不一致,确定所述目标事务状态信息不为所述第二事务的事务状态信息。通常,两者不一致时,必然是目标数据中的写覆盖次数大于事务标识中的写覆盖次数。
65.上述205中,所述目标事务状态信息为所述第二事务的事务状态信息时,触发所述基于所述目标事务状态信息,确定所述第二事务对所述第一数据对象的修改结果对所述第一事务是否可见的步骤。
66.实际应用时,上述方法,还可包括:
67.206、所述目标事务状态信息不为所述第二事务的事务状态信息时,确定所述第二事务对所述第一数据对象的修改结果对所述第一事务可见。
68.由于内存块中存储的某一事务的事务状态信息变为提交完成状态后,就可能会被新事务的事务状态所覆盖。那么,目标事务状态信息不为所述第二事务的事务状态信息,说明第二事务的事务状态被覆盖了,可认为第二事务早已提交完成。那么,所述第二事务对所述第一数据对象的修改结果对所述第一事务可见。
69.在一实例中,上述203中“基于所述目标事务状态信息,确定所述第二事务对所述第一数据对象的修改结果对所述第一事务是否可见”,具体可采用如下步骤来实现:
70.2031、判断所述目标事务状态信息中是否包含有事务提交时间戳cts(commit timestamp)。
71.2032、所述目标事务状态信息中包含有事务提交时间戳时,基于所述事务提交时间戳以及所述第一事务对应的读视图的创建时间戳,确定所述第二事务对所述第一数据对
象的修改结果对所述第一事务是否可见。
72.上述2031中,在事务提交完成后,节点可将事务提交时间戳写入到为该事务分配的用于存储该事务的事务状态信息的内存块中。
73.目标事务状态信息中包含有事务提交时间戳时,说明第二事务已提交;目标事务状态信息中不包含有事务提交时间戳,说明第二事务未提交。
74.上述2032中,所述目标事务状态信息中包含有事务提交时间戳时,基于所述事务提交时间戳以及所述第一事务对应的读视图的创建时间戳,确定所述第二事务对所述第一数据对象的修改结果对所述第一事务是否可见。
75.具体地,上述2032中“基于所述事务提交时间戳以及所述第一事务对应的读视图的创建时间戳,确定所述第二事务对所述第一数据对象的修改结果对所述第一事务是否可见”,具体可采用如下步骤来实现:
76.s11、所述事务提交时间戳早于所述创建时间戳,确定所述第二事务对所述第一数据对象的修改结果对所述第一事务可见。
77.s12、所述事务提交时间戳晚于所述创建时间戳,确定所述第二事务对所述第一数据对象的修改结果对所述第一事务不可见。
78.上述s11中,所述事务提交时间戳早于所述创建时间戳,说明第二事务是在第一事务访问第一数据对象之前就已提交,故第二事务对第一数据对象的修改结果对第一事务可见。
79.上述s12中,事务提交时间戳晚于创建时间戳,说明第二事务是在第一事务访问第一数据对象之后才提交,故第二事务对第一数据对象的修改结果对第一事务不可见。
80.进一步的,上述203中“基于所述目标事务状态信息,确定所述第二事务对所述第一数据对象的修改结果对所述第一事务是否可见”,具体还可包括如下步骤:
81.s13、所述目标事务状态信息中不包含有事务提交时间戳时,确定所述第二事务对所述第一数据对象的修改结果对所述第一事务不可见。
82.上述s13中,所述目标事务状态信息中不包含有事务提交时间戳,说明第二事务还未提交,那么,所述第二事务对所述第一数据对象的修改结果对所述第一事务不可见。
83.在一种可实现的方案中,如图1所示,所述事务系统还包括授时服务节点10;所述方法,还包括:
84.207、创建所述第一事务对应的读视图时,从所述授时服务节点获取所述读视图对应的创建时间戳。
85.其中,所述第二事务的事务提交时间戳是所述第二计算节点在执行所述第二事务的提交操作时从所述授时服务节点获取到的。
86.上述207中,创建所述第一事务对应的读视图时,也即第一计算节点在执行第一事务的select语句时,从所述授时服务节点获取所述读视图对应的创建时间戳。每个节点访问授时服务节点,获取全局时间戳,可保证整个一写多读或多写事务系统的事务顺序,是提供全局的一致性视图的保证。
87.为了减少延时,提高效率,上述207中“创建所述第一事务对应的读视图时,从所述授时服务节点获取所述读视图对应的创建时间戳”,具体可包括:
88.2071、创建所述第一事务对应的读视图时,基于rdma读再增加原子操作,获取所述
授时服务节点的内存中存储的全局最大时间戳,以作为所述读视图对应的创建时间戳。
89.第一计算节点通过rdma读再增加原子操作(fetch and add,fad)从授时服务节点的内存中存储的全局最大时间戳。rdma读在增加原子操作是在读取之后,全局最大时间戳自动增加,增加幅度可根据实际需要来设定,例如:1。
90.rdma读再增加原子操作也是单边操作,不需要cpu参与,减少了cpu的等待时间。因此,通过rdma读再增加原子操作可快速获取到时间戳,提高获取效率,降低延时,从而提高整个事务系统的性能。需要说明的是,实现rdma读再增加原子操作的前提条件也是授时服务节点上的全局最大时间戳预先存储在内存中,这样,第一计算节点才可通过rdma读再增加原子操作来读取预先存储在授时服务节点内存中的全局最大时间戳。
91.所述第二计算节点在执行所述第二事务的提交操作时,也可通过rdma读在增加原子操作从所述授时服务节点的内存中读取全局最大时间戳,以作为所述第二事务的事务提交时间戳。具体地,所述第一计算节点、第二计算节点和授时服务节点上分别设置有rdma网卡;授时服务节点可将用于存储全局最大时间戳的第二内存区间的内存地址预注册到其上设置的rdma网卡中。
92.实际应用时,节点可在事务提交阶段,可选择是否将事务的提交时间戳写入到数据库中该事务所访问的数据对象中。若写入,后续其他节点上的事务需要访问这些数据对象时,可直接根据数据对象中的提交时间戳进行可见性判断,减少了跨机获取事务状态信息所导致的事务延时。举例来说:当某一事务所修改的数据对象的数量较少时,可选择在事务提交阶段,将该事务的提交时间戳一一写入到数据库中该事务所修改的数据对象中;当某一事务所修改的数据对象的数量较多时,若将该事务的提交时间戳一一写入到数据库中该事务所修改的所有数据对象中,需要花费很多时间,导致事务延时严重,因此,可选择将该事务的提交时间戳一一写入到数据库中该事务所修改的部分数据对象中,或者一个都不写,直接完成提交操作。
93.因此,上述方法,还可包括:
94.208、启动第一事务后,确定所述第一数据对象中是否记录有事务提交时间戳。
95.209、若所述第一数据对象中记录有事务提交时间戳,则基于所述事务提交时间戳以及所述第一事务对应的读视图的创建时间戳,确定所述第二事务对所述第一数据对象的修改结果对所述第一事务是否可见。
96.其中,基于所述事务提交时间戳以及所述第一事务对应的读视图的创建时间戳,确定所述第二事务对所述第一数据对象的修改结果对所述第一事务是否可见的步骤的具体实现方式可参见上述各实施例中相应内容,在此不再赘述。
97.可选的,上述方法,还可包括:
98.210、若所述第一数据对象中未记录有事务提交时间戳,则触发所述从数据库中获取第一数据对象的最近一次修改所涉及的第二事务的事务标识的步骤。
99.需要补充的是,在上述步骤204中判断出所述目标事务状态信息不为所述第二事务的事务状态信息时,可将第一数据对象当前最早的版本(也即最早的读视图readview)的创建时间戳异步填充到数据库中第一数据对象中,以便于其他节点访问该第一数据对象时直接进行可见性判断,避免再去跨机访问。选择第一数据对象当前最早的版本创建时间戳的目的在于,确保第二事务对第一数据对象的修改结果对当前系统中所有活跃事务均可
见。除了选择填充第一数据对象当前最早的版本创建时间戳以外,还可选择填充一个特定的虚拟(dummy)值,虚拟值的大小可根据实际需要来设计,只需要确保第二事务对第一数据对象的修改结果对当前系统中所有活跃事务均可见即可。
100.实际应用时,上述方法,还可包括:
101.211、启动所述第一事务后,在所述第一计算节点上预先分配的用于存储事务状态信息的第三内存区间中寻找可用内存块。
102.所述可用内存块指的是未存储有事务状态信息或存储的事务状态信息为事务提交完成状态的内存块。
103.212、更新所述可用内存块内记录的写覆盖次数。
104.213、将所述可用内存块分配给所述第一事务,以用于存储所述第一事务的事务状态信息。
105.在给第一事务分配可用内存块时,无需严格按照顺序进行分配,这样可以用更小的空间容纳更多的活跃事务。
106.下面将结合图3对本技术实施例提供的事务处理方法进行详细介绍:
107.步骤1、第一计算节点(该计算节点可以为读写节点,即master)启动第一事务后,在第一计算节点上预先分配的用于存储事务状态信息的第三内存区间中寻找可用内存块。
108.所述可用内存块指的是未存储有事务状态信息或存储的事务状态信息为事务提交完成状态的内存块。第三内存区间用于存储cts日志,可用内存块也即cts log中的一个槽位slot。
109.步骤2、第一计算节点更新该可用内存块内记录的写覆盖次数wrap#。
110.步骤3、将该可用内存块分配给第一事务,以用于存储第一事务的事务状态信息,也即第一事务的事务提交时间戳,并根据第一计算节点的节点标识master_id、槽位标识cts_log_slot(也即上述实施例中内存块标识)以及写覆盖次数wrap#,生成第一事务的事务标识trx_id。
111.每一个槽位slot中可记录相应事务的事务提交时间戳cts以及写覆盖次数wrap#,还可记录相应事务的事务指针trx_t*。事务指针trx_t*指向事务结构体,该结构体中存储了相应事务的相关信息。
112.步骤4、第一计算节点执行所述第一事务的select语句时,通过rdma读再增加原子操作,从授时服务节点的内存中读取全局最大时间戳,以作为所述第一事务对应的读视图的创建时间戳。
113.步骤5、第一计算节点确定数据库中第一数据对象中是否记录有事务提交时间戳。
114.其中,第一数据对象是第一事务所要访问的对象。
115.若有记录,则执行步骤6;若没有记录,则执行步骤7。
116.步骤6、基于所述事务提交时间戳以及所述第一事务对应的读视图的创建时间戳,确定所述第二事务对所述第一数据对象的修改结果对所述第一事务是否可见。
117.步骤7、从数据库中获取第一数据对象的最近一次修改所涉及的第二事务的事务标识。
118.步骤8、根据所述事务标识中的节点标识,确定出处理所述第二事务的第二计算节点。
119.确定出的第二计算节点与第一计算节点为同一个节点时,则执行步骤9a;确定出的第二计算节点与第一计算节点为不同的节点时,则执行步骤9b。
120.步骤9a、根据所述事务标识中的内存块标识,从所述第二计算节点的内存中直接读取所述内存块标识所标识的内存块中的目标数据。
121.步骤9b、根据所述事务标识中的内存块标识,通过rdma读操作从所述第二计算节点的内存中读取所述内存块标识所标识的内存块中的目标数据。
122.其中,所述目标数据包括所述目标事务状态信息。
123.步骤10、根据所述事务标识中的写覆盖次数以及所述目标数据中的写覆盖次数,确定所述目标事务状态信息是否为所述第二事务的事务状态信息。
124.是,执行步骤11;否,执行步骤12。
125.步骤11、判断所述目标事务状态信息中是否包含有事务提交时间戳。
126.是,执行上述步骤6;否,执行步骤13。
127.步骤12、确定所述第二事务对所述第一数据对象的修改结果对所述第一事务可见。
128.步骤13、确定所述第二事务对所述第一数据对象的修改结果对所述第一事务不可见。
129.需要补充说明的是,任何一个事务开始修改数据库中某一数据对象时,数据库会将该事务的事务id写入到该数据对象中。任何一个事务提交后,其事务提交时间戳会被写入到分配给该事务的槽位slot中,其事务提交时间戳会按照预设策略确定是否写入该数据对象中。具体的,事务提交完成后,根据在事务中记录的数据页和记录列表(也即数据对象列表),根据预设策略确定是否在相应的数据页和记录列表中回填该事务的提交时间戳cts。
130.与现有技术相比,本技术实施例提供的技术方案,具有如下有益效果:
131.1、分布式事务系统中每个计算节点上的管理事务状态信息的cts_log存放在内存中,分配cts log slot时无需严格按照顺序进行分配,可以用更小的空间容纳更多的活跃事务,活跃事务的状态也不会交换到磁盘,这样可以保证快速判断事务状态。
132.2、通过rdma技术,每个计算节点管理事务状态信息的内存区间的内存地址在rdma中预注册,这样,即可实现通过rdma读操作(one

side remote atomic read)访问远端其它计算节点事务状态信息,有助于减少甚至避免对参与的计算节点cpu运行的干扰,缩短了事务响应时间,提高了事务处理效率。
133.3、每个计算节点使用rdma读再增加原子操作访问授时服务节点tso,高速获取全局cts,来保证整个多写事务系统的事务顺序,以提供全局的一致性视图。并且,本技术实施例提供的技术方案中实现了全局管理节点的轻量化设计,只是作为tso,所有计算节点只有在事务提交和创建读视图时会去获取cts,并且都是rdma读再增加原子操作。
134.4、在事务无冲突的情况下,也即无需跨机访问事务状态的情况下,性能劣化非常小。
135.综上所述,本技术实施例通过采用事务状态信息内存化、rdma单边操作以及事务状态信息下沉(也即将事务提交时间戳写入到数据库中相应的数据对象中)相结合的方案,来解决数据库多写架构中事务状态同步和查询的一系列问题。
136.图4示出了本技术又一实施例提供的事务处理装置的结构框图。该装置应用于事务系统中的第一计算节点上。如图5所示,该装置包括:
137.第一获取模块401,用于启动第一事务后,从数据库中获取第一数据对象的最近一次修改所涉及的第二事务的事务标识;所述第一数据对象为所述第一事务所要访问的对象;
138.第二获取模块402,用于根据所述事务标识,从处理所述第二事务的第二计算节点的内存中获取目标事务状态信息;所述事务系统包括所述第二计算节点;所述第二计算节点的内存中存储有所述第二计算节点所处理的事务的事务状态信息;
139.第一确定模块403,用于基于所述目标事务状态信息,确定所述第二事务对所述第一数据对象的修改结果对所述第一事务是否可见。
140.可选的,所述第二计算节点的内存中预先分配有用于存储事务状态信息的第一内存区间;
141.所述第一内存区间中存储有所述第二计算节点上全部活跃事务的事务状态信息。
142.可选的,第二获取模块402,具体用于:
143.根据所述事务标识,通过远程直接数据存取rdma读操作,从处理所述第二事务的第二计算节点的内存中读取目标事务状态信息。
144.可选的,所述第一计算节点和所述第二计算节点上分别设置有rdma网卡;
145.所述第二计算节点将所述第一内存区间的内存地址预注册到其上设置的rdma网卡。
146.可选的,第二获取模块402,具体用于:
147.根据所述事务标识中的节点标识,确定出处理所述第二事务的第二计算节点;
148.根据所述事务标识中的内存块标识,从所述第二计算节点的内存中读取所述内存块标识所标识的内存块中的目标数据;
149.所述目标数据包括所述目标事务状态信息。
150.可选的,上述装置,还包括:
151.第二确定模块,用于根据所述事务标识中的写覆盖次数以及所述目标数据中的写覆盖次数,确定所述目标事务状态信息是否为所述第二事务的事务状态信息;
152.第一触发模块,用于所述目标事务状态信息为所述第二事务的事务状态信息时,触发所述基于所述目标事务状态信息,确定所述第二事务对所述第一数据对象的修改结果对所述第一事务是否可见的步骤。
153.可选的,所述第一确定模块403,还用于:
154.所述目标事务状态信息不为所述第二事务的事务状态信息时,确定所述第二事务对所述第一数据对象的修改结果对所述第一事务可见。
155.可选的,所述第一确定模块403,具体用于:
156.判断所述目标事务状态信息中是否包含有事务提交时间戳;
157.所述目标事务状态信息中包含有事务提交时间戳时,基于所述事务提交时间戳以及所述第一事务对应的读视图的创建时间戳,确定所述第二事务对所述第一数据对象的修改结果对所述第一事务是否可见。
158.可选的,所述事务系统还包括授时服务节点;
159.所述装置,还包括:
160.第三获取模块,用于创建所述第一事务对应的读视图时,从所述授时服务节点获取所述读视图对应的创建时间戳;
161.所述第二事务的事务提交时间戳是所述第二计算节点在执行所述第二事务的提交操作时从所述授时服务节点获取到的。
162.可选的,上述装置,还包括:
163.第三确定模块,用于启动第一事务后,确定所述第一数据对象中是否记录有事务提交时间戳;
164.所述第一确定模块,还用于若所述第一数据对象中记录有事务提交时间戳,则基于所述事务提交时间戳以及所述第一事务对应的读视图的创建时间戳,确定所述第二事务对所述第一数据对象的修改结果对所述第一事务是否可见。
165.可选的,上述装置,还包括:
166.第二触发模块,用于若所述第一数据对象中未记录有事务提交时间戳,则触发所述从数据库中获取第一数据对象的最近一次修改所涉及的第二事务的事务标识的步骤。
167.可选的,上述装置,还包括:
168.查询模块,用于启动所述第一事务后,在所述第一计算节点上预先分配的用于存储事务状态信息的第三内存区间中寻找可用内存块;所述可用内存块指的是未存储事务状态信息或存储的事务状态信息为事务提交完成状态的内存块;
169.更新模块,用于更新所述可用内存块内记录的写覆盖次数;
170.分配模块,用于将所述可用内存块分配给所述第一事务,以用于存储所述第一事务的事务状态信息。
171.这里需要说明的是:上述实施例提供的事务处理装置可实现上述各方法实施例中描述的技术方案,上述各模块或单元具体实现的原理可参见上述各方法实施例中的相应内容,此处不再赘述。
172.图5示出了本技术一实施例提供的电子设备的结构示意图。如图5所示,所述电子设备包括存储器1101以及处理器1102。存储器1101可被配置为存储其它各种数据以支持在电子设备上的操作。这些数据的示例包括用于在电子设备上操作的任何应用程序或方法的指令。存储器1101可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(sram),电可擦除可编程只读存储器(eeprom),可擦除可编程只读存储器(eprom),可编程只读存储器(prom),只读存储器(rom),磁存储器,快闪存储器,磁盘或光盘。
173.所述存储器1101,用于存储程序;
174.所述处理器1102,与所述存储器1101耦合,用于执行所述存储器1101中存储的所述程序,以实现上述各方法实施例提供的事务处理方法。
175.进一步,如图5所示,电子设备还包括:通信组件1103、显示器1104、电源组件1105、音频组件1106等其它组件。图5中仅示意性给出部分组件,并不意味着电子设备只包括图5所示组件。
176.相应地,本技术实施例还提供一种存储有计算机程序的计算机可读存储介质,所述计算机程序被计算机执行时能够实现上述各方法实施例提供的事务处理方法的步骤或
功能。
177.以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
178.通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
179.最后应说明的是:以上实施例仅用以说明本技术的技术方案,而非对其限制;尽管参照前述实施例对本技术进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本技术各实施例技术方案的精神和范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献