一种DDL操作框架及系统技术方案

技术编号:38036115 阅读:7 留言:0更新日期:2023-06-30 11:02
本发明专利技术提出了一种DDL操作框架及系统,框架包括:存根模块,用于保存获取的DDL执行语句以及操作框架的数据;轮次处理模块,用于与存根模块数据交互;其中,轮次处理模块包括至少一个子模块,各个子模块均配置有待处理链表、执行成功链表、执行失败链表:并且,基于DDL执行语句的语句类型,在待处理链表中生成与DDL执行语句对应的反向操作语句。本发明专利技术可以实现在插件中,未修改原有代码文件,不存在版本升级的问题,并且每个轮次可灵活选择是否开启事务。所有轮次按照顺序打包到一个存根中进行统一的管理。当遇到错误时存根依据记录的状态数据自动进行回滚或预定义的反向操作。据自动进行回滚或预定义的反向操作。据自动进行回滚或预定义的反向操作。

【技术实现步骤摘要】
一种DDL操作框架及系统


[0001]本专利技术涉及数据库集群
,尤其涉及一种DDL操作框架及系统。

技术介绍

[0002]将单机数据库改造成分布式数据库时,原本在单一数据库中运行的DDL语句需要在集群范围内运行。由于网络故障、系统故障或硬件故障,有时DDL语句并不能在集群范围内都执行成功,此时为保证集群一致性,需要保证全部操作都正常回滚或反向操作。当有多条DDL语句需要在集群范围内执行时,需要处理任意语句的错误,此时回滚或反向操作将变得异常复杂。
[0003]数据定义语言(data definition language)即DDL语句,用于描述数据库中要存储的现实世界实体。数据库事务(transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成。大多数DDL语句可以运行在事务中,少数DDL语句,如PostgreSQL数据库的创建数据库语句,则无法运行在事务中。两阶段提交协议(two

phase commit,2PC)是一种经典的强一致性中心化副本控制协议。在该协议中,参与的节点分为两类:一个中心化协调者节点(coordinator)和N个参与者节点(participant)。在第一阶段,协调者询问所有的参与者是否可以提交事务(请参与者投票),所有参与者向协调者投票。在第二阶段,协调者根据所有参与者的投票结果做出是否事务可以全局提交的决定,并通知所有的参与者执行该决定。在一个两阶段提交流程中,参与者不能改变自己的投票结果。两阶段提交协议的可以全局提交的前提是所有的参与者都同意提交事务,只要有一个参与者投票选择放弃(abort)事务,则事务必须被放弃。
[0004]目前,传统的处理方案是为支持DDL的集群操作,大幅修改数据库的内核源码,主要表现为:在内核层面上进行DDL语法扩充,以区分本地语句和集群语句;在内核中对语句处理时,为各个节点建立通讯链接,并将语句转发到远端节点执行;获得远端节点执行结果,综合判定语句是否执行成功。

技术实现思路

[0005]本专利技术要解决的技术问题是,现有技术中,对于分布式数据库中的语句处理要求熟悉数据库原理并深入理解该数据库的源码细节,技术门槛高,并且在数据库大版本更新时,由于代码改动量大,难以进行跟随升级;有鉴于此,本专利技术提供一种DDL操作框架及系统。
[0006]本专利技术采用的技术方案是,一种DDL操作框架,包括:
[0007]存根模块,用于保存获取的DDL执行语句以及操作框架的数据;
[0008]至少一个轮次处理模块,用于与所述存根模块数据交互,并且,每个所述轮次处理模块中的DDL执行语句是同一批次处理的;
[0009]其中,所述轮次处理模块包括至少一个子模块,各个子模块均配置有待处理链表、
执行成功链表、执行失败链表;
[0010]并且,所述DDL执行语句被存储至所述待处理链表时,基于所述DDL执行语句的语句类型,在所述待处理链表中生成与所述DDL执行语句对应的反向操作语句;响应于对所述DDL执行语句的处理请求,执行所述待处理链表中的DDL执行语句,将执行成功的所述DDL执行语句存储至所述执行成功链表中,将执行失败的所述DDL执行语句存储至所述执行失败链表中。
[0011]在一个实施方式中,存根模块及其对应的轮次处理模块在同一个集群节点;当集群中有多个DDL处理任务需要实施时,将不同的DDL处理任务,分配至集群的不同节点,并在对应节点创建所述存根模块及其对应的所述轮次处理模块。
[0012]在一个实施方式中,所述子模块被进一步配置为:
[0013]当所述DDL执行语句执行成功时,在所述待处理链表中删除对应的DDL执行语句,并将其保存到执行成功链表;
[0014]当所述DDL执行语句执行失败时,停止对所述DDL执行语句的处理,在待处理链表中删除对应的DDL执行语句,并将其保存到执行失败链表。
[0015]在一个实施方式中,所述轮次处理模块进一步用于选择是否开启事务;
[0016]当所述轮次处理模块开启事务,并且所述DDL执行语句全部执行成功时,记录为事务内成功;
[0017]当所述轮次处理模块未开启事务,并且所述DDL执行语句全部执行成功时,记录为事务外成功;
[0018]当所述轮次处理模块开启事务,并且存在执行失败的所述DDL执行语句时,记录为事务内失败;
[0019]当所述轮次处理模块未开启事务,并且存在执行失败的所述DDL执行语句时,记录为事务外失败。
[0020]在一个实施方式中,所述轮次处理模块进一步被配置为:对轮次处理模块中的、本轮次中的执行情况进行进一步处理,包括:
[0021]当出现事务内成功时,发送提交准备信息;
[0022]当出现事务外成功时,本轮次不做进一步处理;
[0023]当出现事务内失败时,本轮次不做进一步处理;按反向顺序再执行过往轮次中所述执行成功链表中DDL处理语句对应的反向操作语句。
[0024]当出现事务外失败时,本轮次先执行所述执行失败链表中DDL处理语句对应的反向操作语句;再执行成功链表中DDL处理语句对应的反向操作语句;最后按反向顺序再执行过往轮次中所述执行成功链表中DDL处理语句对应的反向操作语句。
[0025]在一个实施方式中,所述轮次处理模块中,根据各个子模块打开的先后顺序,以连接结构体的形式保存到双向链表中,以字符串为标签、节点名字为关键值。
[0026]本专利技术的另一方面还提供了一种DDL操作系统,所述系统包括如上任一项所述的DDL操作框架。
[0027]本专利技术的另一方面还提供了一种电子设备,所述电子设备包括如上所述的DDL操作系统。
[0028]采用上述技术方案,本专利技术至少具有下列优点:
[0029]本专利技术可以实现在插件中,未修改原有代码文件,不存在版本升级的问题。在执行集群范围的DDL语句时,使用本专利技术提供的框架接口,可以根据需要,将待操作的语句分成若干组,将一组语句打包到一个轮次中,每个轮次选择一个或多个集群节点参与本轮次的执行,并且每个轮次可灵活选择是否开启事务。所有轮次按照顺序打包到一个存根中进行统一的管理。当遇到错误时存根依据记录的状态数据自动进行回滚或预定义的反向操作。相比传统方案,避免了源代码的修改,并以框架接口的方式规范了所需的操作和流程,降低了知识储备的要求和编码难度,有利于以较低成本组建团队进行开发。
附图说明
[0030]图1为根据本专利技术实施例的集群操作的总体流程示意图;
[0031]图2为根据本专利技术实施例的DDL操作框架的组成结构示意图;
[0032]图3为根据本专利技术实施例的DDL操作框架的实际应用流程示意图;
[0033]图4为根据本专利技术实施例的电子设备的示意图。
具体实施方式
[0034]为更进一步阐述本专利技术为本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种DDL操作框架,其特征在于,包括:存根模块,用于保存获取的DDL执行语句以及操作框架的数据;至少一个轮次处理模块,用于与所述存根模块数据交互,并且,每个所述轮次处理模块中的DDL执行语句是同一批次处理的;其中,所述轮次处理模块包括至少一个子模块,各个子模块均配置有待处理链表、执行成功链表、执行失败链表;并且,所述DDL执行语句被存储至所述待处理链表时,基于所述DDL执行语句的语句类型,在所述待处理链表中生成与所述DDL执行语句对应的反向操作语句;响应于对所述DDL执行语句的处理请求,执行所述待处理链表中的DDL执行语句,将执行成功的所述DDL执行语句存储至所述执行成功链表中,将执行失败的所述DDL执行语句存储至所述执行失败链表中。2.根据权利要求1所述的DDL操作框架,其特征在于,所述存根模块及其对应的所述轮次处理模块在同一个集群节点;当集群中有多个DDL处理任务需要实施时,将不同的DDL处理任务,分配至所述集群的不同节点,并在对应节点创建所述存根模块及其对应的所述轮次处理模块。3.根据权利要求1所述的DDL操作框架,其特征在于,所述子模块被进一步配置为:当所述DDL执行语句执行成功时,在所述待处理链表中删除对应的DDL执行语句,并将其保存到执行成功链表;当所述DDL执行语句执行失败时,停止对所述DDL执行语句的处理,在待处理链表中删除对应的DDL执行语句,并将其保存到执行失败链表。4.根据权利要求1所述的DDL操作框架,其特征在于,所述轮次处理模块进一步用于选...

【专利技术属性】
技术研发人员:王林森高雪玉郑晓军
申请(专利权)人:瀚高基础软件股份有限公司
类型:发明
国别省市:

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

1