CN110502317A - 一种事务管理的方法和装置 - Google Patents

一种事务管理的方法和装置 Download PDF

Info

Publication number
CN110502317A
CN110502317A CN201810468996.7A CN201810468996A CN110502317A CN 110502317 A CN110502317 A CN 110502317A CN 201810468996 A CN201810468996 A CN 201810468996A CN 110502317 A CN110502317 A CN 110502317A
Authority
CN
China
Prior art keywords
rollback
operational order
instruction
transaction
queue
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
Application number
CN201810468996.7A
Other languages
English (en)
Other versions
CN110502317B (zh
Inventor
汤亚文
赖耀宇
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Jingdong Century Trading Co Ltd
Beijing Jingdong Shangke Information Technology Co Ltd
Original Assignee
Beijing Jingdong Century Trading Co Ltd
Beijing Jingdong Shangke Information Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Jingdong Century Trading Co Ltd, Beijing Jingdong Shangke Information Technology Co Ltd filed Critical Beijing Jingdong Century Trading Co Ltd
Priority to CN201810468996.7A priority Critical patent/CN110502317B/zh
Publication of CN110502317A publication Critical patent/CN110502317A/zh
Application granted granted Critical
Publication of CN110502317B publication Critical patent/CN110502317B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/466Transaction processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/54Indexing scheme relating to G06F9/54
    • G06F2209/548Queue

Abstract

本发明公开了一种事务管理的方法和装置,涉及计算机技术领域。该方法的一具体实施方式包括:获取业务代码;根据所述业务代码建立包含操作指令的事务队列,和包含回滚指令的回滚队列;执行所述事务队列中的各操作指令;在所述操作指令发生错误时,执行所述回滚队列中的回滚指令。该实施方式能够管理面向多数据源的事务,保证多数据源间数据的一致性。

Description

一种事务管理的方法和装置
技术领域
本发明涉及计算机技术领域,尤其涉及一种事务管理的方法和装置。
背景技术
随着互联网的发展,为了给用户提供更好的服务,系统要求提供更快访问更高保障。很多系统使用几种不同种类的数据源共同存储一份数据。尤其是Redis等成熟的非关系型数据库,将数据按照索引规则存入内存中,拥有快速大量查询能力,弥补了传统关系型数据库的短板。关系型数据库与非关系型数据库配合使用,将数据离散化为key-value形式(2)存入新型NoSQL中用于查询,同时存储一份数据到关系型数据库中,落地到磁盘,作为永久保留以及作为按照关系进行查询的依据。这样的方式已经成为互联网行业面向用户服务的通用办法。
在实现本发明过程中,发明人发现现有技术中至少存在如下问题:在处理面向多数据源的事务时,无法保证数据的一致性;一旦某数据源中的操作发横问题,对于已经操作过的其他数据源无法进行内容的回滚,导致数据不一致。
发明内容
有鉴于此,本发明实施例提供一种事务管理的方法和装置,能够管理面向多数据源的事务,保证多数据源间数据的一致性。
为实现上述目的,根据本发明实施例的一个方面,提供了一种事务管理的方法,包括:
获取业务代码;
根据所述业务代码建立包含操作指令的事务队列,和包含回滚指令的回滚队列;
执行所述事务队列中的各操作指令;在所述操作指令发生错误时,执行所述回滚队列中的回滚指令。
可选的,在根据所述业务代码建立包含操作指令的事务队列,和包含回滚指令的回滚队列的步骤前,还包括:
保存各操作指令和回滚指令的对应关系;
根据所述业务代码建立包含操作指令的事务队列,和包含回滚指令的回滚队列的步骤包括:
根据所述业务代码获取操作指令,根据所述对应关系获取与所述操作指令对应的回滚指令;
将所述操作指令加入事务队列,将所述回滚指令加入回滚队列。
可选的,所述业务代码包括数据源标识和抽象指令;保存各数据源对应的操作指令以及该操作指令对应的回滚指令的对应关系的步骤包括:
保存抽象指令与各数据源对应的操作指令以及该操作指令对应的回滚指令的对应关系;
根据所述业务代码获取操作指令的步骤包括:
从所述业务代码获取数据源标识和抽象指令;
根据所述对应关系和所述数据源标识获取与所述抽象指令相对应的操作指令。
可选的,将所述操作指令加入事务队列,将所述回滚指令加入回滚队列的步骤前,还包括:
生成与所述业务代码唯一对应的事务标识;
从所述业务代码获取数据源标识和抽象指令;
将所述操作指令加入事务队列,将所述回滚指令加入回滚队列的步骤包括:
在事务队列中添加包含所述事务标识、所述数据源标识和所述操作指令的项目;在回滚队列中添加包含所述事务标识、所述数据源标识和所述回滚指令的项目;
重复上述过程直至遍历所述业务代码中的抽象指令。
可选的,所述项目还包括执行游标;包含操作指令的项目中的执行游标,与包含该操作指令对应的回滚指令的项目中的执行游标相同;在所述操作指令发生错误时,执行所述回滚队列中的回滚指令的步骤包括:
获取发生错误的操作指令所属项目的执行游标和事务标识;
在所述回滚队列中查询包含所述执行游标和所述事务标识的项目;
从包含所述执行游标和所述事务标识的项目开始,逆向依次执行所述回滚队列中包含所述事务标识的各项目中的回滚指令。
可选的,将所述操作指令加入事务队列,将所述回滚指令加入回滚队列的步骤之前,还包括:
若确定所述操作指令和所述回滚指令的参数中包含未完成指令的结果,则使用占位符替换所述未完成指令的结果。
为实现上述目的,根据本发明实施例的另一个方面,提供了一种事务管理的装置,包括:
获取模块,用于获取业务代码;
管理模块,用于根据所述业务代码建立包含操作指令的事务队列,和包含回滚指令的回滚队列;
执行模块,用于执行所述事务队列中的各操作指令;在所述操作指令发生错误时,执行所述回滚队列中的回滚指令。
可选的,所述管理模块还用于:
保存各操作指令和回滚指令的对应关系;
根据所述业务代码获取操作指令,根据所述对应关系获取与所述操作指令对应的回滚指令;
将所述操作指令加入事务队列,将所述回滚指令加入回滚队列。
可选的,所述业务代码包括数据源标识和抽象指令;所述管理模块还用于:
保存抽象指令与各数据源对应的操作指令以及该操作指令对应的回滚指令的对应关系;
从所述业务代码获取数据源标识和抽象指令;
根据所述对应关系和所述数据源标识获取与所述抽象指令相对应的操作指令。
可选的,所述管理模块还用于:
生成与所述业务代码唯一对应的事务标识;
从所述业务代码获取数据源标识和抽象指令;
在事务队列中添加包含所述事务标识、所述数据源标识和所述操作指令的项目;在回滚队列中添加包含所述事务标识、所述数据源标识和所述回滚指令的项目;
重复上述过程直至遍历所述业务代码中的抽象指令。
可选的,所述项目还包括执行游标;包含操作指令的项目中的执行游标,与包含该操作指令对应的回滚指令的项目中的执行游标相同;所述执行模块还用于:
获取发生错误的操作指令所属项目的执行游标和事务标识;
在所述回滚队列中查询包含所述执行游标和所述事务标识的项目;
从包含所述执行游标和所述事务标识的项目开始,逆向依次执行所述回滚队列中包含所述事务标识的各项目中的回滚指令。
可选的,所述管理模块还用于:
若确定所述操作指令和所述回滚指令的参数中包含未完成指令的结果,则使用占位符替换所述未完成指令的结果。
为实现上述目的,根据本发明实施例的再一个方面,提供了一种事务管理的电子设备,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器至少实现:
获取业务代码;
根据所述业务代码建立包含操作指令的事务队列,和包含回滚指令的回滚队列;
执行所述事务队列中的各操作指令;在所述操作指令发生错误时,执行所述回滚队列中的回滚指令。
为实现上述目的,根据本发明实施例的又一个方面,提供一种计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时至少实现:
获取业务代码;
根据所述业务代码建立包含操作指令的事务队列,和包含回滚指令的回滚队列;
执行所述事务队列中的各操作指令;在所述操作指令发生错误时,执行所述回滚队列中的回滚指令。
上述发明中的一个实施例具有如下优点或有益效果:建立事务队列和回滚队列对事务中的指令进行管理,在执行事务队列的过程中若发生错误,则可以通过执行回滚队列中的回滚指令对事务进行回滚,从而保证的多数据源之间的数据一致性。此外,由于事务中的操作指令在队列提交后统一执行,从而缩短了执行间隔,进一步避免了因数据不一致而导致的脏读等问题。
上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。
附图说明
附图用于更好地理解本发明,不构成对本发明的不当限定。其中:
图1是根据本发明实施例的事务管理的方法的主要步骤的示意图;
图2是根据本发明实施例的事务管理的方法中新增数据时的处理流程示意图;
图3是根据本发明实施例的事务管理的方法中删除数据时的处理流程示意图;
图4是根据本发明实施例的事务管理的方法中更新数据时的处理流程示意图;
图5是根据本发明实施例的事务管理的方法中执行指令时的流程示意图;
图6是根据本发明实施例的事务管理的装置的主要模块的示意图;
图7是本发明实施例可以应用于其中的示例性系统架构图;
图8是适于用来实现本发明实施例的终端设备或服务器的计算机系统的结构示意图。
具体实施方式
以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
在计算机与互联网领域,“事务”指一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。现有的“事务”通常指单一数据源中对应于某一业务片段的一系列指令;本发明实施例中对“事务”的概念进行扩展,即将对应于某一业务片段的、面向多个数据源的指令所构成的序列定义为“事务”。
图1是根据本发明实施例的事务管理的方法的主要步骤的示意图。
如图1所示,根据本发明实施例提供的一种事务管理的方法,包括:
S100,获取业务代码。
S101,根据所述业务代码建立包含操作指令的事务队列,和包含回滚指令的回滚队列。需说明的是,若确定所述操作指令和所述回滚指令的参数中包含未完成指令的结果,则使用占位符替换所述未完成指令的结果。
S102,执行所述事务队列中的各操作指令;在所述操作指令发生错误时,执行所述回滚队列中的回滚指令。需说明的是,在执行操作指令时,通常可以按照操作指令在事务队列中的排列顺序依次执行;若在特殊情况下需要以其他顺序执行事务队列中的操作指令,可以保存其执行顺序,以便于在发生错误时按照相反的执行顺序来执行回滚队列中相应的回滚指令。
在一可选的实施例中,所述业务代码包含用户输入的操作指令和回滚指令;执行步骤S101时,从业务代码中获取到操作指令和回滚指令后,分别加入至事务队列和回滚队列中。
在另一可选的实施例中,在执行步骤S101之前,预先保存各操作指令和回滚指令的对应关系。业务代码中包含用户输入的操作指令,在执行步骤S101时,根据所述业务代码获取操作指令,根据所述对应关系获取与所述操作指令对应的回滚指令;将所述操作指令加入事务队列,将所述回滚指令加入回滚队列。根据本实施例的方案,用户只需要输入操作指令,本方法即可根据获取到的操作指令获取对应的回滚指令,从而节省用户输入的代码量,简化操作。
在又一可选的实施例中,在执行步骤S101之前,预先保存抽象指令、操作指令和回滚指令的对应关系。业务代码中包括用户输入的抽象指令,以及数据源标识。在执行步骤S101时,根据业务代码获取抽象指令和数据源标识,根据上述对应关系查找与该抽象指令在该数据源标识所指示的数据源中对应的操作指令,以及与该操作指令对应的回滚指令。根据本实施例的方案,在处理包含多数据源的事务时,只需使用统一语法的抽象指令编写业务代码,本方法即可根据抽象指令查找对应数据源中的具体操作指令与回滚指令,从而优化用户的输入内容,简化操作。
在一些可选的实施例中,在S101,将所述操作指令加入事务队列,将所述回滚指令加入回滚队列的步骤前,还包括:
生成与所述业务代码唯一对应的事务标识;从所述业务代码获取数据源标识和抽象指令;
步骤S101具体包括:
在事务队列中添加包含所述事务标识、所述数据源标识和所述操作指令的项目;在回滚队列中添加包含所述事务标识、所述数据源标识和所述回滚指令的项目;重复上述过程直至遍历所述业务代码中的抽象指令。
本实施例中,在事务队列以及回滚队列的项目中进一步加入了与业务代码唯一对应的事务标识,从而可以在两队列中标记出与业务代码相对应的指令。
在一些可选的实施例中,所述项目还包括执行游标;包含操作指令的项目中的执行游标,与包含该操作指令对应的回滚指令的项目中的执行游标相同;步骤S102具体包括:
获取发生错误的操作指令所属项目的执行游标和事务标识;
在所述回滚队列中查询包含所述执行游标和所述事务标识的项目;
从包含所述执行游标和所述事务标识的项目开始,逆向依次执行所述回滚队列中包含所述事务标识的各项目中的回滚指令。
本实施例进一步说明了实现回滚操作的方式。相互对应的操作指令和回滚指令按照相同的顺序分别排列在事务队列和回滚队列中,当事务队列中的某一操作指令发生错误时,获取该操作指令对应的执行游标和事务标识,然后在回滚队列中查询包含相同执行游标和事务标识的项目,从而该项目开始逆向执行回滚队列中各项目包含的回滚指令,从而实现回滚。
基于本实施例的方法构建事务管理装置,可以对包含多数据源指令的事务进行管理,实现回滚功能,从而保证数据一致性。
装置中生成抽象指令、抽象指令对应各数据源操作指令、操作指令对应的回滚指令的集合。其中,抽象指令是本申请提出的,并非对应于某一特定数据源,而是一种通用的、便于用户理解和掌握的指令类型。例如,存在两种数据源,A数据源为MySQL,B数据源为Redis,生成的抽象指令、操作指令和回滚指令集合如表1所示:
表1指令对应关系示意表
需说明的是,表1中的抽象指令、操作指令和回滚指令均为示意,仅用来表示其对应关系,实际的事务管理中,抽象指令还可以包含具体的参数,对于不同类型的数据源,抽象指令也可以具备不同的格式。例如,对于Redis中表示插入的指令set,其操作指令的基本语法为“SET KEY_NAME VALUE”,其中KEY_NAME表示键名,VALUE表示希望插入的值;则此时的抽象指令可以为例如“Redis:新增数据KEY_NAME VALUE”,事务管理系统在读取到该抽象指令后,会根据预设的对应关系查询到Redis中对应于“新增数据”的操作指令,并将抽象指令中KEY_NAME、VALUE的取值带入至该操作指令中,从而得到Redis可执行的实际操作指令。由此,用户不需要针对各数据源分别编写操作指令,只需输入通用的抽象指令即可对不同的数据源进行操作;例如,对于同样使用键值关系保存数据的数据源,也可以采用与上述Redis相同的抽象指令插入数据,只需要将抽象指令中的“Redis”更换为对应的数据源标识即可。
本装置存储有指令间的对应关系,因此在接收到用户输入的由抽象指令组成的业务代码后,可以通过解析业务代码,将抽象指令转化为实际的操作指令并执行,从而执行对应于多个不同数据源的操作指令。由于使用了抽象指令,用户不需要针对各数据源分别编写指令代码,从而提高了系统的易用性。
图2是根据本发明实施例的事务管理的方法中新增数据时的处理流程示意图。
如图2所示,在读取用户输入的事务代码的过程中,若某一条抽象指令为新增数据时,事务管理装置主要执行如下步骤:
S200,获取数据源标识和抽象指令。本步骤的抽象指令表示对数据源标识所对应数据源中新增数据的操作;抽象指令中还包含有待新增的数据。
S201,根据对应关系获取对应于具体数据源的操作指令。本步骤的操作指令是在上述数据源标识所对应数据源中新增数据所采用的实际指令。
S202,判断是否成功获取到操作指令。若是,执行步骤S203,否则结束流程。
S203,根据对应关系获取对应于操作指令的回滚指令。本步骤的回滚指令与操作指令相反,为上述数据源标识所对应数据源中删除数据所采用的实际指令。
S204,判断操作指令是否依赖于在前指令的结果,若是,则执行步骤S205,否则执行步骤S206。在新增数据时,需要生成对应于该数据的唯一标识。对于一些数据库而言,该唯一标识是由数据库自动生成的,而非由用户指定的,此时新增数据的操作指令依赖于数据库自动执行的生成唯一标识的操作指令。
S205,使用占位符作为唯一标识插入操作指令与数据中,并将拼装后的操作指令插入事务队列。占位符是区别于数据库所通常使用的位移标识的、可识别的符号。在将操作指令插入到事务队列时,可同时插入事务标识、数据源标识和执行游标,参考相关实施例中的说明,此处不再赘述。应当理解,在各操作指令或回滚指令、特别是用于新增数据或更新数据的操作指令或回滚指令中,处包含基本的指令(例如前面实施例中出现过的insert、set等),还应当包含待插入或待更新的数据等参数,此时需要根据抽象指令中包含的数据填充这些参数,从而拼装得到完整的操作指令或回滚指令,而具体如何进行拼装取决于各数据源中指令的语法,只需要根据语法需求预先保存抽象指令与操作指令或回滚指令的映射关系即可,不再进行展开说明。
S206,拼装完整的操作指令与数据,并插入事务队列。
S207,判断回滚指令是否依赖于在前指令的结果,若是,则执行步骤S208,否则执行步骤S209。对应于新增数据指令的回滚指令为删除数据指令,删除数据指令依赖于待删除数据的唯一标识,因此通常此时的回滚指令依赖于在前的新增数据的操作指令或者生成唯一标识的操作指令的执行结果。
S208,使用占位符作为唯一标识插入回顾指令与数据,并将拼装后的回滚指令插入回滚队列。
S209,拼装完整的回滚指令与数据,并插入回滚队列。
图3是根据本发明实施例的事务管理的方法中删除数据时的处理流程示意图。
如图3所示,在读取用户输入的事务代码的过程中,若某一条抽象指令为删除数据时,事务管理装置主要执行如下步骤:
S300,获取数据源标识和抽象指令。本步骤的抽象指令表示对数据源标识所对应数据源中数据进行删除的操作;由于待删除的数据可能依赖于在前指令,因此抽象指令中可能不包含用于指定待删除数据的唯一标识,在后续步骤中加以判断。
S301,根据对应关系获取对应于具体数据源的操作指令。本步骤的操作指令是在上述数据源标识所对应数据源中删除数据所采用的实际指令。
S302,判断是否成功获取到操作指令。若是,执行步骤S303,否则结束流程。
S303,根据对应关系获取对应于操作指令的回滚指令。本步骤的回滚指令与操作指令相反,为上述数据源标识所对应数据源中新增数据所采用的实际指令。
S304,调用查询功能查询需要删除的数据。因为待删除的数据已经存在,因此回滚指令中需要新增的数据可以通过调用查询指令进行获取。
S305,根据查询结果拼装完整的回滚指令与数据,并插入回滚队列。
S306,判断操作指令入参中原始数据是否为空。若是,则执行步骤S307,否则指令步骤S308。前面提到,由于删除指令中的待删除数据可能依赖于在前指令的处理结果,因此在操作指令所对应的抽象指令中可能并不包含实际需要删除的数据的唯一标识,此时需要使用占位符替换该唯一标识。
S307,使用占位符作为唯一标识插入操作指令与数据,并插入事务队列。
S308,拼装完整的操作指令与数据,并插入事务队列。
图4是根据本发明实施例的事务管理的方法中更新数据时的处理流程示意图。
如图4所示,在读取用户输入的事务代码的过程中,若某一条抽象指令为更新数据时,事务管理装置主要执行如下步骤:
S400,获取数据源标识和抽象指令。本步骤的抽象指令表示对数据源标识所对应数据源中已有数据进行更新的操作;抽象指令中还包含有待更新的数据。
S401,根据对应关系获取对应于具体数据源的操作指令。本步骤的操作指令是在上述数据源标识所对应数据源中更新数据所采用的实际指令。
S402,判断是否成功获取到操作指令。若是,执行步骤S403,否则结束流程。
S403,根据对应关系获取对应于操作指令的回滚指令。本步骤的回滚指令与操作指令相同,均为表示更新的指令,其区别在于,操作指令是使用新数据替换原始数据,而回滚指令是使用原始数据替换新数据。
S404,判断回滚指令入参中的原始数据是否为空,若是,则执行步骤S405,否则执行步骤S406。在用户输入抽象指令时,有可能并没有同时输入原始数据,此时需要进行判断,从而确定是否需要额外获取原始数据。
S405,调用查询功能查询原始数据。
S406,拼装完整回滚指令与数据,并插入回滚队列。
S407,判断操作指令是否依赖于当前指令的结果,若是,则执行步骤S408,否则执行步骤S409。
S408,使用占位符拼装操作指令与数据,并插入事务队列。
S409,拼装完整的操作指令与数据,并插入事务队列。
图5是根据本发明实施例的事务管理的方法中执行指令时的流程示意图。
为了对多数据源的操作指令进行管理,本实施例中引入了事务队列;同时,为了便于在事务队列中的操作指令发生错误时进行回滚,本实施例还引入了与事务队列对应的回滚队列。如图5所示,在事务提交后,基于事务队列和回滚队列执行相关指令的步骤主要包括:
S500,根据事务标识查询事务队列中的开始项目。
S501,从开始项目起,依次执行事务队列中的各项目。在执行事务队列中项目内操作指令的过程中,还可以根据操作指令的结果对之前使用占位符进行占位的数据进行回写。
S502,根据执行结果回写回滚队列的对应项目中的回滚指令。
S503,判断事务队列中的项目是否全部执行成功,若是,则结束流程,否则执行步骤S504。
S504,执行回滚队列。需说明的是,本步骤中执行回滚队列的具体方式,是在回滚队列中查找与发生错误的操作指令所属的项目相对应的项目,并从该项目开始反向执行回滚队列各项目中的回滚指令。具体的查找方式见后续实施例。
S505,判断回滚队列是否执行成功,若是,则结束流程,否则执行步骤S506。
S506,判断重试次数是否大于预设的次数阈值,若是,则结束流程,否则执行步骤S504。
步骤S500-S506通过队列实现了对不同数据源之间事务的统一管理,并可以在事务中的指令发生错误时进行回滚,保证的不同数据源之间数据的一致性。
下面通过一个例子对业务队列和回滚队列进行说明:
表2事务管理示意表
如表2所示,左侧示出的业务片段中,有四条抽象指令需要加入队列进行处理。在接收到业务片段后,首先生成唯一对应于该业务片段的事务标识(本实施例中业务片段对应的事务标识为txid1);然后,对于每一条抽象指令,根据指令对应关系集合查询与其对应的操作指令和回滚指令;之后,将事务标识、数据源标识、操作指令(回滚指令)作为一条项目插入事务队列(回滚队列)中。为了便于实现回滚,在事务队列与回滚队列的各项目中还包括执行游标,且事务队列与回滚队列中相互对应的项目的执行游标相同(此处相互对应表示,此两个项目中的操作指令与回滚指令向对应)。通过这种方式,当事务队列中的操作指令发生错误时,可以根据操作指令所在项目中的执行游标,在回滚队列中查询到对应的项目,并从该项目开始逆向依次执行回滚队列中对应于该事务的各项指令,从而实现回滚。
本实施例中,以事务标识作为不同业务片段所对应事务的区分,并根据事务标识的变化确定事务的开始项目的结束项目。以表2中的事务txid1为例,当前一事务txid0执行结束后,检测到下一顺序执行的项目中事务标识变更为txid1,则确定下一项目为txid1的开始项目;当执行事务标识为txid1、执行游标为4的项目时,检测到下一顺序执行的项目中事务标识变更为txid2,则确定当前执行的项目为txid1的结束项目。除此之外,在其他可选的实施例中,还可以通过设置特殊的事务标识或者指令对一件事务的开始和结束进行标识,例如对于表2中的txid1事务,可以将执行游标1对应的项目中的事务标识设置为txid1_start,将执行游标4对应的项目中的事务标识设置为txid1_end,从而实现对事务开始和结束的标识;或者,也可以在执行游标1对应的项目前添加用于标识开始的项目,将其操作指令设置为“start”,在执行游标4对应的项目后添加用于标识结束的项目,将其操作指令设置为“end”(对于回滚队列可同理进行设置),从而实现对事务开始和结束的标识;或者,也可以对于每一事务建立单独的事务队列表与相应回滚队列表,以表中的第一项为开始项目,最后一项为结束项目。
本实施例中,执行游标是从1开始,依次递增的自然数序列,这样设置可以便于人员的阅读和辨识。实际上,执行游标的根本作用是标记相互对应的操作指令和回滚指令,由于项目的执行顺序可以依赖队列进行限制,因此执行游标并非一定要按照递增的方式进行设置,也并非一定需要设置为自然数,只要保证在同一事务在事务队列(或回滚队列)中,不同的操作指令对应的执行游标彼此不同,且相互对应的操作指令和回滚指令对应的执行游标彼此相同即可。
图6是根据本发明实施例的事务管理的装置的主要模块的示意图。
如图6所示,本发明实施例提供的事务管理的装置600,包括:
获取模块601,用于获取业务代码;
管理模块602,用于根据所述业务代码建立包含操作指令的事务队列,和包含回滚指令的回滚队列;
执行模块603,执行所述事务队列中的各操作指令;在所述操作指令发生错误时,执行所述回滚队列中的回滚指令。
在一些可选的实施例中,所述管理模块602还用于:
保存各操作指令和回滚指令的对应关系;
根据所述业务代码获取操作指令,根据所述对应关系获取与所述操作指令对应的回滚指令;
将所述操作指令加入事务队列,将所述回滚指令加入回滚队列。
在一些可选的实施例中,所述业务代码包括数据源标识和抽象指令;所述管理模块602还用于:
保存抽象指令与各数据源对应的操作指令以及该操作指令对应的回滚指令的对应关系;
从所述业务代码获取数据源标识和抽象指令;
根据所述对应关系和所述数据源标识获取与所述抽象指令相对应的操作指令。
在一些可选的实施例中,所述管理模块602还用于:
生成与所述业务代码唯一对应的事务标识;
从所述业务代码获取数据源标识和抽象指令;
在事务队列中添加包含所述事务标识、所述数据源标识和所述操作指令的项目;在回滚队列中添加包含所述事务标识、所述数据源标识和所述回滚指令的项目;
重复上述过程直至遍历所述业务代码中的抽象指令。
在一些可选的实施例中,所述项目还包括执行游标;包含操作指令的项目中的执行游标,与包含该操作指令对应的回滚指令的项目中的执行游标相同;所述执行模块603还用于:
获取发生错误的操作指令所属项目的执行游标和事务标识;
在所述回滚队列中查询包含所述执行游标和所述事务标识的项目;
从包含所述执行游标和所述事务标识的项目开始,逆向依次执行所述回滚队列中包含所述事务标识的各项目中的回滚指令。
在一些可选的实施例中,所述管理模块602还用于:
若确定所述操作指令和所述回滚指令的参数中包含未完成指令的结果,则使用占位符替换所述未完成指令的结果。
图7示出了可以应用本发明实施例的事务管理的方法或事务管理的装置的示例性系统架构700。
如图7所示,系统架构700可以包括终端设备701、702、703,网络704和服务器705。网络704用以在终端设备701、702、703和服务器705之间提供通信链路的介质。网络704可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
用户可以使用终端设备701、702、703通过网络704与服务器705交互,以接收或发送消息等。终端设备701、702、703上可以安装有用于接收用户输入的代码、程序段等消息的客户端应用。
终端设备701、702、703可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
服务器705可以是提供各种服务的服务器,例如对用户利用终端设备701、702、703输入的业务代码进行处理,并转化为事务队列进行管理的服务器。
需要说明的是,本发明实施例所提供的事务管理的方法一般由服务器705执行,相应地,事务管理的装置一般设置于服务器705中。
应该理解,图7中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
根据本发明的实施例,本发明还提供了一种电子设备和一种可读存储介质。
图8是适于用来实现本发明实施例的终端设备或服务器的计算机系统的结构示意图。
下面参考图8,其示出了适于用来实现本发明实施例的终端设备的计算机系统800的结构示意图。图8示出的终端设备仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图8所示,计算机系统800包括中央处理单元(CPU)801,其可以根据存储在只读存储器(ROM)802中的程序或者从存储部分808加载到随机访问存储器(RAM)803中的程序而执行各种适当的动作和处理。在RAM 803中,还存储有系统800操作所需的各种程序和数据。CPU 801、ROM 802以及RAM 803通过总线804彼此相连。输入/输出(I/O)接口805也连接至总线804。
以下部件连接至I/O接口805:包括键盘、鼠标等的输入部分806;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分807;包括硬盘等的存储部分808;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分809。通信部分809经由诸如因特网的网络执行通信处理。驱动器810也根据需要连接至I/O接口805。可拆卸介质811,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器810上,以便于从其上读出的计算机程序根据需要被安装入存储部分808。
特别地,根据本发明的实施例,上文主要步骤的示意图描述的过程可以被实现为计算机软件程序。例如,本发明的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行主要步骤的示意图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分809从网络上被下载和安装,和/或从可拆卸介质811被安装。在该计算机程序被中央处理单元(CPU)801执行时,执行本发明的系统中限定的上述功能。
需要说明的是,本发明所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本发明中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本发明中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本发明实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块也可以设置在处理器中,例如,可以描述为:一种处理器包括获取模块、管理模块和执行模块。其中,这些模块的名称在某种情况下并不构成对该模块本身的限定,例如,执行模块还可以被描述为“用于执行所述事务队列中的各操作指令;在所述操作指令发生错误时,执行所述回滚队列中的回滚指令的模块”。
作为另一方面,本发明还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备包括:
获取业务代码;
根据所述业务代码建立包含操作指令的事务队列,和包含回滚指令的回滚队列;
执行所述事务队列中的各操作指令;在所述操作指令发生错误时,执行所述回滚队列中的回滚指令。
根据本发明实施例的技术方案,建立事务队列和回滚队列对事务中的指令进行管理,在执行事务队列的过程中若发生错误,则可以通过执行回滚队列中的回滚指令对事务进行回滚,从而保证的多数据源之间的数据一致性。此外,由于事务中的操作指令在队列提交后统一执行,从而缩短了执行间隔,进一步避免了因数据不一致而导致的脏读等问题。
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。

Claims (14)

1.一种事务管理的方法,其特征在于,包括:
获取业务代码;
根据所述业务代码建立包含操作指令的事务队列,和包含回滚指令的回滚队列;
执行所述事务队列中的各操作指令;在所述操作指令发生错误时,执行所述回滚队列中的回滚指令。
2.根据权利要求1所述的方法,其特征在于,在根据所述业务代码建立包含操作指令的事务队列,和包含回滚指令的回滚队列的步骤前,还包括:
保存各操作指令和回滚指令的对应关系;
根据所述业务代码建立包含操作指令的事务队列,和包含回滚指令的回滚队列的步骤包括:
根据所述业务代码获取操作指令,根据所述对应关系获取与所述操作指令对应的回滚指令;
将所述操作指令加入事务队列,将所述回滚指令加入回滚队列。
3.根据权利要求2所述的方法,其特征在于,所述业务代码包括数据源标识和抽象指令;保存各数据源对应的操作指令以及该操作指令对应的回滚指令的对应关系的步骤包括:
保存抽象指令与各数据源对应的操作指令以及该操作指令对应的回滚指令的对应关系;
根据所述业务代码获取操作指令的步骤包括:
从所述业务代码获取数据源标识和抽象指令;
根据所述对应关系和所述数据源标识获取与所述抽象指令相对应的操作指令。
4.根据权利要求3所述的方法,其特征在于,将所述操作指令加入事务队列,将所述回滚指令加入回滚队列的步骤前,还包括:
生成与所述业务代码唯一对应的事务标识;
从所述业务代码获取数据源标识和抽象指令;
将所述操作指令加入事务队列,将所述回滚指令加入回滚队列的步骤包括:
在事务队列中添加包含所述事务标识、所述数据源标识和所述操作指令的项目;在回滚队列中添加包含所述事务标识、所述数据源标识和所述回滚指令的项目;
重复上述过程直至遍历所述业务代码中的抽象指令。
5.根据权利要求4所述的方法,其特征在于,所述项目还包括执行游标;包含操作指令的项目中的执行游标,与包含该操作指令对应的回滚指令的项目中的执行游标相同;在所述操作指令发生错误时,执行所述回滚队列中的回滚指令的步骤包括:
获取发生错误的操作指令所属项目的执行游标和事务标识;
在所述回滚队列中查询包含所述执行游标和所述事务标识的项目;
从包含所述执行游标和所述事务标识的项目开始,逆向依次执行所述回滚队列中包含所述事务标识的各项目中的回滚指令。
6.根据权利要求2所述的方法,其特征在于,将所述操作指令加入事务队列,将所述回滚指令加入回滚队列的步骤之前,还包括:
若确定所述操作指令和所述回滚指令的参数中包含未完成指令的结果,则使用占位符替换所述未完成指令的结果。
7.一种事务管理的装置,其特征在于,包括:
获取模块,用于获取业务代码;
管理模块,用于根据所述业务代码建立包含操作指令的事务队列,和包含回滚指令的回滚队列;
执行模块,用于执行所述事务队列中的各操作指令;在所述操作指令发生错误时,执行所述回滚队列中的回滚指令。
8.根据权利要求7所述的装置,其特征在于,所述管理模块还用于:
保存各操作指令和回滚指令的对应关系;
根据所述业务代码获取操作指令,根据所述对应关系获取与所述操作指令对应的回滚指令;
将所述操作指令加入事务队列,将所述回滚指令加入回滚队列。
9.根据权利要求8所述的装置,其特征在于,所述业务代码包括数据源标识和抽象指令;所述管理模块还用于:
保存抽象指令与各数据源对应的操作指令以及该操作指令对应的回滚指令的对应关系;
从所述业务代码获取数据源标识和抽象指令;
根据所述对应关系和所述数据源标识获取与所述抽象指令相对应的操作指令。
10.根据权利要求9所述的装置,其特征在于,所述管理模块还用于:
生成与所述业务代码唯一对应的事务标识;
从所述业务代码获取数据源标识和抽象指令;
在事务队列中添加包含所述事务标识、所述数据源标识和所述操作指令的项目;在回滚队列中添加包含所述事务标识、所述数据源标识和所述回滚指令的项目;
重复上述过程直至遍历所述业务代码中的抽象指令。
11.根据权利要求10所述的装置,其特征在于,所述项目还包括执行游标;包含操作指令的项目中的执行游标,与包含该操作指令对应的回滚指令的项目中的执行游标相同;所述执行模块还用于:
获取发生错误的操作指令所属项目的执行游标和事务标识;
在所述回滚队列中查询包含所述执行游标和所述事务标识的项目;
从包含所述执行游标和所述事务标识的项目开始,逆向依次执行所述回滚队列中包含所述事务标识的各项目中的回滚指令。
12.根据权利要求8所述的装置,其特征在于,所述管理模块还用于:
若确定所述操作指令和所述回滚指令的参数中包含未完成指令的结果,则使用占位符替换所述未完成指令的结果。
13.一种用于事务管理的电子设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-6中任一所述的方法。
14.一种计算机可读介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1-6中任一所述的方法。
CN201810468996.7A 2018-05-16 2018-05-16 一种事务管理的方法和装置 Active CN110502317B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810468996.7A CN110502317B (zh) 2018-05-16 2018-05-16 一种事务管理的方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810468996.7A CN110502317B (zh) 2018-05-16 2018-05-16 一种事务管理的方法和装置

Publications (2)

Publication Number Publication Date
CN110502317A true CN110502317A (zh) 2019-11-26
CN110502317B CN110502317B (zh) 2024-03-01

Family

ID=68584639

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810468996.7A Active CN110502317B (zh) 2018-05-16 2018-05-16 一种事务管理的方法和装置

Country Status (1)

Country Link
CN (1) CN110502317B (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111752911A (zh) * 2020-06-29 2020-10-09 苏州浪潮智能科技有限公司 一种基于Flume的数据传输方法、系统、终端及存储介质
CN113574839A (zh) * 2020-02-28 2021-10-29 华为技术有限公司 一种软件版本回滚方法、装置及系统
CN114385320A (zh) * 2020-10-22 2022-04-22 支付宝(杭州)信息技术有限公司 一种分布式事务处理方法和系统

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090222822A1 (en) * 2008-02-29 2009-09-03 Riemers Bill C Nested Queued Transaction Manager
CN102306197A (zh) * 2011-09-22 2012-01-04 用友软件股份有限公司 保证跨数据源操作结果一致性的装置和方法
CN102782644A (zh) * 2010-03-01 2012-11-14 国际商业机器公司 执行具有回滚由积极优化导致的变化的能力的积极代码优化
CN105893117A (zh) * 2015-11-26 2016-08-24 乐视云计算有限公司 云服务的任务流的配置系统及方法
CN106250254A (zh) * 2016-07-21 2016-12-21 腾讯科技(深圳)有限公司 一种任务处理方法及系统
CN107391539A (zh) * 2017-04-28 2017-11-24 阿里巴巴集团控股有限公司 事务处理方法、服务器和存储介质
CN107766080A (zh) * 2016-08-23 2018-03-06 阿里巴巴集团控股有限公司 事务消息处理方法、装置、设备及系统
CN108009027A (zh) * 2017-11-23 2018-05-08 北京百度网讯科技有限公司 队列消息一致性的实现方法、装置、设备及存储介质

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090222822A1 (en) * 2008-02-29 2009-09-03 Riemers Bill C Nested Queued Transaction Manager
CN102782644A (zh) * 2010-03-01 2012-11-14 国际商业机器公司 执行具有回滚由积极优化导致的变化的能力的积极代码优化
CN102306197A (zh) * 2011-09-22 2012-01-04 用友软件股份有限公司 保证跨数据源操作结果一致性的装置和方法
CN105893117A (zh) * 2015-11-26 2016-08-24 乐视云计算有限公司 云服务的任务流的配置系统及方法
CN106250254A (zh) * 2016-07-21 2016-12-21 腾讯科技(深圳)有限公司 一种任务处理方法及系统
CN107766080A (zh) * 2016-08-23 2018-03-06 阿里巴巴集团控股有限公司 事务消息处理方法、装置、设备及系统
CN107391539A (zh) * 2017-04-28 2017-11-24 阿里巴巴集团控股有限公司 事务处理方法、服务器和存储介质
CN108009027A (zh) * 2017-11-23 2018-05-08 北京百度网讯科技有限公司 队列消息一致性的实现方法、装置、设备及存储介质

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113574839A (zh) * 2020-02-28 2021-10-29 华为技术有限公司 一种软件版本回滚方法、装置及系统
CN113574839B (zh) * 2020-02-28 2024-04-09 华为技术有限公司 一种软件版本回滚方法、装置及系统
CN111752911A (zh) * 2020-06-29 2020-10-09 苏州浪潮智能科技有限公司 一种基于Flume的数据传输方法、系统、终端及存储介质
CN114385320A (zh) * 2020-10-22 2022-04-22 支付宝(杭州)信息技术有限公司 一种分布式事务处理方法和系统

Also Published As

Publication number Publication date
CN110502317B (zh) 2024-03-01

Similar Documents

Publication Publication Date Title
CN110019211A (zh) 关联索引的方法、装置和系统
CN110019125A (zh) 数据库管理的方法和装置
CN110502317A (zh) 一种事务管理的方法和装置
CN110019503A (zh) Redis集群的扩容和/或缩容的方法及装置
CN108846753A (zh) 用于处理数据的方法和装置
CN108629029A (zh) 一种应用于数据仓库的数据处理方法和装置
CN110377416A (zh) 分布式分区任务调度方法和装置
CN111400304A (zh) 一种获取截面日期全量数据的方法、装置、电子设备及存储介质
CN110019263A (zh) 信息存储方法和装置
CN110019346A (zh) 一种基于双主数据库的数据处理方法和装置
CN109086382A (zh) 一种数据同步方法、装置、设备及存储介质
CN113076186B (zh) 任务处理的方法、装置、电子设备和存储介质
CN109960212A (zh) 任务发送方法和装置
CN113434527A (zh) 数据处理的方法、装置、电子设备和存储介质
CN110321242A (zh) 数据处理方法和装置
CN110389976A (zh) 一种多接口数据的调度方法和装置
CN110362583A (zh) 一种用于多数据源的数据处理方法和装置
CN108804451A (zh) 生成主键的方法、装置、电子设备和可读存储介质
CN115982148A (zh) 数据库表的处理方法、装置、电子设备和存储介质
CN110858199A (zh) 一种单据数据分布式计算的方法和装置
CN109656709A (zh) 一种Codis集群扩容的方法和装置
CN114722108A (zh) 客服数据处理方法、装置、电子设备和存储介质
CN115391343A (zh) 账单数据处理方法、装置、电子设备和存储介质
CN110109912A (zh) 一种标识符生成方法和装置
CN110378835A (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
GR01 Patent grant
GR01 Patent grant