信息获取方法、装置、电子设备及存储介质
文献发布时间:2023-06-19 12:22:51
技术领域
本发明涉及计算机技术领域,特别是涉及一种信息获取方法、装置、电子设备及存储介质。
背景技术
在分布式数据库中,TM(Transaction Manager,事务管理器)在事务开启和事务提交时,需要从中心授时节点中获取事务的开启时间戳和事务的提交时间戳,从而利用所获取的时间戳进行事务处理。
相关技术中,在从中心授时节点获取时间戳时,基于事务管理器和中心授时节点之间的一条链路来传输获取请求,这样使得:下一个获取请求在等待上一个获取请求的结果返回之后,才可以发送该下一个获取请求,因此针对时间戳获取而言产生了较高的排队时延。
如何兼顾提升时间戳获取效率以及保证时间戳有效性,是一个亟待解决的问题。
发明内容
本发明实施例的目的在于提供获取方法、装置、电子设备及存储介质,以兼顾提升时间戳获取效率以及保证时间戳有效性。具体技术方案如下:
第一方面,本发明实施例提供了一种信息获取方法,应用于事务管理器,所述事务管理器与中心授时节点间建立有多条链路;所述方法包括:
通过所述多条链路,向所述中心授时节点发送各个针对事务的时间戳获取请求,以使所述中心授时节点在接收到每一时间戳获取请求后,生成并反馈该时间戳获取请求的响应结果;
当接收到任一时间戳获取请求的响应结果时,从当前未分配有时间戳的事务中,查找各个目标事务;其中,任一目标事务的时间戳获取请求的生成时间,不晚于所述响应结果对应的时间戳获取请求的生成时间;
若查找到,将所述响应结果所表征的时间戳,分配给各个目标事务。
可选地,所述方法还包括:若从当前未分配有时间戳的事务中未查找到目标事务,则丢弃所述响应结果。
可选地,每一时间戳获取请求设置有标签,所述标签的设置规则为:能够通过标签大小表征时间戳获取请求的先后生成顺序的规则;
所述当接收到任一时间戳获取请求的响应结果时,从当前未分配有时间戳的事务中,查找各个目标事务,包括:
当接收到任一时间戳获取请求的响应结果时,基于当前未分配有时间戳的事务的标签,从当前未分配有时间戳的事务中,查找各个目标事务。
可选地,所述标签的设置规则为按照时间戳获取请求的生成顺序进行单调递增的规则;
所述当接收到任一时间戳获取请求的响应结果时,基于当前未分配有时间戳的事务的标签,从当前未分配有时间戳的事务中,查找各个目标事务,包括:
当接收到任一时间戳获取请求的响应结果时,从当前未分配有时间戳的事务中,查找所对应标签不大于指定标签的各个目标事务,其中,任一事务所对应的标签为该事务的时间戳获取请求的标签,所述指定标签为所述响应结果对应的时间戳获取请求的标签。
可选地,所述通过所述多条链路,向所述中心授时节点发送各个针对事务的时间戳获取请求,包括:
每当达到预定发送间隔时,生成针对指定事务的时间戳获取请求,所述指定事务为当前待分配时间戳的一个事务;
从所述多条链路中选取一条空闲链路;
通过所述空闲链路,将生成的时间戳获取请求发送至所述中心授时节点。
可选地,所述方法还包括:
每当接收到待处理的任一事务时,将该事务的事务ID缓存至时间戳等待队列;
所述每当达到预定发送间隔时,生成针对指定事务的时间戳获取请求,包括:
每当达到预定发送间隔时,从所述时间戳等待队列的未生成有时间戳获取请求的事务ID中,选取队列位置最靠前的事务ID,得到指定事务的事务ID;
生成针对具有所得到事务ID的指定事务的时间戳获取请求。
第二方面,本发明实施例提供了一种信息获取装置,应用于事务管理器,所述事务管理器与中心授时节点间建立有多条链路;所述装置包括:
发送模块,用于通过所述多条链路,向所述中心授时节点发送各个针对事务的时间戳获取请求,以使所述中心授时节点在接收到每一时间戳获取请求后,生成并反馈该时间戳获取请求的响应结果;
查找模块,用于当接收到任一时间戳获取请求的响应结果时,从当前未分配有时间戳的事务中,查找各个目标事务;其中,任一目标事务的时间戳获取请求的生成时间,不晚于所述响应结果对应的时间戳获取请求的生成时间;
分配模块,用于若查找到,将所述响应结果所表征的时间戳,分配给各个目标事务。
可选地,所述装置还包括:
丢弃模块,用于若从当前未分配有时间戳的事务中未查找到目标事务,则丢弃所述响应结果。
可选地,每一时间戳获取请求设置有标签,所述标签的设置规则为:能够通过标签大小表征时间戳获取请求的先后生成顺序的规则;
所述查找模块,用于:
当接收到任一时间戳获取请求的响应结果时,基于当前未分配有时间戳的事务的标签,从当前未分配有时间戳的事务中,查找各个目标事务。
可选地,所述标签的设置规则为按照时间戳获取请求的生成顺序进行单调递增的规则;
所述查找模块,用于:
当接收到任一时间戳获取请求的响应结果时,从当前未分配有时间戳的事务中,查找所对应标签不大于指定标签的各个目标事务,其中,任一事务所对应的标签为该事务的时间戳获取请求的标签,所述指定标签为所述响应结果对应的时间戳获取请求的标签。
可选地,所述发送模块,包括:
生成子模块,用于每当达到预定发送间隔时,生成针对指定事务的时间戳获取请求,所述指定事务为当前待分配时间戳的一个事务;
选取子模块,用于从所述多条链路中选取一条空闲链路;
发送子模块,通过所述空闲链路,将生成的时间戳获取请求发送至所述中心授时节点。
可选地,所述装置还包括:
事务ID缓存模块,用于每当接收到待处理的任一事务时,将该事务的事务ID缓存至时间戳等待队列;
所述生成子模块,包括:
事务ID选取单元,用于每当达到预定发送间隔时,从所述时间戳等待队列的未生成有时间戳获取请求的事务ID中,选取队列位置最靠前的事务ID,得到指定事务的事务ID;
时间戳获取请求生成单元,用于生成针对具有所得到事务ID的指定事务的时间戳获取请求。
第三方面,本发明实施例提供了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现上述第一方面所提供的信息获取的方法步骤。
第四方面,本发明实施例提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述第一方面所提供的信息获取的方法步骤。
本发明实施例还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述任一所述的信息获取方法。
本发明实施例有益效果:
本发明实施例提供的一种信息获取方法,应用于事务管理器,所述事务管理器与中心授时节点间建立有多条链路;通过所述多条链路,向中心授时节点发送各个针对事务的时间戳获取请求,以使中心授时节点在接收到每一时间戳获取请求后,生成并反馈该时间戳获取请求的响应结果;当接收到任一时间戳获取请求的响应结果时,从当前未分配有时间戳的事务中,查找各个目标事务;其中,任一目标事务的时间戳获取请求的生成时间,不晚于所述响应结果对应的时间戳获取请求的生成时间;若查找到,将所述响应结果所表征的时间戳,分配给各个目标事务。本方案中,通过事务管理器与中心授时节点间建立的多条链路,向中心授时节点发送各个针对事务的时间戳获取请求,相对于相关技术中采用一条链路进行请求传输而言,可以大大减少排队时延;并且,考虑到网络抖动会造成时间乱序问题,即先发出的请求反而响应结果后达到,从而导致时间戳获取效率受到影响,因此,本方案中,当接收到任一时间戳获取请求的响应结果时,将响应结果分配各个目标事务,以利用时间可向后推迟,不可回退的特点,为事务尽早分配时间戳,进一步提升时间戳获取效率并保证时间戳有效性。
可见,通过本方案可以兼顾提升时间戳获取效率以及保证时间戳有效性。
当然,实施本发明的任一产品或方法并不一定需要同时达到以上所述的所有优点。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的实施例。
图1为本发明实施例中事务管理器获取时间戳的过程的示意图;
图2为本发明实施例所提供的信息获取方法的流程图;
图3为本发明实施例所提供的事务管理器与中心授时节点交互的示意图;
图4为本发明实施例所提供的信息获取方法的另一流程图;
图5为本发明实施例所提供的事务管理器的工作原理图;
图6为本发明实施例所提供的信息获取装置的结构示意图;
图7为本发明实施例的电子设备的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员基于本申请所获得的所有其他实施例,都属于本发明保护的范围。
为了解决现有技术问题,本发明实施例提供了一种信息获取方法、装置及管理器。
下面首先对本发明实施例所提供的一种信息获取方法进行介绍。
本发明实施例所提供的一种信息获取方法,应用于分布式存储系统中的事务管理器TM(Transaction Manager,事务管理器),该分布式存储系统还包括:用于为事务管理器分配时间戳的中心授时节点和用于存储数据资源的多个存储节点。其中,事务管理器可以部署于事务管理器中;另外,中心授时节点可以为TSO(Time Stamp Oracle 时钟服务)节点,也可以为GTS(global time server)节点,并且,中心授时节点可以是单个节点,也可以是节点集群,本发明实施例对此不做限定。
可以理解的是,在分布式数据库中,一件事务开启后,事务端,例如APP(application,应用程序),通过事务管理器对存储节点进行读、写的操作,在此过程中事务管理器需要从中心授时节点中获取针对事务的时间戳,其中,针对写事务而言,从中心授时节点中获取开启时间戳和事务的提交时间戳,即事务开启阶段的时间戳和事务提交阶段的时间戳。例如,针对分布式数据库中的两个存储节点的写事务而言,如图1所示:事务端向事务管理器TM请求开启事务,事务管理器允许,之后事务端通过SQL语句,通知事务管理器对该事务涉及到的两个存储节点做出相应的写操作。在对两个存储节点操作之前,事务管理器需要向TSO节点请求该写事务的开启TS(timestamp 时间戳),即Get start timestamp。图1中xa start;sql用于表征写事务进入开启阶段,xa prepare用于表征写事务进入执行阶段。在写事务操作执行完成后,事务管理器还需要再次向TSO节点请求该写事务的提交时间戳TS。图1中write meta commit和xa commit’xid’用于表征在获取提交时间戳后,该写事务在两个存储节点进入提交阶段。
本发明实施例所涉及的时间戳获取请求可以是针对提交阶段的请求,也可以是开启阶段的请求,任一阶段的时间戳获取请求均可作为本发明实施例所涉及到的时间戳获取请求。
其中,本发明实施例所提供的一种信息获取方法,应用于事务管理器,所述事务管理器与中心授时节点间建立有多条链路;所述方法包括:
通过所述多条链路,向所述中心授时节点发送各个针对事务的时间戳获取请求,以使所述中心授时节点在接收到每一时间戳获取请求后,生成并反馈该时间戳获取请求的响应结果;
当接收到任一时间戳获取请求的响应结果时,从当前未分配有时间戳的事务中,查找各个目标事务;其中,任一目标事务的时间戳获取请求的生成时间,不晚于所述响应结果对应的时间戳获取请求的生成时间;
若查找到,将所述响应结果所表征的时间戳,分配给各个目标事务。
本方案中,通过事务管理器与中心授时节点间建立的多条链路,向中心授时节点发送各个针对事务的时间戳获取请求,相对于相关技术中采用一条链路进行请求传输而言,可以大大减少排队时延;并且,考虑到网络抖动会造成时间乱序问题,即先发出的请求反而响应结果后达到,从而导致时间戳获取效率受到影响,因此,本方案中,当接收到任一时间戳获取请求的响应结果时,将响应结果分配各个目标事务,以利用时间可向后推迟,不可回退的特点,为事务尽早分配时间戳,进一步提升时间戳获取效率并保证时间戳有效性。可见,通过本方案可以兼顾提升时间戳获取效率以及保证时间戳有效性。
下面结合附图对本发明实施例所提供的一种信息获取方法进行介绍。
如图2所示,本发明实施例所提供的一种信息获取方法,应用于事务管理器,所述事务管理器与中心授时节点间建立有多条链路,可以包括如下步骤:
S201,通过所述多条链路,向所述中心授时节点发送各个针对事务的时间戳获取请求,以使所述中心授时节点在接收到每一时间戳获取请求后,生成并反馈该时间戳获取请求的响应结果;
其中,所述链路为可以TCP(Transmission Control Protocol 传输控制协议)链路,当然并不局限于此;并且,该多条链路的具体数量,可以根据实际情况设定,本发明实施例对此不做限定。如图3所示,事务管理器管理存储节点1-N,事务管理器与中心授时节点之间建立有多条链路,在每一次向中心授时节点发送时间戳获取请求时,事务管理器可以选取多条TCP链路中的一条链路向中心授时节点发送各个针对事务的时间戳获取请求,中心授时节点在接收到任一时间戳获取请求后,生成该时间戳获取请求的响应结果,并通过同一条链路向事务管理器反馈该响应结果。
本领域人员可以理解的是,网络交互成本一般由发送时延和排队时延构成,发送时延取决于物理距离长度和光传播速度。相关技术中,事务管理器和中心授时节点之间建立有一条链路,针对该条正在使用中的链路,必须等待该条链路返回了时间戳获取请求的响应结果后,才可以再次通过该条链路向中心授时节点发送时间戳获取请求,这样使得事务管理器每一次获取时间戳的时间一般在2ms左右,例如:CS(客户端-服务器)模型场景中采用一条链路的方式进行请求传输。本发明实施例在节点部署架构不变的情况下,对于网络交互成本中的排队时延进行优化,具体而言:在事务管理器与中心授时节点间建立多条链路,通过多条链路来发送各个时间戳获取请求,这样,在实际应用过程中,事务管理器获取每一条时间戳的平均时间只需要0.4ms左右,相比只用一条链路的信息获取方法,显然可以极大地提高获取时间戳的效率,减少排队时延。
S202,当接收到任一时间戳获取请求的响应结果时,从当前未分配有时间戳的事务中,查找各个目标事务;其中,任一目标事务的时间戳获取请求的生成时间,不晚于所述响应结果对应的时间戳获取请求的生成时间;
S203,若查找到,将所述响应结果所表征的时间戳,分配给各个目标事务。
由于事务管理器通过多条链路向中心授时节点发送各个针对事务的时间戳获取请求,当网络发生拥塞时,就会导致通过各条链路获取响应结果的延迟时间各不相同,这种各条链路数据传输的延迟不同的情况被称作“网络抖动”。示例性地,例如,按照时间戳的生成顺序,选取了链路1在00:01时刻发送了目标事务1的时间戳获取请求1,选取链路2在00:02时刻发送了目标事务1的时间戳获取请求2,选取链路3在00:03时刻发送了目标事务1的时间戳获取请求3;由于网络抖动的存在,通过链路1接收到的响应结果的时间为00:06时刻,通过链路2接收到的响应结果的时间为00:05时刻,通过链路3接收到的响应结果的时间为00:04时刻,在这个示例中,最先通过链路1发送时间戳获取请求,但是经过较长时间才接收到响应结果,而通过链路3最后发送时间戳获取请求,却最先接收到响应结果。
可见,由于网络抖动的存在,会导致各条链路接收到响应结果的时间变得混乱,即先发出的请求反而响应结果经历了较长的延迟后才达到,从而导致时间戳获取效率受到影响。
本领域技术人员可以理解的是,分布式存储系统中,先后产生的、未完成的各个事务之间没有严格的逻辑关系,也就是,谁先获得时间戳,谁后获得时间戳,对于数据读写的影响可以忽略。因此,为了解决网络抖动对于时间戳的影响,本方案中,利用时间不可回退(前滚),可以向后推迟的特点,当接收到任一时间戳获取请求的响应结果时,在这些未分配有时间戳的事务中,查找至少一个目标事务,若查找到,将该响应结果所表征的时间戳,分配给各个目标事务,使得事务能够尽早被分配到时间戳。仍以上述示例进行说明:通过链路3最后发送时间戳获取请求,最先接收到响应结果,此时通过链路1和链路2发送的时间戳获取请求尚未接收到响应结果,且通过链路1和链路2发送的时间戳获取请求的时间不晚于链路3,此时通过链路3接收到响应结果所表征的时间戳不仅仅可以分配给目标事务3,还可以分配给目标事务1和目标事务2。可以理解地,若在00:04时刻通过链路4发送了目标事务4的时间戳获取请求,由于目标事务4时间戳获取请求的生成时间晚于目标事务3,那么为了避免时间回退,不可以将通过链路3接收到响应结果所表征的时间戳分配给目标事务4。通过该种方式,可以屏蔽网络抖动对获取时间戳的影响,即保证在先的事务获取时间戳的时间不会晚于在后的事务,提升了时间戳获取效率。
另外,需要强调的是,从当前未分配有时间戳的事务中,可以查找所有目标事务,也可以查找部分数量的目标事务,这都是合理的。
本方案中,通过事务管理器与中心授时节点间建立的多条链路,向中心授时节点发送各个针对事务的时间戳获取请求,相对于相关技术中采用一条链路进行请求传输而言,可以大大减少排队时延;并且,当接收到任一时间戳获取请求的响应结果时,查找时间戳获取请求的生成时间,不晚于该响应结果对应的时间戳获取请求的生成时间的至少一个目标事务,若查找到,将该响应结果所表征的时间戳,分配给各个目标事务,可以屏蔽网络抖动对获取时间戳的影响,即保证在先的事务获取时间戳的时间不会晚于在后的事务。可见,通过本方案可以兼顾提升时间戳获取效率以及保证时间戳有效性。
可选地,在本发明的另一实施例中,本发明所提供的一种信息获取方法,还可以包括如下步骤:
若从当前未分配有时间戳的事务中未查找到目标事务,则丢弃所述响应结果。若未查找到至少一个目标事务,则说明该响应结果对应的目标事务以及在该目标事务之前生成时间戳获取请求的各个目标事务,都已经获取了时间戳。仍以上述示例进行说明:已经将通过链路3接收到的响应结果所表征的时间戳分配给了目标事务1、目标事务2和目标事务3,当在00:05时刻通过链路2接收到的响应结果时,已经查找不到时间戳获取请求的生成时间,不晚于该响应结果对应的时间戳获取请求的生成时间的至少一个目标事务,那么可以将通过链路2接收的响应结果丢弃。
可选地,在本发明的另一实施例中,每一时间戳获取请求设置有标签,所述标签的设置规则为:能够通过标签大小表征时间戳获取请求的先后生成顺序的规则;
相应的,如图4所示的,上述的步骤S202可以包括如下步骤S2021:
S2021,当接收到任一时间戳获取请求的响应结果时,基于当前未分配有时间戳的事务的标签,从当前未分配有时间戳的事务中,查找各个目标事务;其中,任一目标事务的时间戳获取请求的生成时间,不晚于所述响应结果对应的时间戳获取请求的生成时间。
按照时间戳获取请求的先后生成顺序为每一时间戳获取请求设置标签,这样,可以通过比较各个时间戳获取请求标签的大小来判断各个时间戳获取请求的先后生成顺序。当接收到任一时间戳获取请求的响应结果时,得到针对当前未分配有时间戳的事务的时间戳获取请求的标签,通过比较这些标签的大小,就可以从当前未分配有时间戳的事务中,查找出至少一个目标事务。
示例性的,标签的具体形态可以为数值形态,当然并不局限于此。并且,在保证能够通过标签大小表征时间戳获取请求的先后生成顺序的前提下,本发明实施例对于标签的设置规则并不限定,例如:该设置规则可以为按照时间戳获取请求的生成顺序进行单调递增的规则,当然,也可以为按照时间戳获取请求的生成顺序进行单调递减的规则。为了方案清楚,下文结合另一实施例,对于按照时间戳获取请求的生成顺序进行单调递增的规则,进行详细介绍。
本实施例中,通过设置标签的方式,可以将比较生成时间转换为比较标签大小,使得比较方式更加简便快捷。
可选地,在本发明的另一实施例中,所述标签的设置规则为按照时间戳获取请求的生成顺序进行单调递增的规则;
所述当接收到任一时间戳获取请求的响应结果时,基于当前未分配有时间戳的事务的标签,从当前未分配有时间戳的事务中,查找各个目标事务,包括:
当接收到任一时间戳获取请求的响应结果时,从当前未分配有时间戳的事务中,查找所对应标签不大于指定标签的至少一个目标事务,其中,任一事务所对应的标签为该事务的时间戳获取请求的标签,所述指定标签为所述响应结果对应的时间戳获取请求的标签。
本实施例中,按照时间戳获取请求的生成顺序进行单调递增的规则,为时间戳获取请求设置标签,例如,可以将第一个生成的时间戳获取请求设置标签为1,之后针对每生成一个时间戳获取请求,其标签就加1,第N个时间戳获取请求则为N;或者,将第一个生成的时间戳获取请求设置标签为10,将之后生成的时间戳获取请求的标签设置为12、14、16…,以此类推,都是可以的。这样,当接收到任一时间戳获取请求的响应结果时,从当前未分配有时间戳的事务中,找到时间戳获取请求的标签不大于该响应结果对应的标签的事务,就可以查找到当前未分配有时间戳的事务中各个目标事务。例如:针对先后发送的时间戳获取请求1、2和3,分别设置有标签12、14和16,那么,若接收到的时间戳获取请求2的响应结果,由于时间戳获取请求1的标签为12,小于时间戳获取请求2的标签,因此,可以将响应结果表征的时间戳分配给时间戳获取请求1和2对应的事务,不能分配给时间戳获取请求3对应的事务。
本实施例中,通过设置标签的方式来区分时间戳获取请求的先后生成顺序,且设置规则为按照时间戳获取请求的生成顺序进行单调递增的规则,可以将比较生成时间转换为比较标签大小,使得比较方式更加简便快捷。
可选地,在本发明的另一实施例中,所述通过所述多条链路,向所述中心授时节点发送各个针对事务的时间戳获取请求,分为A1-A3三个步骤:
A1,每当达到预定发送间隔时,生成针对指定事务的时间戳获取请求,所述指定事务为当前待分配时间戳的一个事务;
考虑到事务管理器和中心授时节点之间的多条链路是有限的,每当有事务存在时便立即占用空闲链路而导致的如下问题:各个事务的时间戳获取过程不够平稳,即在存在空闲链路时通过极短时间为事务分配到时间戳,但是在所有链路均被占用时,通过较长时间为事务分配时间戳。因此,为了进一步提升各个事务的时间戳获取过程的平稳性,本实施例中,在事务需要获取时间戳时,并没有立刻生成一个针对指定事务的时间戳获取请求,而是每隔一个预定的发送间隔,生成一个针对指定事务的时间戳获取请求,即为新的事务开启时间戳获取过程,从而保证每当生成时间戳获取请求后,均存在可用的空闲链路。
其中,该预定发送间隔是可以人为设定,示例性的,默认时间为0.5ms、0.4ms、0.3ms等。
A2,从所述多条链路中选取一条空闲链路;
空闲链路指当前时刻没有被用来进行事务管理器与中心授时节点信息交互的链路,由于针对某一条正在使用中的链路,必须等待该条链路返回了时间戳获取请求的响应结果后,才可以再次通过该条链路向中心授时节点发送时间戳获取请求,因此在发送时间戳获取请求时,需要选取一条空闲链路。
当间隔时间达到预定发送间隔时,就从多条链路中选取一条空闲链路。需要说明的是,在应用过程中,可能会出现间隔时间达到了预定发送间隔,但此时所有链路都被占用的情况,此时,应当等待直至某一条链路的信息交互完毕,成为空闲链路,再选取该条空闲链路。
A3,通过所述空闲链路,将生成的时间戳获取请求发送至所述中心授时节点。
每隔一个预定发送间隔,生成一个针对指定事务的时间戳获取请求,再从多条链路中选取一条空闲链路,通过该条空闲链路,将生成的时间戳获取请求发送至所述中心授时节点。虽然在事务需要获取时间戳时,就立刻生成一个针对指定事务的时间戳获取请求,在整体上可以一定程度上提高所有事务获取时间戳的速度,但是按照预定的发送间隔来生成针对指定事务的时间戳获取请求,可以让该信息获取更加有序且平稳,也更好确定针对事务的时间戳获取请求的生成时间的先后顺序。
可见,本实施例中,不但可以兼顾提升时间戳获取效率以及保证时间戳有效性,同时能够保证时间戳获取的平稳性。
可选地,在本发明的另一实施例中,本发明实施例所提供的一种信息获取方法还包括:
每当接收到待处理的任一事务时,将该事务的事务ID缓存至时间戳等待队列;
所述每当达到预定发送间隔时,生成针对指定事务的时间戳获取请求,包括步骤B1-B2:
B1,每当达到预定发送间隔时,从所述时间戳等待队列的未生成有时间戳获取请求的事务ID中,选取队列位置最靠前的事务ID,得到指定事务的事务ID;
B2,生成针对具有所得到事务ID的指定事务的时间戳获取请求。
示例性的,本实施例的一种实现原理如图5所示,事务管理器包含工作线程和时间戳交互线程。事务端通过发送SQL语句的方式,触发事务管理器执行事务时,即下发事务端请求时,处理该SQL语句所对应事务的工作线程将事务的事务ID推入时间戳等待队列;时间戳交互线程按照等待队列先到先得的原则,每当达到预定发送间隔时,从所述时间戳等待队列未生成时间戳获取请求的事务ID中,选取队列位置最靠前的事务ID,得到指定事务的事务ID,进而,记录所得到的事务ID,生成针对具有所得到事务ID的指定事务的时间戳获取请求,为时间戳获取请求设置标签,再从多条链路中选取一条空闲链路,通过该条空闲链路,将该时间戳获取请求发送至所述中心授时节点;当时间戳交互线程接收到任一时间戳获取请求的响应结果时,将所接收到的响应结果所表征的时间戳分配给各个目标事务,即分配给处理各个目标事务的工作线程,从而工作线程基于获取到时间戳进行事务处理。其中,各个目标事务对应的标签不大于该响应结果对应的时间戳获取请求的标签。
可以理解的是,时间戳等待队列中任一事务ID,可以在为其生成时间戳获取请求后删除,也可以在未其分配时间戳后删除,这都是合理的。
本实施例中,每当接收到待处理的任一事务时,将该事务的事务ID缓存至时间戳等待队列;每当达到预定发送间隔时,从所述时间戳等待队列中,选取队列位置最靠前的事务ID,得到指定事务的事务ID;生成针对具有所得到事务ID的指定事务的时间戳获取请求;当接收到任一时间戳获取请求的响应结果时,从当前未分配有时间戳的事务中,查找各个目标事务;其中,任一目标事务的时间戳获取请求的生成时间,不晚于所述响应结果对应的时间戳获取请求的生成时间;若查找到,将所述响应结果所表征的时间戳,分配给各个目标事务。
可见,实施例中,通过事务管理器与中心授时节点间建立的多条链路,向中心授时节点发送各个针对事务的时间戳获取请求,相对于相关技术中采用一条链路进行请求传输而言,可以大大减少排队时延;并且,考虑到网络抖动会造成时间乱序问题,即先发出的请求反而响应结果后达到,从而导致时间戳获取效率受到影响,因此,本方案中,当接收到任一时间戳获取请求的响应结果时,将响应结果分配各个目标事务,以利用时间可向后推迟,不可回退的特点,为事务尽早分配时间戳,进一步提升时间戳获取效率并保证时间戳有效性。
另一方面,如图6所示,本发明实施例提供了一种信息获取装置,应用于事务管理器,所述事务管理器与中心授时节点间建立有多条链路;所述装置包括:
发送模块610,用于通过所述多条链路,向所述中心授时节点发送各个针对事务的时间戳获取请求,以使所述中心授时节点在接收到每一时间戳获取请求后,生成并反馈该时间戳获取请求的响应结果;
查找模块620,用于当接收到任一时间戳获取请求的响应结果时,从当前未分配有时间戳的事务中,查找各个目标事务;其中,任一目标事务的时间戳获取请求的生成时间,不晚于所述响应结果对应的时间戳获取请求的生成时间;
分配模块630,用于若查找到,将所述响应结果所表征的时间戳,分配给各个目标事务。
可选地,所述装置还包括:
丢弃模块,用于若从当前未分配有时间戳的事务中未查找到目标事务,则丢弃所述响应结果。可选地,每一时间戳获取请求设置有标签,所述标签的设置规则为:能够通过标签大小表征时间戳获取请求的先后生成顺序的规则;
所述查找模块,用于:
当接收到任一时间戳获取请求的响应结果时,基于当前未分配有时间戳的事务的标签,从当前未分配有时间戳的事务中,查找各个目标事务。
可选地,所述标签的设置规则为按照时间戳获取请求的生成顺序进行单调递增的规则;
所述查找模块,用于:
当接收到任一时间戳获取请求的响应结果时,从当前未分配有时间戳的事务中,查找所对应标签不大于指定标签的各个目标事务,其中,任一事务所对应的标签为该事务的时间戳获取请求的标签,所述指定标签为所述响应结果对应的时间戳获取请求的标签。
可选地,所述发送模块,包括:
生成子模块,用于每当达到预定发送间隔时,生成针对指定事务的时间戳获取请求,所述指定事务为当前待分配时间戳的一个事务;
选取子模块,用于从所述多条链路中选取一条空闲链路;
发送子模块,通过所述空闲链路,将生成的时间戳获取请求发送至所述中心授时节点。
可选地,所述装置还包括:
事务ID缓存模块,用于每当接收到待处理的任一事务时,将该事务的事务ID缓存至时间戳等待队列;
所述时间戳获取请求生成子模块,包括:
事务ID选取单元,用于每当达到预定发送间隔时,从所述时间戳等待队列的未生成有时间戳获取请求的事务ID中,选取队列位置最靠前的事务ID,得到指定事务的事务ID;
时间戳获取请求生成单元,用于生成针对具有所得到事务ID的指定事务的时间戳获取请求。
本发明实施例还提供了一种电子设备,如图7所示,包括处理器701、通信接口702、存储器703和通信总线704,其中,处理器701,通信接口702,存储器703通过通信总线704完成相互间的通信,
存储器703,用于存放计算机程序;
处理器701,用于执行存储器703上所存放的程序时,实现本发明任一信息获取方法的步骤。
上述电子设备提到的通信总线可以是外设部件互连标准(Peripheral ComponentInterconnect,PCI)总线或扩展工业标准结构(Extended Industry StandardArchitecture,EISA)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
通信接口用于上述电子设备与其他设备之间的通信。
存储器可以包括随机存取存储器(Random Access Memory,RAM),也可以包括非易失性存储器(Non-Volatile Memory,NVM),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(Digital SignalProcessor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
在本发明提供的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述任一信息获取方法的步骤。
在本发明提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中任一信息获取方法。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk (SSD))等。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。
以上所述仅为本发明的较佳实施例,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
- 深度信息获取方法和装置、电子设备和存储介质
- 抓取点信息获取方法、装置、电子设备和存储介质