CN117851382A - 数据库状态控制方法、装置和设备 - Google Patents
数据库状态控制方法、装置和设备 Download PDFInfo
- Publication number
- CN117851382A CN117851382A CN202311749757.6A CN202311749757A CN117851382A CN 117851382 A CN117851382 A CN 117851382A CN 202311749757 A CN202311749757 A CN 202311749757A CN 117851382 A CN117851382 A CN 117851382A
- Authority
- CN
- China
- Prior art keywords
- state
- database
- operation method
- state operation
- executed
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 156
- 238000012805 post-processing Methods 0.000 claims description 39
- 238000007781 pre-processing Methods 0.000 claims description 35
- 238000012545 processing Methods 0.000 claims description 19
- 238000004891 communication Methods 0.000 claims description 13
- 230000008859 change Effects 0.000 claims description 12
- 238000004590 computer program Methods 0.000 claims description 11
- 238000009941 weaving Methods 0.000 claims description 6
- 239000000758 substrate Substances 0.000 claims 3
- 238000005516 engineering process Methods 0.000 abstract description 7
- 238000007726 management method Methods 0.000 description 36
- 230000003068 static effect Effects 0.000 description 16
- 238000010586 diagram Methods 0.000 description 9
- 238000009434 installation Methods 0.000 description 8
- 230000008569 process Effects 0.000 description 7
- 230000006870 function Effects 0.000 description 6
- 230000009467 reduction Effects 0.000 description 5
- 238000004458 analytical method Methods 0.000 description 4
- 230000007246 mechanism Effects 0.000 description 4
- 230000008602 contraction Effects 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000002085 persistent effect Effects 0.000 description 3
- 230000006399 behavior Effects 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 230000006978 adaptation Effects 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 239000002131 composite material Substances 0.000 description 1
- 239000000470 constituent Substances 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 230000007613 environmental effect Effects 0.000 description 1
- 238000003384 imaging method Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 239000002071 nanotube Substances 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 239000002245 particle Substances 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供一种数据库状态控制方法、装置和设备,用于解决数据库状态路径控制方面的技术问题。本发明在数据库状态操作方法上添加用于约束数据库的状态切换路径的元数据,使用切面编程技术通过切面类来获取状态操作的自定义注解以校验实际状态操作路径是否符合自定义注解中的状态切换路径。本发明能够实现按照状态机控制数据库状态切换路径,提升数据库管理平执行数据库状态切换的可靠性、一致性、稳定性。
Description
技术领域
本发明涉及数据库技术领域,尤其涉及一种数据库状态控制方法、装置和设备。
背景技术
目前,数据库厂商通常只提供基于终端交互的管理命令来完成数据库的部署和维护,不提供基于WEB的数据库管理与控制,一般需要借助管理平台进行数据库集群的托管来实现完善的生命周期管理能力,数据库管理平台的核心是数据库集群的状态切换与数据一致性的控制。
相较于在线事务处理(Online Transaction Processing,OLTP)的事务型数据库,在线分析处理(Online Analytical Processing,OLAP)的分析型数据库(如Greenplum)由于涉及海量数据的存储查询,其状态变更需要进行数据段的重分布,在数据重分布任务未完成前进行状态切换存在一定风险,因此如果想通过数据库管理平台实现数据库集群的纳管,需要有严格精准的状态切换路径的控制方法来保证数据库状态的一致性与稳定性。
自定义注解是一种编程语言的元数据(Metadata)机制,它可以在代码中为元素(类、方法、字段等)添加额外的信息,用于描述元素的特性、配置和行为。很多编程语言如Java,C#,Python等都自定义注解。在动态编程语言(如Python)中自定义注解常用于类型提示和静态分析。在静态编程语言(如Java)中自定义注解使用更加灵活,可以为类、方法、字段等程序元素添加额外的信息和属性,这些额外信息可在编译或运行时通过反射机制被解析和利用。
切面编程是一种基于切面类或装饰器实现的元编程技术,它可以在运行时动态地修改代码行为,实现自定义的通用切面逻辑。静态编程语言如Java通过定义切面类来实现切面编程,切面类使用特定注解来标识切面,并通过AOP(Aspect Oriented Programming)框架将切面逻辑织入目标代码,切面类中会定义切入点和增强方法,通过切入点选择目标代码中的连接点,并在连接点前后执行相应的增强方法。动态编程语言如Python通常通过定义装饰器类来实现切面编程,在函数或类上添加装饰器来实现横切关注点的切面逻辑。无论是切面类还是装饰器类都可以将自定义的横切逻辑与具体的业务逻辑解耦,提高代码的可维护性和复用性。由于切面类和装饰器是不同编程语言场景下实现切面编程的等同技术手段,为表述方便,本发明中将实现切面编程的切面类和装饰器统称为切面类。
现有技术中,数据库管理平台通常采用面向过程的状态控制管理方法,即通过命令行获取数据库状态结合操作结果来判定当前的集群状态与数据状态,对于状态的获取具有后置性和不稳定性,难以做到可靠、稳定、一致地对数据库状态切换路径进行控制。
发明内容
有鉴于此,本发明提供一种数据库状态控制方法、装置和设备,用于解决数据库状态路径控制方面的技术问题。
基于本发明实施例的一方面,本发明提供了一种数据库状态控制方法,该方法应用于数据库管理平台,该方法包括:
基于切面编程AOP框架动态拦截涉及数据库状态变化的状态操作方法,获取添加在所述状态操作方法入口的用于约束状态切换路径的自定义注解(@StatusRoute),实现对数据库状态切换路径控制操作的织入;
在符合状态切换路径的情况下,实际执行所述状态操作方法及进行状态切换。
进一步地,所述用于约束状态切换路径的自定义注解包括:所述状态操作方法需要满足的前置状态(require)、所述状态操作方法执行中对应的当前状态(ing)、所述状态操作方法执行成功后的成功状态(afterSuccess)、所述状态操作方法执行失败后的失败状态(afterFailure);
所述在符合状态切换路径的情况下,实际执行所述状态操作方法及进行状态切换包括:
在检测到当前数据库状态满足所述自定义注解中的前置状态的情况下,实际执行所述状态操作方法并将数据库状态切换为自定义注解中的当前状态;
在所述状态操作方法执行完成后,根据执行结果成功与否,将数据库状态切换为自定义注解中的成功状态或失败状态。
进一步地,在检测到当前数据库状态不满足所述自定义注解中的前置状态的情况下,返回错误提示且不实际执行所述状态操作方法,根据实际需求将数据库状态切换为自定义注解中的失败状态或不改变数据库状态。
进一步地,当判定满足所述自定义注解中的前置状态的情况下,在实际执行所述状态操作方法之前,还包括执行前置处理步骤;和/或,在实际执行所述状态操作方法成功之后,还包括执行后置处理步骤;
通过切面类将所述状态操作方法与所述前置处理步骤和/或后置处理步骤绑定为同一事务;
在所述状态操作方法、前置处理步骤和后置处理步骤都执行成功的情况下,将数据库状态切换为自定义注解中的成功状态;
在所述状态操作方法、前置处理步骤和后置处理步骤任一个执行失败的情况下,将数据库状态切换为自定义注解中的失败状态。
基于本发明实施例的另一方面,本发明还提供了一种数据库状态控制装置,该装置应用于数据库管理平台,该装置包括:
切面控制模块,用于基于切面编程AOP框架动态拦截涉及数据库状态变化的状态操作方法,获取添加在状态操作方法入口的用于约束状态切换路径的自定义注解,实现对数据库状态切换路径控制操作的织入;
状态操作模块,用于在符合状态切换路径的情况下,实际执行所述状态操作方法。
进一步地,所述用于约束状态切换路径的自定义注解包括:所述状态操作方法需要满足的前置状态(require)、所述状态操作方法执行中对应的当前状态(ing)、所述状态操作方法执行成功后的成功状态(afterSuccess)、所述状态操作方法执行失败后的失败状态(afterFailure);
所述切面控制模块检测当前数据库状态是否满足所述自定义注解中的前置状态,在判定满足的情况下,调用状态操作模块实际执行所述状态操作方法;
所述状态操作模块实际执行所述状态操作方法并将数据库状态切换为自定义注解中的当前状态;
所述切面控制模块在所述状态操作方法执行完成后,根据执行结果成功与否,将数据库状态切换为自定义注解中的成功状态或失败状态。
进一步地,所述切面控制模块在检测到当前数据库状态不满足所述自定义注解中的前置状态的情况下,返回错误提示且不调用状态操作模块实际执行所述状态操作方法。
进一步地,所述装置还包括前置处理模块和/或后置处理模块;
在切面控制模块判定满足所述自定义注解中的前置状态的情况下,在实际执行所述状态操作方法之前,由切面控制模块调用前置处理模块执行前置处理步骤;
在状态操作模块实际执行所述状态操作方法成功之后,由切面控制模块调用后置处理模块执行后置处理步骤;
所述切面控制模块还用于将所述状态操作方法与所述前置处理步骤和/或后置处理步骤绑定为同一事务;在所述状态操作方法、前置处理步骤和后置处理步骤都执行成功的情况下,将数据库状态切换为自定义注解中的成功状态;在所述状态操作方法、前置处理步骤和后置处理步骤任一个执行失败的情况下,将数据库状态切换为自定义注解中的失败状态。
基于本发明实施例的另一方面,本发明还提供一种电子设备,包括处理器、通信接口、存储介质和通信总线,其中,处理器、通信接口、存储介质通过通信总线完成相互间的通信;
存储介质,用于存放计算机程序;
处理器,用于执行存储介质上所存放的计算机程序时,实施前述数据库状态控制方法。
本发明提供的装置可以以软件、硬件或软硬结合的方式实现。当以软件模块方式实现时,该软件模块的程序代码被加载到设备的存储介质中,由处理器读取存储介质中的程序代码并执行。
附图说明
为了更加清楚地说明本发明实施例或者现有技术中的技术方案,下面将对本发明实施例或者现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据本发明实施例的这些附图获得其他的附图。
图1为本发明一实施例提供的数据库状态控制方法的实现原理示意图;
图2为本发明一实施例中有关数据库扩容的状态切换路径示意图;
图3为本发明一实施例提供的数据库状态控制装置结构及基于AOP框架实现数据库状态控制方法逻辑的示意图;
图4为本发明一实施例提供的用于实现本发明提供的数据库状态控制方法的电子设备结构示意图。
具体实施方式
在本发明实施例使用的术语仅仅是出于描述特定实施例的目的,而非限制本发明实施例。本发明实施例中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其它含义。应当理解,尽管在本发明实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用于区别类似的信息、实体或步骤,而不是用于描述特定的顺序或先后次序。例如,在不脱离本发明实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。此外,所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。本发明中的“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况,其中A,B可以是单数或者复数。并且,在本发明的描述中,除非另有说明,“多个”是指两个或多于两个。“以下至少一项(个)”或其类似表达,是指的这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b,或c中的至少一项(个),可以表示:a,b,c,a-b,a-c,b-c,或a-b-c,其中a,b,c可以是单个,也可以是多个。
在海量高性能数据库服务场景中,数据库服务通常采用数据库集群方式部署,例如MPP数据库(Massively Parallel Processing,大规模并行处理)用于处理大规模数据并支持大量并行查询,MPP数据库系统架构通常由许多节点组成,一个主机设备上可以部署一个节点也可以部署多个节点,每个节点所在的主机设备都包含处理器、内存和存储资源,这些节点之间协同工作以加速大量数据的查询和分析。
以集群方式部署的数据库简称为数据库集群,数据库集群的状态切换涉及到很多复杂的操作,例如,需要判断是否符合状态的切换路径,可能需要执行如资源检测、依赖包配置、权限配置等前置处理步骤,还可能涉及后置处理步骤。因此,对数据库集群状态进行管理是一项复杂和严格的控制任务,如果通过手工命令行的管理方式进行管理,很容易出错,管理效率较低且容易造成损失。
有鉴于此,本发明提供了一种数据库状态控制方案,该方案应用于采用平台化管理方式对数据库集群进行管理的数据库管理平台,用于解决数据库管理平台纳管数据库集群后,对于集群状态操作的预期与真实状态可能不一致,不容易做到可靠、稳定、一致地对数据库状态切换路径进行控制的技术问题。
本发明的基本思路是:在数据库状态操作方法上添加用于约束数据库的状态切换路径的元数据,使用切面编程技术通过切面类来获取状态操作的自定义注解以校验实际状态操作路径是否符合自定义注解中的状态切换路径,还可将状态操作与前置处理和后置处理绑定为同一事务以增强约束。通过本发明提供的技术方案,能够实现按照状态机控制数据库状态切换路径,提升数据库管理平执行数据库状态切换的可靠性、一致性、稳定性。
基于本发明的基本思路,本发明提供如下实施例,其中,需要说明的是,在附图的流程图中的步骤或下述文字步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
图1为本发明一实施例提供的数据库状态控制方法的实现原理示意图。本发明提供的数据库状态控制方法应用于数据库管理平台,数据库管理平台用于管理数据库集群,数据库管理人员可通过数据库管理平台执行状态操作,这些状态操作会导致数据库状态的变化。数据库状态的切换路径可表达为图1中示例的状态机,数据库每一次状态的改变都由一次状态操作引起,即数据库的状态操作导致了数据库状态的变化。
本发明在数据库管理平台中导致数据库状态变化的状态操作方法上,增加了用于约束状态切换路径的自定义注解,自定义注解作为元数据,可由数据库管理平台程序在运行时通过切面类动态获取并基于自定义注解中规定的状态切换路径执行状态切换。
本发明使用切面编程技术在涉及数据库状态的状态操作方法上定义切入点,获取定义在状态操作方法上的自定义注解,实现对数据库状态切换路径控制操作的织入,同时,在某些状态切换需要前后置处理的场景中,还可实现前后置处理与状态操作的事务性绑定。
为实现本发明实施例提供的数据库状态控制方法,需要预先在数据库管理平台中执行如下步骤:确定状态机,添加自定义注解,添加前后置处理步骤,添加切面类和定义切入点。以下分别对各部分进行示例性的详细描述。
【确定状态机】
本发明中用于约束状态切换路径的自定义注解是基于预置的状态机来设置的。状态机描述了数据库的各种状态以及不同状态之间的切换路径和触发机制,由一组状态以及状态之间的转换规则构成。
状态机需要根据数据库集群真实的状态切换路径与个性化业务需求来确定,如图1示例的扩容中状态的上个状态必须是运行中状态,而不能是恢复中、已停止或其它状态。状态机实际上相当于一个依赖约束图(Dependency Constraint Graph,DCG),DCG是一种图结构,用于表示软件或系统中的依赖关系和约束条件。它是一个有向图,节点表示不同的元素(例如软件组件、类、函数等),而边表示这些元素之间的依赖关系或约束条件。
图2为本发明一实施例中有关数据库扩容的状态切换路径示意图。一个状态机中涉及到多种数据库状态,例如包括但不限于安装、运行中、扩容中、收缩中、扩容回滚、重分布中、备份中、恢复中、停止等等,引起数据库状态变化的状态操作包括但不限于:安装操作、运行操作、扩容操作、收缩操作、回滚操作、重分布操作、备份操作、恢复操作、停止操作等等。
为描述方便,图2仅示例了状态机中与扩容相关的状态及状态之间的切换路径,数据库扩容这一状态操作可能的状态切换路径为:
1)运行中→扩容中→重分布中→运行中
2)运行中→扩容中→扩容失败
3)运行中→扩容中→扩容失败→扩容回滚→回滚失败
4)运行中→扩容中→扩容失败→扩容回滚→重分布中→运行中
可将状态机中所有状态封装成Status状态类,状态类中可包括<name名称>和<1个线程安全的set数组>属性,其作用分别是:
1)name名称:为状态名称,用于唯一标识状态;
2)set数组:非重复的多个Status类集合,通过addAll方式增加它的上一可能状态,以此字段实现状态机的DCG图;
以下为一实施例中根据业务逻辑定义的静态状态对象的示例:
public static Status PREINSTALL=new Status(V_PREINSTALL);//未安装
public static Status INSTALLING=new Status(V_INSTALLING);//安装中
public static Status INSTALL_FAILED=new Status(V_INSTALL_FAILED);//安装失败
public static Status RUNNING=new Status(V_RUNNING);/运行中
public static Status STOPPED=new Status(V_STOPPED);//已停止
public static Status EXPANDING=new Status(V_EXPANDING);//扩容中
public static Status REDUCING=new Status(V_REDUCING);//缩容中
public static Status EXPAND_FAILED=new Status(V_EXPAND_FAILED);//扩容失败
public static Status REDUCE_FAILED=new Status(V_REDUCE_FAILED);//缩容失败
public static Status REDISTRIBUTING=new Status(V_REDISTRIBUTING);//重分布中
public static Status ROLLBACKING=new Status(V_ROLLBACKING);//回滚中
public static Status UNINSTALLING=new Status(V_UNINSTALLING);//卸载中
按照实际业务逻辑为每个Status状态对象绑定状态关系,构造实际的数据库集群状态切换的状态机流转图,如下:
PREINSTALL.addAll(UNINSTALLING);//“未安装”的上个状态必须是“卸载中”
UNINSTALLING.addAll(INSTALL_FAILED,STOPPED);//“卸载中”的上个状态必须是“安装失败”或“已停止”
INSTALL_FAILED.addAll(INSTALLING);//“安装失败”的上个状态必须是“安装中”
UNINSTALL_FAILED.addAll(UNINSTALLING);//“卸载失败”的上个状态必须是“卸载中”
INSTALLING.addAll(PREINSTALL);//“安装中”的上个状态必须是“未安装”
STOPPED.addAll(STOPPING,INSTALLING);//“已停止”的上个状态必须是“停止中”或“安装中”
REDISTRIBUTED.addAll(REDISTRIBUTING,ROLLBACKING);//“已重分布”的上个状态必须是“重分布中”或“回滚中”
UNREDISTRIBUTED.addAll(EXPANDING,REDISTRIBUTING);//“未重分布中”的上个状态必须是“扩容中”或“重分布中”
REDISTRIBUTING.addAll(UNREDISTRIBUTED);//“重分布中”的上个状态必须是“未重分布”
ROLLBACKING.addAll(EXPAND_FAILED,REDUCE_FAILED);//“回滚中”的上个状态必须是“扩容中”或“缩容中”
STARTING.addAll(STOPPED);//“启动中”的上个状态必须是“已停止”
EXPANDING.addAll(RUNNING,REDISTRIBUTED);//“扩容中”的上个状态必须是“运行中”或“已重分布”
EXPAND_FAILED.addAll(EXPANDING);//“扩容失败”的上个状态必须是“扩容中”
REDUCE_FAILED.addAll(REDUCING);//“缩容失败”的上个状态必须是“缩容中”
【添加自定义注解】
为了基于状态机实现对数据库状态切换路径的控制,本发明在数据库管理平台中每个会导致数据库状态变更的状态操作方法入口增加自定义注解@StatusRoute,该注解包含4个属性:状态操作的前置状态(require)、状态操作对应的当前状态(ing)、状态操作成功后的成功状态(afterSuccess)、状态操作失败后的失败状态(afterFailure),其中require的值可以是逗号分隔的若干状态。
以数据库扩容操作为例,在扩容操作方法上增加@StatusRoute自定义注解,用于作为元数据约束当前扩容状态操作要求的前置状态为运行中(V_RUNNING)状态,调用扩容状态操作执行扩容操作期间的当前状态为扩容中(V_EXPANDING)状态,扩容操作执行成功后的成功状态为运行中(V_RUNNING)状态,扩容操作执行失败后的失败状态为扩容失败(V_EXPAND_FAILED)状态:
以下为在扩容操作方法前添加的自定注解的示例:
对于某些数据库来说,在扩容操作执行成功后会直接进入运行中(V_RUNNING,)状态,但对于另外一些数据库入MPP数据库来说,通常在执行扩容操作后需要进行数据重分布操作,因此会进入到V_REDISTRIBUTING的状态,因此,状态机需要根据数据库类型及实际业务需求来确定,本发明不做具体限定。
【添加前后置处理步骤】
根据数据库类型与实际业务需求的不同,在实际执行数据库状态操作方法之前和/或之后,可能需要执行一些前置处理步骤和/或后置处理步骤。
前置处理步骤通常包括一些配置、检测步骤,后置处理步骤通常包括一些环境或业务适配、资源释放等步骤。
前置处理步骤/后置处理步骤与状态操作方法的定义是分开的,前后置处理步骤对应方法的命名规则可采用beforeXX()和afterXX()的命名方式,其中XX表示状态操作类型。
以扩容操作为例,数据库管理平台将数据库本身提供的基于命令行的expand扩容指令封装在数据库管理平台的扩容操作expand()方法当中,但在实际执行扩容操作方法之前,需要先执行为扩容主机配置主机名、配置权限、配置软件包管理工具(yum源)配置、安装必备依赖包等多个前置处理步骤,可以将这些前置处理步骤封装在数据库管理平台的前置处理方法beforeExpand()当中。在实际执行扩容操作方法之后,通常还需要进行数据的重分布刷新等后置处理步骤,可以将后置处理步骤封装在数据库管理平台的后置处理方法afterExpand()当中。
再比如大部分开源数据库一般不支持缩容操作,但数据库管理平台纳管数据库集群后可以定义自己的缩容流程,缩容的前置处理方法beforeReduce()中可包括检查集群是否健康(包括集群状态与数据状态)的步骤,若检测到集群不健康,则不允许管理平台执行缩容操作并将数据库状态置为缩容失败状态。如果判定集群状态健康,则允许管理平台执行缩容操作,缩容操作执行成功后,还需要执行缩容的后置处理方法afterReduce(),完成密钥刷新、修改主机配置、释放资源等。
【添加切面类和定义切入点】
图3为本发明一实施例提供的数据库状态控制装置结构及基于AOP框架实现数据库状态控制方法逻辑的示意图。该图以数据库扩容操作为例来说明状态操作控制装置300如何实现数据库状态控制。状态操作控制装置300作为数据库管理平台的一个组成模块可以组件形式安装于数据库管理平台305。
状态操作控制装置300使用切面编程技术在涉及数据库状态变化的状态操作方法上定义切入点(@PointCut),切面类(@OperationAspect)动态拦截状态操作方法(operation()),并获取添加在状态操作方法(如数据库扩容expand方法)入口的用于约束状态切换路径的自定义注解(@StatusRoute),实现对数据库状态切换路径控制操作的织入。
数据库管理平台305在接收到状态操作请求(例如扩容请求)后调用状态操作控制装置300执行数据库状态操作步骤。
状态操作控制装置300包括:切面控制模块301、状态操作模块303,根据实际业务场景,可能还会包括前置处理模块302和/或后置处理模块304。
切面控制模块301,用于基于切面编程AOP框架动态拦截涉及数据库状态变化的状态操作方法,获取添加在状态操作方法入口的用于约束状态切换路径的自定义注解,实现对数据库状态切换路径控制操作的织入;
如图3的示例,切面控制模块301对应切面类(@OperationAspect)实现的功能,通过定义的切入点(@PointCut)来实现在状态操作方法(operation())被调用时动态地织入自定义的数据库状态切换路径控制逻辑。在切入点对应的通知实现函数中,获取定义在状态操作方法(如expand方法)入口的用于约束状态切换路径的自定义注解(@StatusRoute)的内容,自定义注解中包括:
状态操作方法需要满足的前置状态(require)、状态操作方法执行中对应的当前状态(ing)、状态操作方法执行成功后的成功状态(afterSuccess)、状态操作方法执行失败后的失败状态(afterFailure)。
切面控制模块301根据自定义注解中规定的状态切换路径实现对数据库状态切换路径的控制:切面控制模块301首先检测当前数据库状态是否满足自定义注解中的前置状态,在判定满足的情况下,调用状态操作模块303实际执行所述状态操作方法。
状态操作模块303,用于在符合状态切换路径的情况下,实际执行状态操作方法。
状态操作模块303用于实际执行状态操作方法并将数据库状态切换为自定义注解中的当前状态。切面控制模块301在状态操作方法执行完成后,根据执行结果成功与否,将数据库状态切换为自定义注解中的成功状态或失败状态。
如图3的示例,切面控制模块301基于AOP框架识别拦截数据库的扩容操作,并通过反射机制获取到当前状态操作为扩容操作类型,如expand()方法的操作类型直接识别为expand扩容。当拦截到数据库的扩容操作方法时,切面控制模块301首先根据当前数据库的状态判断是否满足自定义注解中的前置状态(require),即判断数据库当前状态是否为V_RUNNING状态,如果满足,在无前置处理的情况下,调用状态操作模块303实际执行扩容操作方法(expand)并将数据库状态更新为扩容中状态(ing=V_EXPANDING)。在扩容操作方法执行完成后,在无后置处理的情况下,切面控制模块301根据扩容操作执行结果成功与否,将数据库状态切换为自定义注解中的成功状态(afterSucess=V_RUNNING)或失败状态(afterFailure=V_EXPAND_FAILED)。
在切面编程中,要控制是否实际执行切入点对应的状态操作方法,可以通过环绕通知(Around advice)类型的切面类通知实现函数,环绕通知允许切面类完全控制是否实际执行切点对应的状态操作方法。
切面控制模块301在检测到当前数据库状态不满足自定义注解中的前置状态的情况下,可直接返回错误提示且不实际执行状态操作方法。根据实际业务场景需求,在某些场景下,在返回前,也可能需要将数据库状态切换为自定义注解中的失败状态。
前置处理模块302,用于在切面控制模块301判定满足所述自定义注解中的前置状态的情况下,在实际执行所述状态操作方法之前,由切面控制模块301调用执行前置处理步骤。
后置处理模块304,用于在状态操作模块303实际执行所述状态操作方法成功之后,由切面控制模块301调用执行后置处理步骤。
切面控制模块301还用于将状态操作方法与前置处理步骤和/或后置处理步骤绑定为同一事务;在状态操作方法、前置处理步骤和后置处理步骤都执行成功的情况下,将数据库状态切换为自定义注解中的成功状态;在状态操作方法、前置处理步骤和后置处理步骤任一个执行失败的情况下,将数据库状态切换为自定义注解中的失败状态。
如图3的示例,在切面控制模块301根据扩容操作方法上定义的自定义注解中的前置状态判断到当前数据库的状态符合前置状态的要求时,根据实际业务需求调用前置处理模块302执行beforeExpand前置处理步骤,在前置处理步骤执行成功后,接着调用状态操作模块303实际执行expand扩容操作,在扩容操作执行成功后,再根据实际业务需要调用后置处理模块304执行afterExpand后置处理步骤。在beforeExpand前置处理步骤、expand扩容操作和afterExpand后置处理步骤都成功执行后,由切面控制模块301将数据库集群状态修改成@StatusRoute注解中afterSuccess中的V_RUNNING状态,若出现报错异常则修改成afterFailure中的V_EXPAND_FAILED状态,需要注意的是这里状态切换也需要首先判断状态是否满足状态机的定义路径。
图4为本发明一实施例提供的用于实现本发明提供的数据库状态控制方法的电子设备结构示意图,该设备400包括:诸如中央处理单元(CPU)的处理器410、通信总线420、通信接口440以及存储器430。其中,处理器410与存储器430可以通过通信总线420相互通信。存储器430内存储有计算机程序,当该计算机程序被处理器410执行时即可实现本发明提供的数据库状态控制方法中的一个或多个步骤的功能。
存储器是指基于某种存储介质用于存储计算机程序和/或数据的装置,它可以是易失性存储器(Volatile Memory,VM,常称为内存),也可以是非易失性存储器(Non-Volatile Memory,NVM)。内存是指与处理器直接交换数据的内部存储器,它可以随时读写数据,而且速度很快,作为操作系统和其它运行程序的临时数据的存储介质。内存可以是同步动态随机存取内存(Synchronous Dynamic Random Access Memory,SDRAM)、动态随机存取内存(Dynamic Random Access Memory,DRAM)等。非易失性存储器是指采用持久化存储介质的存储器,具有容量大和可持久保存数据的特性,可以是存储级存储器(StorageClass Memory,SCM)、固态硬盘(Solid State Disk,SSD)、NAND闪存、磁盘等。SCM是业界对介于内存与闪存之间的新存储介质的统称,是一种同时结合持久化存储特性与内存特性的复合型储存技术,存取速度慢于DRAM快于SSD硬盘。
处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(Digital SignalProcessing,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
应当认识到,本发明的实施例可以由计算机硬件、硬件和软件的组合、或者通过存储在非暂时性(或称为非持久性)存储器中的计算机指令来实现或实施。所述方法可以使用标准编程技术,包括配置有计算机程序的非暂时性存储介质在计算机程序中实现,其中如此配置的存储介质使得计算机以特定和预定义的方式操作。每个程序可以以高级过程或面向对象的编程语言来实现以与计算机系统通信。然而,若需要,该程序可以以汇编或机器语言实现。在任何情况下,该语言可以是编译或解释的语言。此外,为此目的该程序能够在编程的专用集成电路上运行。此外,可按任何合适的顺序来执行本发明描述的过程的操作,除非本发明另外指示或以其他方式明显地与上下文矛盾。本发明描述的过程(或变型和/或其组合)可在配置有可执行指令的一个或多个计算机系统的控制下执行,并且可作为共同地在一个或多个处理器上执行的代码(例如,可执行指令、一个或多个计算机程序或一个或多个应用)、由硬件或其组合来实现。所述计算机程序包括可由一个或多个处理器执行的多个指令。
进一步,所述方法可以在可操作地连接至合适的任何类型的计算平台中实现,包括但不限于个人电脑、迷你计算机、主框架、工作站、网络或分布式计算环境、单独的或集成的计算机平台、或者与带电粒子工具或其它成像装置通信等等。本发明的各方面可以以存储在非暂时性存储介质或设备上的机器可读代码来实现,无论是可移动的还是集成至计算平台,如硬盘、光学读取和/或写入存储介质、RAM、ROM等,使得其可由可编程计算机读取,当存储介质或设备由计算机读取时可用于配置和操作计算机以执行在此所描述的过程。此外,机器可读代码,或其部分可以通过有线或无线网络传输。当此类媒体包括结合微处理器或其他数据处理器实现上文所述步骤的指令或程序时,本发明所述的发明包括这些和其他不同类型的非暂时性计算机可读存储介质。当根据本发明所述的方法和技术编程时,本发明还包括计算机本身。
以上所述仅为本发明的实施例而已,并不用于限制本发明。对于本领域技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种数据库状态控制方法,其特征在于,该方法应用于数据库管理平台,该方法包括:
基于切面编程AOP框架动态拦截涉及数据库状态变化的状态操作方法,获取添加在所述状态操作方法入口的用于约束状态切换路径的自定义注解,实现对数据库状态切换路径控制操作的织入;
在符合状态切换路径的情况下,实际执行所述状态操作方法及进行状态切换。
2.根据权利要求1所述的方法,其特征在于,
所述用于约束状态切换路径的自定义注解包括:所述状态操作方法需要满足的前置状态、所述状态操作方法执行中对应的当前状态、所述状态操作方法执行成功后的成功状态、所述状态操作方法执行失败后的失败状态;
所述在符合状态切换路径的情况下,实际执行所述状态操作方法及进行状态切换包括:
在检测到当前数据库状态满足所述自定义注解中的前置状态的情况下,实际执行所述状态操作方法并将数据库状态切换为自定义注解中的当前状态;
在所述状态操作方法执行完成后,根据执行结果成功与否,将数据库状态切换为自定义注解中的成功状态或失败状态。
3.根据权利要求2所述的方法,其特征在于,
在检测到当前数据库状态不满足所述自定义注解中的前置状态的情况下,返回错误提示且不实际执行所述状态操作方法,根据实际需求将数据库状态切换为自定义注解中的失败状态或不改变数据库状态。
4.根据权利要求2所述的方法,其特征在于,
当判定满足所述自定义注解中的前置状态的情况下,在实际执行所述状态操作方法之前,还包括执行前置处理步骤;和/或,在实际执行所述状态操作方法成功之后,还包括执行后置处理步骤;
通过切面类将所述状态操作方法与所述前置处理步骤和/或后置处理步骤绑定为同一事务;
在所述状态操作方法、前置处理步骤和后置处理步骤都执行成功的情况下,将数据库状态切换为自定义注解中的成功状态;
在所述状态操作方法、前置处理步骤和后置处理步骤任一个执行失败的情况下,将数据库状态切换为自定义注解中的失败状态。
5.一种数据库状态控制装置,其特征在于,该装置应用于数据库管理平台,该装置包括:
切面控制模块,用于基于切面编程AOP框架动态拦截涉及数据库状态变化的状态操作方法,获取添加在状态操作方法入口的用于约束状态切换路径的自定义注解,实现对数据库状态切换路径控制操作的织入;
状态操作模块,用于在符合状态切换路径的情况下,实际执行所述状态操作方法。
6.根据权利要求5所述的装置,其特征在于,
所述用于约束状态切换路径的自定义注解包括:所述状态操作方法需要满足的前置状态、所述状态操作方法执行中对应的当前状态、所述状态操作方法执行成功后的成功状态、所述状态操作方法执行失败后的失败状态;
所述切面控制模块检测当前数据库状态是否满足所述自定义注解中的前置状态,在判定满足的情况下,调用状态操作模块实际执行所述状态操作方法;
所述状态操作模块实际执行所述状态操作方法并将数据库状态切换为自定义注解中的当前状态;
所述切面控制模块在所述状态操作方法执行完成后,根据执行结果成功与否,将数据库状态切换为自定义注解中的成功状态或失败状态。
7.根据权利要求6所述的装置,其特征在于,
所述切面控制模块在检测到当前数据库状态不满足所述自定义注解中的前置状态的情况下,返回错误提示且不调用状态操作模块实际执行所述状态操作方法。
8.根据权利要求6所述的装置,其特征在于,所述装置还包括前置处理模块和/或后置处理模块;
在切面控制模块判定满足所述自定义注解中的前置状态的情况下,在实际执行所述状态操作方法之前,由切面控制模块调用前置处理模块执行前置处理步骤;
在状态操作模块实际执行所述状态操作方法成功之后,由切面控制模块调用后置处理模块执行后置处理步骤;
所述切面控制模块还用于将所述状态操作方法与所述前置处理步骤和/或后置处理步骤绑定为同一事务;在所述状态操作方法、前置处理步骤和后置处理步骤都执行成功的情况下,将数据库状态切换为自定义注解中的成功状态;在所述状态操作方法、前置处理步骤和后置处理步骤任一个执行失败的情况下,将数据库状态切换为自定义注解中的失败状态。
9.一种电子设备,其特征在于,包括处理器、通信接口、存储介质和通信总线,其中,处理器、通信接口、存储介质通过通信总线完成相互间的通信;
存储介质,用于存放计算机程序;
处理器,用于执行存储介质上所存放的计算机程序时,实施权利要求1-4中任一项所述的方法。
10.一种存储介质,其上存储有计算机程序,其特征在于,所述计算机程序当被处理器执行时实施如权利要求1至4中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311749757.6A CN117851382A (zh) | 2023-12-19 | 2023-12-19 | 数据库状态控制方法、装置和设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311749757.6A CN117851382A (zh) | 2023-12-19 | 2023-12-19 | 数据库状态控制方法、装置和设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117851382A true CN117851382A (zh) | 2024-04-09 |
Family
ID=90537625
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311749757.6A Pending CN117851382A (zh) | 2023-12-19 | 2023-12-19 | 数据库状态控制方法、装置和设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117851382A (zh) |
-
2023
- 2023-12-19 CN CN202311749757.6A patent/CN117851382A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11853774B2 (en) | Dynamically loaded plugin architecture | |
Baumann et al. | Providing dynamic update in an operating system. | |
US6915511B2 (en) | Dynamic class reloading mechanism | |
CN100426235C (zh) | 在软件包管理系统将用户进程表示为软件包的系统和方法 | |
CN107066241B (zh) | 用于动态加载基于图的计算的系统和方法 | |
WO2018072493A1 (zh) | 编译方法和编译系统 | |
CN111897570A (zh) | 一种基于Maven插件的多依赖项文件提取方法及装置 | |
US9384020B2 (en) | Domain scripting language framework for service and system integration | |
US10514898B2 (en) | Method and system to develop, deploy, test, and manage platform-independent software | |
US9690567B2 (en) | Runtime detection of software configurations and upgrades | |
US11294791B2 (en) | Code optimization for connected managed runtime environments | |
US20070283327A1 (en) | Hierarchical test verification using an extendable interface | |
US8516506B2 (en) | Method and system for restoring an application in a dynamically linked environment | |
CN117851382A (zh) | 数据库状态控制方法、装置和设备 | |
CN110968339A (zh) | 前端构建工具的方法、装置以及电子设备 | |
CN116382713A (zh) | 构建应用镜像的方法、系统、设备和存储介质 | |
CN113867776A (zh) | 中台应用的发布方法、装置、电子设备和存储介质 | |
Schanne et al. | Adding Autonomic Functionality to Object-Oriented Applications. | |
CN111538491A (zh) | 数据事件处理方法、装置、设备和存储介质 | |
US10055209B2 (en) | Resource closing | |
CN114428653B (zh) | 使用不同编译设置的代码的即时jit编译实例 | |
CN115225638B (zh) | 服务部署方法、装置、电子设备及计算机可读存储介质 | |
Li et al. | Prajna: Cloud Service and Interactive Big Data Analytics | |
CN114090128A (zh) | 一种程序运行方法、装置、设备和可读介质 | |
CN115658099A (zh) | 企业级应用运维方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination |