处理事务日志的方法及装置制造方法及图纸

技术编号:37143160 阅读:14 留言:0更新日期:2023-04-06 21:52
本说明书实施例提供了一种处理事务日志的方法及装置。该方法包括:针对分布式数据库执行一个事务,其中,该事务中包括第一操作及第二操作;确定第一序号,以及第二序号;其中,第一序号及第二序号之间的先后顺序与第一操作及第二操作之间的执行先后顺序相同;生成第一操作对应的第一日志以及第二操作对应的第二日志;在第一日志中携带第一序号,在第二日志中携带第二序号;将第一日志及第二日志分别写入该分布式数据库中的两个日志流中。通过本申请能够根据日志流中的日志得到事务中的各个操作之间的先后顺序,从而能够正确地得到事务的事务数据。务的事务数据。务的事务数据。

【技术实现步骤摘要】
处理事务日志的方法及装置


[0001]本说明书一个或多个实施例涉及计算机
,尤其涉及一种处理事务日志的方法及装置。

技术介绍

[0002]数据库会将每个插入、更改、删除等操作记录到日志里。为了保证数据库系统中数据操作的原子性和持久性,会持久化一个事务的日志到日志流中。后续,通过解析日志可以获取到数据库完整的数据变更历史,从而实现数据同步。对于传统的单机数据库,例如Oracle、MySQL等,全局只有一个日志流,因此通过顺序获取和解析日志流即可还原出事务的提交历史记录。
[0003]目前出现了采用多日志流的分布式数据库比如OceanBase等。在采用多日志流的分布式数据库中,一个事务对应的所有日志会被写入分布式数据库中的多个日志流中,不同日志流可能会分布于多个机器节点。
[0004]在很多场景下,一个事务中的各个操作之间是有先后顺序的,因此,在得到该事务的事务数据时需要考虑此种先后顺序,才能正确地进行数据同步。但是目前并没有相关的有效解决方案。因此,如何根据日志流中的日志得到事务中的各个操作之间的先后顺序,进而基于此种顺序来正确地得到事务的事务数据,是一个亟待解决的问题。

技术实现思路

[0005]本说明书一个或多个实施例提供了一种处理事务日志的方法及装置,能够根据日志流中的日志得到事务中的各个操作之间的先后顺序,从而能够正确地得到事务的事务数据。
[0006]根据第一方面,提出了一种处理事务日志的方法,其中,事务为:访问和/或操作数据的数据库操作序列;该方法应用于采用多日志流的分布式数据库;
[0007]所述方法包括:
[0008]针对分布式数据库执行一个事务;其中,该事务中包括第一操作及第二操作;
[0009]确定第一序号,以及确定第二序号;其中,第一序号及第二序号之间的先后顺序与第一操作及第二操作之间的执行先后顺序相同;
[0010]生成第一操作对应的第一日志以及第二操作对应的第二日志;
[0011]在第一日志中携带第一序号,在第二日志中携带第二序号;
[0012]将第一日志及第二日志分别写入该分布式数据库中的两个日志流中。
[0013]其中,触发生成所述事务的结构化查询语言(SQL)包括第一SQL以及第二SQL;每一条SQL对应事务中的至少一个操作;
[0014]所述第一操作是第一SQL对应的任意一个操作,所述第二操作是第二SQL对应的任意一个操作;第一操作及第二操作之间的执行先后顺序等于第一SQL以及第二SQL之间的执行先后顺序;
[0015]所述确定第一序号以及第二序号,包括:
[0016]生成在所述事务内唯一的、第一SQL对应的第一语句序号,生成在所述事务内唯一的、第二SQL对应的第二语句序号;其中,第一语句序号与第二语句序号之间的先后顺序与第一SQL以及第二SQL之间的执行先后顺序相同;以及
[0017]将第一语句序号作为所述第一序号,将第二语句序号作为所述第二序号。
[0018]其中,触发生成所述事务的结构化查询语言(SQL)中包括对应于更改(update)操作的第三SQL;
[0019]所述分布式数据库中的一个数据表包括第一分区表以及第二分区表;
[0020]在执行所述事务时,进一步包括:将第三SQL对应的更改操作变更为所述第一操作及所述第二操作,以便将第一分区表中的数据移动到第二分区表中;其中,所述第一操作为变更出的删除(delete)操作,所述第二操作为变更出的插入(insert)操作;
[0021]所述确定第一序号以及第二序号,包括:
[0022]设置所述第一序号在先,且所述第二序号在后。
[0023]在执行所述事务时,进一步包括:先调度执行第一操作,再调度执行第二操作;
[0024]所述设置所述第一序号在先且所述第二序号在后,包括:根据执行第一操作的时间设置所述第一序号,并且,根据执行所述第二操作的时间设置所述第二序号。
[0025]其中,所述第一分区表及第二分区表位于同一个机器节点中;
[0026]所述根据执行第一操作的时间设置所述第一序号,包括:将所述第一序号设置为该机器节点在执行第一操作时的本地时间;
[0027]所述根据执行所述第二操作的时间设置所述第二序号,包括:将所述第二序号设置为该机器节点在执行所述第二操作时的本地时间。
[0028]其中,所述第一分区表及第二分区表分别位于不同的第一机器节点及第二机器节点中;
[0029]所述根据执行第一操作的时间设置所述第一序号,包括:将所述第一序号设置为第一机器节点在执行第一操作时的本地时间;
[0030]该方法进一步包括:将第一机器节点在执行第一操作时的本地时间发送给第二机器节点;
[0031]所述根据执行所述第二操作的时间设置所述第二序号,包括:
[0032]在第二机器节点接收到的该第一机器节点中的本地时间的基础上,推高第二机器节点中的逻辑时间;以及
[0033]将所述第二序号设置为在第二机器节点执行所述第二操作时的推高后的逻辑时间。
[0034]其中,触发生成各个事务的各个SQL中包括多个所述第三SQL,根据每一个第三SQL变更出的所述第一操作及所述第二操作用于将一个分区表中的数据移动到另一个分区表中;
[0035]所述先调度执行第一操作再调度执行第二操作,包括:调度第一机器节点执行完本节点中所有第三SQL变更出的所有第一操作;然后再调度第二机器节点执行本节点中所有第三SQL变更出的所有第二操作;
[0036]相应地,所述将第一机器节点执行第一操作时的本地时间发送给第二机器节点,
包括:
[0037]得到第一机器节点执行变更出的所有第一操作时的所有本地时间;
[0038]从该所有本地时间中选取最大的本地时间;
[0039]将选取出的最大的本地时间发送给第二机器节点。
[0040]根据第二方面,提出了一种处理事务日志的方法,其中,事务为:访问和/或操作数据的数据库操作序列;该方法应用于采用多日志流的分布式数据库;
[0041]所述方法包括:
[0042]从所述分布式数据库中获取至少两个日志流;
[0043]从任意两个日志流中得到第一日志以及第二日志;其中,第一日志中携带有第一序号,第二日志中携带有第二序号;
[0044]根据第一日志中携带的第一序号以及第二日志中携带的第二序号,得到第一日志对应的第一操作与第二日志对应的第二操作之间的执行先后顺序;其中,第一序号以及第二序号之间的先后顺序与第一操作以及第二操作之间的执行先后顺序相同;
[0045]根据第一操作以及第二操作之间的执行先后顺序,得到第一操作及第二操作所属事务对应的事务数据。
[0046]所述序号包括:SQL的语句序号;相应地,所述第一操作与第二操作对应不同的SQL;
[0047]和/或,
[0048]所述序号包括:时间值;相应本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种处理事务日志的方法,其特征在于,其中,事务为:访问和/或操作数据的数据库操作序列;该方法应用于采用多日志流的分布式数据库;所述方法包括:针对所述分布式数据库执行一个事务;其中,该事务中包括第一操作及第二操作;确定第一序号,以及确定第二序号;其中,第一序号及第二序号之间的先后顺序与第一操作及第二操作之间的执行先后顺序相同;生成第一操作对应的第一日志以及第二操作对应的第二日志;在第一日志中携带第一序号,在第二日志中携带第二序号;将第一日志及第二日志分别写入该分布式数据库中的两个日志流中。2.根据权利要求1所述的方法,其中,触发生成所述事务的结构化查询语言SQL包括第一SQL以及第二SQL;每一条SQL对应事务中的至少一个操作;所述第一操作是第一SQL对应的任意一个操作,所述第二操作是第二SQL对应的任意一个操作;第一操作及第二操作之间的执行先后顺序等于第一SQL以及第二SQL之间的执行先后顺序;所述确定第一序号以及第二序号,包括:生成在所述事务内唯一的、第一SQL对应的第一语句序号,生成在所述事务内唯一的、第二SQL对应的第二语句序号;其中,第一语句序号与第二语句序号之间的先后顺序与第一SQL以及第二SQL之间的执行先后顺序相同;以及将第一语句序号作为所述第一序号,将第二语句序号作为所述第二序号。3.根据权利要求1所述的方法,其中,触发生成所述事务的SQL中包括对应于更改操作的第三SQL;所述分布式数据库中的一个数据表包括第一分区表以及第二分区表;在执行所述事务时,进一步包括:将第三SQL对应的更改操作变更为所述第一操作及所述第二操作,以便将第一分区表中的数据移动到第二分区表中;其中,所述第一操作为变更出的删除操作,所述第二操作为变更出的插入操作;所述确定第一序号以及第二序号,包括:设置所述第一序号在先,且所述第二序号在后。4.根据权利要求3所述的方法,其中,在执行所述事务时,进一步包括:先调度执行第一操作,再调度执行第二操作;所述设置所述第一序号在先且所述第二序号在后,包括:根据执行第一操作的时间设置所述第一序号,并且,根据执行所述第二操作的时间设置所述第二序号。5.根据权利要求4所述的方法,其中,所述第一分区表及第二分区表位于同一个机器节点中;所述根据执行第一操作的时间设置所述第一序号,包括:将该机器节点在执行第一操作时的本地时间作为所述第一序号;所述根据执行所述第二操作的时间设置所述第二序号,包括:将该机器节点在执行所述第二操作时的本地时间作为所述第二序号。6.根据权利要求4所述的方法,其中,所述第一分区表及第二分区表分别位于不同的第一机器节点及第二机器节点中;
所述根据执行第一操作的时间设置所述第一序号,包括:将第一机器节点在执行第一操作时的本地时间作为所述第一序号;该方法进一步包括:将第一机器节点在执行第一操作时的本地时间发送给第二机器节点;所述根据执行所述第二操作的时间设置所述第二序号,包括:在第二机器节点接收到的该第一机器节点中的本地时间的基础上,推高第二机器节点中的逻辑时间;以及将第二机器节点在执行所述第二操作时的推高后的逻辑时间作为所述第二序号。7.根据权利要求6所述的方法,其中,触发生成各个事务的各个SQL中包括多个所述第三SQL,根据每一个第三SQL变更出的...

【专利技术属性】
技术研发人员:田伟刘浩韩富晟
申请(专利权)人:北京奥星贝斯科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1