CN117632250A - 一种应用处理方法、装置、计算机设备以及可读存储介质 - Google Patents

一种应用处理方法、装置、计算机设备以及可读存储介质 Download PDF

Info

Publication number
CN117632250A
CN117632250A CN202210972691.6A CN202210972691A CN117632250A CN 117632250 A CN117632250 A CN 117632250A CN 202210972691 A CN202210972691 A CN 202210972691A CN 117632250 A CN117632250 A CN 117632250A
Authority
CN
China
Prior art keywords
database
target
data
change
information
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
Application number
CN202210972691.6A
Other languages
English (en)
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.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen 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 Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN202210972691.6A priority Critical patent/CN117632250A/zh
Publication of CN117632250A publication Critical patent/CN117632250A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/76Adapting program code to run in a different environment; Porting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/21Design, administration or maintenance of databases
    • G06F16/219Managing data history or versioning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/2358Change logging, detection, and notification
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Computer Security & Cryptography (AREA)
  • Stored Programmes (AREA)

Abstract

本申请实施例公开了一种应用处理方法、装置、计算机设备以及可读存储介质,包括:在基于开发环境中的目标数据库验证目标应用满足交付条件后,获取数据库变动信息;根据数据库变动信息生成数据库变更日志,数据库变更日志用于对任一数据库执行目标数据库所涉及的数据库变更操作;采用数据库变更日志和目标应用的开发程序代码生成目标应用的交付程序包;将交付程序包发送给目标对象,使目标对象在相应数据库中执行交付程序包中的数据库变更日志以变更相应数据库,并基于变更后的数据库和交付程序包中的开发程序代码运行目标应用。采用该方法能够通过自动化的流程,准确且全面地对交付侧的数据库进行变更处理,有效提高目标应用的交付效率。

Description

一种应用处理方法、装置、计算机设备以及可读存储介质
技术领域
本申请涉及计算机技术领域,尤其涉及一种应用处理方法、装置、计算机设备以及可读存储介质。
背景技术
随着计算机技术的发展,各种各样的应用软件为人们的生产生活带来便利。在开发人员开发出某一应用软件后,可根据交付需求将开发完成的应用软件交付给相应对象,而在应用交付时,通常需变更相应对象侧的数据库的结构或数据,以使得相应对象可基于变更后的数据库正常使用该应用软件。传统方式下,通常需要开发人员将应用软件发给运维人员,再由运维人员手动地对相应对象侧的数据库进行变更,以实现应用软件的交付;考虑到运维人员可能无法考虑到所有变更情况(如不同数据库之间的差异),这样会导致运维人员无法准确且全面地对相应数据库执行变更操作;并且,不同职能的人员(包括开发人员和运维人员)对目标环境中的数据库的变更部署存在高度的耦合,这样会影响应用软件的交付效率。
发明内容
本申请实施例提供一种应用处理方法、装置、计算机设备以及可读存储介质,可以通过自动化的流程,准确且全面地对交付侧的数据库进行变更处理,有效提高目标应用的交付效率。
一方面,本申请实施例提供了一种应用处理方法,包括:
在基于开发环境中的目标数据库验证目标应用满足交付条件后,获取关于目标数据库的数据库变动信息;数据库变动信息用于指示:部署目标数据库时所执行的数据库变更操作;
根据数据库变动信息生成数据库变更日志,数据库变更日志用于对任一数据库执行目标数据库所涉及的数据库变更操作;
采用数据库变更日志和目标应用的开发程序代码,生成目标应用的交付程序包;
当向目标对象交付目标应用时,将交付程序包发送给目标对象,使目标对象在相应数据库中执行交付程序包中的数据库变更日志以变更相应数据库,并基于变更后的数据库和交付程序包中的开发程序代码运行目标应用。
一方面,本申请实施例提供了一种应用处理装置,包括:
获取模块,用于在基于开发环境中的目标数据库验证目标应用满足交付条件后,获取关于目标数据库的数据库变动信息;数据库变动信息用于指示:部署目标数据库时所执行的数据库变更操作;
生成模块,用于根据数据库变动信息生成数据库变更日志,数据库变更日志用于对任一数据库执行目标数据库所涉及的数据库变更操作;
生成模块,用于采用数据库变更日志和目标应用的开发程序代码,生成目标应用的交付程序包;
发送模块,用于当向目标对象交付目标应用时,将交付程序包发送给目标对象,使目标对象在相应数据库中执行交付程序包中的数据库变更日志以变更相应数据库,并基于变更后的数据库和交付程序包中的开发程序代码运行目标应用。
相应地,本申请实施例提供了一种计算机设备,包括:处理器、存储器以及网络接口;处理器与存储器、网络接口相连,其中,网络接口用于提供网络通信功能,存储器用于存储程序代码,处理器用于调用程序代码,以执行本申请实施例中应用处理方法。
相应地,本申请实施例提供了一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,计算机程序包括程序指令,程序指令当被处理器执行时,执行本申请实施例中应用处理方法。
相应地,本申请实施例提供了一种计算机程序产品,计算机程序产品包括计算机程序或计算机指令,计算机程序或计算机指令被处理器执行时实现本申请实施例的应用处理方法。
在本申请实施例中,可先基于开发环境中的目标数据库对目标应用是否满足交付条件进行验证,并在确定目标应用满足交付条件之后,根据用于指示部署目标数据库时所执行的数据库变更操作的数据库变动信息,自动生成可支持对任一数据库执行目标数据库所涉及的数据库变更操作的数据库变更日志,并采用该数据库变更日志和目标应用的开发程序代码,生成目标应用的交付程序包,以使得当需向目标对象交付目标应用时,可以通过将该交付程序包发送给目标对象,来实现目标对象通过执行该交付程序包中的数据库变更日志,将部署目标数据库所执行的数据库变更操作,执行于目标对象侧的数据库中以更新目标对象侧的数据库,使得目标对象侧的更新后的数据库可具有与目标数据库相匹配的结构或数据,从而使得目标对象可基于变更后的数据库和交付程序包中的开发程序代码正常运行目标应用。这种自动化变更数据库的处理流程,由于自动生成的数据库变更日志可用于在目标对象侧的数据库中执行部署至目标数据库所执行的全量的数据库变更操作,来变更目标对象侧的数据库,可避免因人为手动变更而导致的不全面和不准确的问题,可有效提升应用交付的准确性和数据库变更的全面性;并且,由于整个处理流程可在开发人员与运维人员之间实现解耦,可有效提高目标应用的交付效率。由于数据库变更日志可在任一数据库中执行目标数据库所涉及的数据库变更操作,数据库变更日志支持兼容不同交付环境中的数据库,这样,无需对不同数据库专门设置对应的数据库变更日志,不同交付环境中的数据库可使用同一数据库变更日志执行准确且全面的变更处理,提高目标应用交付的便捷度,从而进一步提升交付效率。
附图说明
图1a是本申请一个示例性实施例提供的一种应用处理系统的架构图;
图1b是本申请一个示例性实施例提供的一种应用处理系统所涉及的应用处理流程示意图;
图2是本申请一个示例性实施例提供的一种应用处理方法的流程示意图;
图3是本申请一个示例性实施例提供的一种应用处理方法的流程示意图;
图4a是本申请一个示例性实施例提供的一种模型编辑界面的示意图;
图4b是本申请一个示例性实施例提供的一种用于修改字段信息的子区域的示意图;
图4c是本申请一个示例性实施例提供的另一种模型编辑界面的示意图;
图4d是本申请一个示例性实施例提供的一种数据编辑界面的示意图;
图4e是本申请一个示例性实施例提供的另一种数据编辑界面的示意图;
图5是本申请一个示例性实施例提供的一种应用处理方法的流程示意图;
图6是本申请一个示例性实施例提供的一种生成数据库变更日志的流程示意图;
图7是本申请一个示例性实施例提供的一种应用处理方法的流程示意图;
图8a是本申请一个示例性实施例提供的一种数据库变更日志的内容示意图;
图8b是本申请一个示例性实施例提供的一种数据库变更日志执行的流程示意图;
图8c是本申请一个示例性实施例提供的一种分布式系统的示意图;
图9是本申请一个示例性实施例提供的一种应用处理装置的结构示意图;
图10是本申请一个示例性实施例提供的一种计算机设备的结构示意图。
具体实施方式
在本申请实施例中,应用软件可简称为应用,其可以理解成是一种可提供一种或多种业务服务的软件,此处的业务服务可以例如是登录服务、查询服务、权限管理服务等等,对此不作限定。针对任一应用而言,其均可持续地被维护开发,即开发人员可根据实际的业务服务变更需求(如新增业务服务的需求、修改或删除已有的业务服务的需求等),通过修改该任一应用的开发程序代码,实现该任一应用的业务服务变更处理,从而实现该任一应用的版本迭代更新。
考虑到任一应用在提供业务服务的过程中,通常会涉及一些数据库结构和预置数据的使用;所谓的预置数据是指预置在数据库中的数据,所谓的数据库结构是指数据库存储数据所使用的结构,其例如可以是表结构(如表格)、图结构(如有向图)、树结构(如二叉树)等中的任一种。例如,任一应用在提供车票购买服务时,需使用开发侧存储的车站名作为预置数据,可以使得对象使用车票购买服务时直接选择出发地和目的地,而无需手动输入;又如,当应用在提供学生信息查询功能时,学生希望能够查询到自己的书籍借阅数据,此时可修改数据库结构,即新增用于存储书籍借阅信息的字段,以供对象查询使用。因此,为了保证所开发的应用面向对象能够正常地提供业务服务,开发人员在开发环境中开发出某一应用后,还需根据该应用所提供的业务服务,进行数据库结构和预置数据的开发工作,以在向某对象交付该应用时,可同步将开发出的数据库结构和预置数据部署到该对象侧的数据库中,以变更该对象侧的数据库,使得该对象可基于变更后的数据库正常使用该应用所提供的业务服务。
为了更好地实现应用交付,本申请实施例提出了一种应用处理方案;该应用处理方案的大致原理如下:当开发人员在开发环境中开发出目标应用后,可先基于开发环境中的目标数据库的数据库结构和预置数据中的至少一项,验证目标应用所提供的业务服务是否可正常使用,若确定目标应用提供的业务服务可正常使用,则可确定目标应用满足交付条件。此时,可根据用于指示部署目标数据库时所执行的数据库变更操作的数据库变动信息,自动生成可支持对任一数据库执行目标数据库所涉及的数据库变更操作的数据库变更日志(如changeLog),并将该数据库变更日志和目标应用的开发程序代码一并发送给目标对象(交付需求所指示的对象),使得目标对象可通过在目标对象侧的数据库中执行该数据库变更日志,来实现在目标对象侧的数据库中重放开发人员针对开发环境中的目标数据库中所执行的数据库变更操作,从而实现将开发人员的数据库修改意图执行于目标对象侧的数据库中,以完成目标对象侧的数据库的变更,进而使得目标对象可结合变更后的数据库和目标应用的开发程序代码正常运行目标应用,从而使得目标对象可正常使用所提供的业务服务。
在具体实现中,上述所提及的应用处理方案可适用于如图1a所示的应用处理系统中。如图1a所示,该应用处理系统包括开发平台和交付系统,开发平台中包括至少一个开发设备11,交付系统中包括至少一个交付对象12和数据库13,开发设备11和交付对象12之间通过网络以有线或无线的方式建立通信连接。其中,开发设备11可以包括以下至少一项:用于提供可视化界面的终端设备以及服务器;交付对象12是指目标应用的交付需求所指示的对象,其可以是终端设备或服务器。此处提及的终端设备包括但不限于:智能手机、平板电脑、智能可穿戴设备、智能语音交互设备、智能家电、个人电脑、车载终端等等设备,本申请对此不作限制。对于终端设备的数量,本申请不做限制;此处提及的服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN(Content Deliver Network,内容分发网络)、以及大数据和人工智能平台等基础云计算服务的云服务器,但并不局限于此。
当将应用处理方案应用在图1a所示的应用处理系统中时,可先由该应用处理系统中的开发平台中的任一开发设备11基于开发环境中的目标数据库验证目标应用是否满足交付条件;并在确定目标应用满足交付条件后,获取目标数据库的数据库变动信息。其中,若开发设备是用于提供可视化界面的终端设备,则开发人员可通过该可视化界面执行目标应用有关的数据库结构的开发工作以及数据的预置工作,开发设备11可根据开发人员在可视化界面中的相关操作生成数据库变动信息。在得到数据库变动信息后,开发设备11可根据关于目标数据库的数据库变动信息执行数据库变更日志的生成操作,并采用数据库变更日志和目标应用的开发程序代码生成目标应用的交付程序包;其中,若开发程序代码位于代码仓库中,则开发设备11可将数据库变更日志推送至该代码仓库中,将开发程序代码和数据库变更日志一同打包得到交付程序包,如图1b所示。在开发设备生成交付程序包之后,可由运维人员借助于开发设备(例如终端设备)发起针对交付程序包的发送指令,从而将交付程序包发送给交付系统中的一个或多个交付对象12。任一交付对象12均可接收开发设备11发送目标应用的交付程序包,并在相应的数据库13中执行交付程序包中的数据库变更日志,以对相应数据库进行变更处理,从而基于变更后的数据库和交付程序包中的开发程序代码运行目标应用,从而使得目标对象正常使用所提供的业务服务。
经实践表明,本申请实施例所提出的应用处理方案可具有如下有益效果:
开发人员可借助于开发平台开发目标应用的数据库结构或预置数据,无需关心数据库的结构和数据在交付系统中的部署工作,当基于开发环境中的目标数据库对目标应用的验证满足交付条件之后,可获取数据库变更信息,并基于数据库变更信息自动化地生成数据库变更日志,无需开发人员手动编写用于变更数据库的数据库脚本。通过将数据库变更日志集成在交付程序包中,在交付程序包发送给目标对象之后,目标对象通过执行该数据库变更日志,可将开发人员在开发环境的数据库中所执行的数据库变更操作,在目标对象侧的数据库中进行重放,从而将预置数据和开发的数据库结构中的一种或多种自动化地部署在目标对象侧的数据库中,实现目标对象侧的数据库的变更,基于变更后的数据库和目标应用的开发程序代码可以使得目标应用的正常使用。这种自动化变更数据库的流程,人工介入较少,开发人员与运维人员可以实现解耦,从而可有效提高目标应用的交付效率以及数据库结构或数据的部署效率。
基于上述应用处理方案的相关描述,本申请实施例提出了一种应用处理方法。该应用处理方法可由图1a所示的开发设备中的终端设备或服务器执行,也可由开发设备中的终端和服务器共同执行;为便于阐述,后续均以计算机设备执行该方法为例进行说明,此处的计算机设备是开发设备中的终端设备或服务器。参见图2所示,该应用处理方法包括以下步骤S201-S204:
S201,在基于开发环境中的目标数据库验证目标应用满足交付条件后,获取关于目标数据库的数据库变动信息。
在本申请实施例中,目标应用可以是开发人员在开发环境中进行应用开发所得到的新应用,也可以是开发人员在开发环境中对历史开发出的应用进行版本更新所得到的应用,对此不作限定。并且,按照应用使用方式的划分,目标应用可以是免安装的应用,如网页应用或者小程序,也可以是要求安装的应用,例如需上线到应用商城以供对象下载的应用。按照应用开发架构的划分,目标应用可以是单体应用(只要有修改就需重新部署整个应用),也可以是若干个微服务构建而成的应用,一个微服务通常关注一个特定的业务服务,由于某个微服务有修改只需重新部署这个服务,而无需部署整个应用,通过微服务的架构可以使得目标应用的修改更加简单。
目标应用所涉及的开发环境中可包括一个或多个数据库,一个数据库可用于验证一种业务服务是否可正常使用;本申请实施例所提及的目标数据库是指:开发环境中当前用于验证目标应用所提供的目标业务服务是否可正常使用的数据库,其可以是对开发数据库(即开发环境中用于验证目标业务服务是否可正常使用的数据库)执行一系列的数据库变更操作所得到的。需要说明的是,当目标业务服务是首次开发出的业务服务时,此处提及的开发数据库可以理解成是一个空数据库;当目标业务服务是对历史开发出的业务服务进行更新得到的业务服务时,此处提及的开发数据库可以理解成是包含至少一个数据模型的数据库。此处提及的数据模型用于描述数据库结构,例如数据模型可以是关系模型,那么数据库结构是表结构。
在目标应用开发完成之后,计算机设备可以通过基于开发环境中的目标数据库验证目标应用提供的目标业务服务是否能够正常使用,来验证目标应用是否满足交付条件。具体的,若目标应用的目标业务服务能够正常使用,则可确定目标应用满足交付条件;否则,则确定目标应用不满足交付条件。举例来说,目标业务服务为学生信息查询服务,学生信息查询服务具体支持以学生的学号查询到关联的信息,包括姓名、课表、地址字段所记录的内容,对该学生信息查询服务的验证过程如下:首先可在目标数据库中存储某个学生S的信息,包括学号123、姓名S、课表K以及地址V,若输入学号123查询到姓名S、课表K以及地址V,则可确定该学生信息查询服务能够正常使用,继而确定目标应用满足交付条件,若输入学生S的学号无法查询到相应信息,则可确定该学生信息查询服务无法正常使用,即目标应用不满足交付条件。
应理解的是,目标业务服务是指目标应用提供的业务服务中,待验证的业务服务;目标业务服务的数量可以是1个或多个(即至少两个);当目标业务服务的数量为多个时,目标数据库的数量也为多个,一个目标数据库对应一个目标业务服务,此时的目标应用满足交付条件是指:根据各个目标数据库验证相应目标业务服务均能够正常使用。为便于阐述,后续均以目标业务服务和目标数据库的数量为1个进行示例性说明。
在确定目标应用满足交付条件之后,计算机设备可获取关于目标数据库的数据库变动信息,该数据库变动信息用于指示:部署目标数据库时所执行的数据库变更操作;也就是说,本申请实施例所提及的数据库变动信息可理解成是一种用于指示部署目标数据库时所执行的数据库变更操作的描述信息。例如数据库变动信息为:“创建数据表table1,并在数据表table1中新增字段A1、字段A2以及字段A3”,又例如:“删除数据表table2中的字段B”。数据库变动信息可基于可视化的编辑操作自动生成,且数据库变动信息可用于反映开发人员对数据库的数据库结构或者数据的修改意图。
其中,目标数据库的部署过程可以如下:先由开发人员根据目标应用所提供的目标业务服务进行数据库结构和预置数据的开发工作,计算机设备基于开发出的数据库结构和预置数据,对开发数据库执行数据库变更操作,从而实现目标数据库(即当前版本的开发数据库)的部署。
S202,根据数据库变动信息生成数据库变更日志。
在具体实现中,计算机设备可将数据库变动信息转换为符合数据库变更日志规范的操作语句,得到数据库变更日志,该数据库变更日志用于对任一数据库执行目标数据库所涉及的数据库变更操作。因此,当数据库变更日志在任一数据库中被执行时,可实现在该任一数据库中重放在开发环境中部署目标数据库所执行的数据库变更操作,从而实现对任一数据库的变更。
其中,上述提及的数据库变更日志具体可以是Liquibase进行版本管理的核心文件changeLog,其中,Liquibase是一种数据库脚本管理开源软件,可支持xml、json格式的changeLog,可以向数据库中执行changeLog,changeLog中已经执行过的内容不会被重复执行,changeLog是Liquibase中用来描述数据库变更记录的文件。数据库变更日志也可以是数据库脚本,数据库脚本可以包含原生关系型数据库脚本语言SQL(Structured QueryLanguage,结构化查询语言),其中,SQL可用于管理关系数据库管理系统(RelationalDatabase Management System,RDBMS),关系数据库管理系统是用于管理关系数据库并将数据逻辑进行组织的系统,例如管理具有关系(如相同主键)的表。SQL的操作范围包括数据插入、查询、更新和删除,数据库模型(如数据库表)创建和修改,以及数据访问控制。
进一步的,数据库变更日志中记录了变更至当前版本的开发数据库之前在各个版本的开发数据库中所执行的数据库变更操作。举例来说,目标应用是3.0版本的应用A,一个版本的应用A对应一个版本的开发数据库,那么数据库变更日志中包括开发1.0版本的应用A时部署1.0版本的开发数据库所执行的数据库变更操作、将1.0版本的应用A升级为2.0版本的应用B时在1.0版本的数据库中所执行的数据库变更操作(1.0版本的数据库变更为2.0版本的数据库)、以及将2.0版本的应用B升级为3.0版本的应用A时在2.0版本的数据库中所执行的数据库变更操作(2.0版本的数据库变更为3.0版本的数据库)。通过数据库变更日志记录在目标应用有关各个版本的开发数据库所执行全量的数据库变更操作,在目标应用不是首次研发的版本时,由于数据库变更日志记录了为部署至当前版本的开发数据库中所执行全量的数据库变更操作,从而保证目标应用在全新的交付环境中对相应数据库按照版本顺序依次变更,实现目标应用在全新的交付环境的目标对象中的成功部署。
S203,采用数据库变更日志和目标应用的开发程序代码,生成目标应用的交付程序包。
目标应用的开发程序代码用于实现目标应用提供的相应业务服务。当首次开发目标应用时,该开发程序代码是目标应用的全量开发程序代码;当对目标应用的版本进行升级时,通常涉及目标应用提供的业务服务的新增或者是升级,此时,该开发程序代码可以是在目标应用的原有开发程序代码基础之上新增了业务服务的开发程序代码的全量开发程序代码,也可以是仅新增或者升级业务服务所涉及的增量开发程序代码。开发程序代码和数据库变更日志可构建出目标应用的交付程序包,该交付程序包中包括数据库变更日志和编译后的开发程序代码。
S204,当向目标对象交付目标应用时,将交付程序包发送给目标对象,使目标对象在相应数据库中执行交付程序包中的数据库变更日志以变更相应数据库,并基于变更后的数据库和交付程序包中的开发程序代码运行目标应用。
目标应用可交付至公有化环境或者是一个对象的私有化环境中,公有化环境和私有化环境是为目标应用提供的生产环境(即面向对象的环境)。目标对象可以是公有化环境或者私有化环境中的一个设备(如服务器),用于开发目标应用的计算机设备可以将目标应用的交付程序包发送给目标对象,目标对象可启动交付程序包,通过执行交付程序包中的数据库变更日志可按照在开发环境中部署目标数据库所涉及的数据库变更操作,将为目标应用开发的数据库结构或者预置数据应用至交付的目标对象的相应数据库中,来变更相应数据库,相应数据库可以是目标对象所提供一个或多个业务数据库中目标应用指定链接的业务数据库。这样,目标应用有关的数据库变更可以在目标应用上线给对象使用之前被执行,目标对象基于变更后的数据库和交付程序包中的开发程序代码,保证目标应用的正常运行,从而使得目标对象可正常使用目标应用的一个或多个业务服务。
需要说明的是,目标应用可以交付给不同的目标对象,不同的目标对象可以是公有化环境中的设备和私有化环境中的设备的一种或多种。向各个目标对象交付目标应用都可按照上述流程执行,以变更相应数据库,并基于变更后的数据库和开发程序代码实现目标应用正常运行。
本申请实施例提供的应用处理方法,可先基于开发环境中的目标数据库对目标应用是否满足交付条件进行验证,并在确定目标应用满足交付条件之后,根据用于指示部署目标数据库时所执行的数据库变更操作的数据库变动信息,自动生成可支持对任一数据库执行目标数据库所涉及的数据库变更操作的数据库变更日志,并采用该数据库变更日志和目标应用的开发程序代码,生成目标应用的交付程序包,以使得当需向目标对象交付目标应用时,可以通过将该交付程序包发送给目标对象,来实现目标对象通过执行该交付程序包中的数据库变更日志,将部署目标数据库所执行的数据库变更操作,执行于目标对象侧的数据库中以更新目标对象侧的数据库,使得目标对象侧的更新后的数据库可具有与目标数据库相匹配的结构或数据,从而使得目标对象可基于变更后的数据库和交付程序包中的开发程序代码正常运行目标应用。这种自动化变更数据库的处理流程,可避免因人为手动变更而导致的不全面和不准确的问题,可有效提升应用交付的准确性和数据库变更的全面性;并且,由于整个处理流程可在开发人员与运维人员之间实现解耦,可有效提高目标应用的交付效率。
请参见图3,图3是本申请一个示例性实施例提供的一种应用处理方法的流程示意图。该方法可由计算机设备(例如图1a所示的开发设备)执行。该应用处理方法包括以下步骤S301-S305:
S301,在基于开发环境中的目标数据库验证目标应用满足交付条件后,获取关于目标数据库的数据库变动信息。
在一个实施例中,数据库变动信息包括:至少一条关于数据库结构的结构变动信息;数据库结构通过一个或多个数据模型进行描述,一个数据模型包括一个或多个数据字段。具体地,关于数据库结构的结构变动信息可用于指示部署数据库结构所执行的结构变更操作。结构变动信息是一种动态特征的功能描述,例如结构变动信息为:创建数据库表table1、删除数据库表table2。数据库结构可用于描述数据库的静态特征,例如数据的类型、内容、性质以及数据之间的联系等。数据模型也可称为数据库模型,可用于描述数据库结构,数据模型包括层次模型(以树结构表示数据之间的联系)、网状模型(以图结构表示数据之间的联系)、关系模型(以关系表来标识数据之间的联系)中的一种或多种。对应地,数据库结构可以是表结构、图结构以及树结构中的一种或多种。一个数据模型可以包括数据字段,一个数据字段可用于记录一种类型的数据,数据模型中的数据字段可以由开发人员针对目标应用的业务服务进行开发或定义。
计算机设备可以为开发人员搭建开发平台以对目标应用的业务服务所需的结构进行可视化开发或者数据进行预置,提供可视化界面对有关数据库结构的字段、索引等内容进行便捷地开发,并自动收集用于体现开发意图的数据库变动信息。可视化界面以完全图形化的方式使得开发人员不用编写任何数据库脚本,计算机设备基于开发人员在可视化界面中的操作即可生成数据库变动信息,进而生成数据库变更日志,通过数据库变更日志的执行最终实现相应数据库变更的目的。关于目标数据库的数据库变动信息可以基于在可视化界面中对数据库结构的设置来生成,具体可以包括以下实施方式:
(一)、通过在模型编辑界面中编辑模型字段生成结构变动信息。具体步骤包括①~③:
①显示关于目标数据库的模型编辑界面。
计算机设备可显示模型编辑界面,开发人员可在模型编辑界面中进行数据模型以及数据模型所需的数据字段的开发工作。由于模型编辑界面中所开发的数据模型以及数据字段是部署目标数据库(即当前版本的开发数据库)有关的内容,因此模型编辑界面是与目标数据库相关的。
模型编辑界面包括:用于编辑数据模型的模型编辑区域,以及用于编辑数据字段的字段编辑区域。在模型编辑区域中支持添加数据模型以及导入已有的数据模型,并对数据模型进行操作,在字段编辑区域中支持对数据模型的数据字段进行编辑,例如添加新的数据字段,为新添加的数据字段设置相应字段信息,对已有的数据字段的信息(如字段名称、字段类型、字段默认值等)进行修改等。
在一个实施例中,字段编辑区域包括如下至少一个子区域:用于修改字段信息的子区域、用于删除数据字段的子区域,以及用于新增数据字段的子区域。其中,字段信息是用于描述数据字段的属性的信息,字段信息包括以下至少一项:字段名称、字段属性描述信息、字段类型、字段默认值,以及用于约束字段的取值是否可为空的约束信息。举例来说,一个数据字段的字段信息包括:字段名称“name”,字段属性描述信息“学生姓名”,字段类型“varchar(10)”,初始默认值0,以及用于约束字段的取值为非空的约束信息。当一个数据字段被删除时,有关该数据字段的所有字段信息也同步地被删除,当新增一个数据字段时,有关数据字段的所有字段信息均需添加。字段信息可以给定数据模型中的数据以及其联系所具有的制约以及存储规则。
示例性地,请参见图4a所示的模型编辑界面。该模型编辑界面中包括模型编辑区域401和字段编辑区域402。模型编辑区域401中可添加数据对象(即数据模型)。例如添加名称为student的数据模型,进一步地,可以在字段编辑区域402中显示添加的数据模型student中已有的数据字段,并对添加的数据模型中的数据字段进行编辑,具体是编辑字段信息,例如修改字段的属性名称、字段名称、属性描述、字段的数据类型、字段的初始默认值等。其中,还包括用于修改字段信息的子区域403,以及用于操作数据字段的子区域404(包括用于删除数据字段的子区域以及用于新增数据字段的子区域)。
请参见图4b所示的用于修改字段信息的子区域。如图4b中的(1)所示,是用于修改字段类型的子区域,具体为数据类型设置子区域,在数据类型设置子区域中,字段类型可支持所有数据库支持的类型中任一种,并且可以设置字段类型的长度和精度,包括对原有长度和原有精度的修改,或者是添加字段类型的长度和精度。如图4b中的(2)所示,用于修改字段默认值的子区域为字段默认值设置子区域,在字段默认值设置子区域中,字段默认值支持无默认值、Null、表达式以及自定义值,当选择字段默认值为表达式时,可从预设的表达式中进行选择。如图4b所示用于修改字段类型的子区域可以是通过在字段编辑区域中对数据字段的类型或者是默认值进行编辑触发显示的,例如点击如图4a中的字段名为name对应的数据类型设置框,可显示图4b中的(1)的数据类型设置子区域。可见,通过设置子区域所提供的可选择项可给予开发人员全功能的数据库开发体验,且可兼容不同类型的数据库结构的开发工作,从而提高数据库结构开发的便捷性。
②在模型编辑区域中获取关于数据模型的编辑操作,以及在字段编辑区域中获取关于数据字段的编辑操作。
编辑操作包括以下至少一项:新增操作、删除操作和修改操作。在模型编辑区域中关于数据模型的编辑操作可以是对数据模型的新增操作、删除操作、修改操作中的任一种,在字段编辑区域中关于数据字段的编辑操作可以是对数据字段的新增操作、删除操作、修改操作中的任一种,其中关于数据字段的修改操作可包括:对字段名称、字段属性描述信息、字段类型、字段默认值,以及用于约束字段的取值是否可为空的约束信息等属性的修改操作。借助于模型编辑界面可以完成对一个或多个数据模型以及每个数据模型的数据字段的编辑操作,从而便捷地实现对数据模型以及数据模型所需字段的开发工作。
③分别根据获取到的各个编辑操作,生成相应的结构变动信息。
一个编辑操作对应一条结构变动信息。计算机设备基于在模型编辑区域中关于数据模型的一个编辑操作可生成一条结构变动信息,例如新增数据模型,该结构变动信息:创建数据模型M1。计算机设备基于在字段编辑区域中关于数据字段的一个编辑操作对应一条结构变动信息,例如添加数据字段A,那么结构变动信息为:在数据模型M1中新增一个数据字段A。在一种实现方式中,每个编辑操作都对应有操作信息,该操作信息可用于指示对数据模型或者数据字段所执行的编辑操作,能够体现对数据模型或者数据字段的变更意图(包括删除、修改、新增),从而依据该操作信息以及所操作的数据可生成相应的结构变动信息。
在一个可行的实施例中,模型编辑界面还可包括:用于设置数据模型的索引的索引设置区域,任一数据模型的索引用于对相应数据模型中的数据字段进行搜索处理。索引是对数据库管理系统中用于排序的数据库结构,通过为数据模型设置(通常是数据库表)相应的索引,查询数据时无需读完数据库表中的所有信息,而只是查询索引,可对数据库表特定信息进行快速访问,加快检索数据库表中的数据。例如数据模型M1的索引是基于数据模型M1中的数据字段A设置的,那么基于该索引可在数据模型M1中直接找到数据字段A,进一步得到数据字段A所在数据行的数据。关于目标数据库的数据库变动信息的生成方式还可以是:在索引设置区域中获取关于索引的编辑操作,并根据在索引设置区域中获取到的各个编辑操作,生成相应的结构变动信息。
计算机设备允许在索引编辑区域中对数据模型的索引进行编辑操作,该编辑操作可以是添加操作、删除操作、修改操作。通过添加操作可新增索引,通过删除操作可删除已设置的索引,通过修改操作可对索引信息(包括索引类型、索引字段、索引说明等)进行更改。在一种实现方式中,索引设置区域中包括用于设置索引信息的子区域以及用于对索引进行编辑操作的子区域。在用于设置索引信息的子区域支持单字段索引(在单个字段上创建索引)、多字段的联合索引(多个字段组成的索引),还可支持普通索引(最基本的索引,没有任何约束限制)、唯一索引(具有唯一性约束,可保证数据库表中一行数据的唯一性)。在用于对索引进行编辑操作的子区域中支持添加新的索引或者删除原有的索引。通过索引设置界面可为开发人员提供可视化界面进行数据模型的索引的开发工作,提高开发的便捷性。在一种实现方式中,计算机设备基于在索引设置界面关于索引的编辑操作对应的操作信息以及所操作的数据内容,可生成结构变动信息。举例来说,为数据库表student的数据字段A设置索引,索引字段名称和数据字段名称相同,操作信息为添加索引,操作的数据内容包括数据库表student的数据字段A,结构变动信息可以为:为名称为student的数据库表创建索引名称为A的索引。
示例性地,如图4c所示的另一种模型编辑界面,该模型编辑界面中包括模型编辑区域431以及索引设置区域432,索引设置区域432中包括数据对象名称Student,数据对象描述student以及数据表名称student,该数据对象具体是数据表,两者名称所表达的含义相同。在索引设置区域432中,索引字段可以选择数据表student中的任一字段作为索引字段,索引类型支持普通索引和唯一索引,索引说明可根据索引字段进行定义。在当前索引设置区域中,为数据表student设置了索引字段name,该索引字段的索引类型为普通索引,以及索引说明“学生姓名”。索引设置区域432中包括用于设置索引信息的子区域4321以及用于对索引进行编辑操作的子区域4322。
在一种实现方式中,索引设置区域和字段编辑区域支持同时显示在模型编辑界面中,在另一种实现方式中,索引设置区域和字段编辑区域可通过模型编辑界面中的页签进行切换。示例性地,如前述图4c所示的模型编辑界面,是“索引”的页签被选中时所显示的包括索引设置区域的模型编辑界面,当“数据字段”的页签被选中时,可将模型编辑界面中的索引设置区域切换为字段编辑区域,模型编辑区域不变,例如显示如图4b所示的包括字段编辑区域的模型编辑界面。通过页签对不同功能编辑区域进行切换显示,可以快速且高效地展示相应功能编辑区域。
(二)、通过在数据编辑界面中的选择操作生成数据变动信息。
目标数据库是对开发数据库进行更新得到的,开发数据库是空数据库或者是包含至少一个数据模型的数据库。当目标应用的目标业务服务是首次开发的业务服务(例如首次开发目标应用或者是在目标应用中新增业务功能)时,开发数据库可以理解成是一个空数据库,目标数据库是对空数据库进行更新得到的当前版本(或者说最新版本)的开发数据库,即更新后的开发数据库;当目标应用的目标业务服务是对历史开发出的业务服务进行更新得到的业务服务时,开发数据库中可包含至少一个数据模型,至少一个数据模型可以是历史版本的目标应用开发时所设置的,目标数据库是对该包含至少一个数据模型的开发数据库进行更新得到的。开发数据库可对应一个影子数据库,影子数据库是对所述开发数据库进行模拟得到的数据库。也即是说,影子数据库的数据库结构和开发数据库的数据库结构相同,且影子数据库中的数据和开发数据库中的数据相同。在一个实施方式中,计算机设备可在一个数据库中执行部署开发数据库时所执行的数据库变更操作,从而得到影子数据库。进一步地,计算机设备可在影子数据库中执行基于结构变动信息生成的结构信息库变更日志,得到最新的数据库结构,之后,再在开发数据库中执行该结构信息变更日志,得到包含最新的数据库结构的开发数据库,即此处的目标数据库。
在开发环境的数据库中,通常会存储一些通用数据供目标应用开发完成之后进行添加,在交付给目标对象时目标对象可将这些通用数据直接部署至目标对象侧的相应数据库。预置数据是在各个环境中部署目标应用时都会部署的通用数据,是预先存储在开发数据库中的,当目标应用交付给不同交付环境中时,预置数据的设置避免了为不同交付环境中的数据库进行额外的预置数据的部署工作,减少人工成本。举例来说,例如开发购票服务系统,可以预先将各个车站信息预置在该购票服务系统内,当对象使用该购票服务系统购买车票时,无需手动填入信息,而是在购票服务系统直接选择目的地或出发地。这样不仅可以十分高效便捷,还可以避免由于手动录入的地点而产生脏数据。当一个车站的名称变更或者可能新增车站时,可以先将开发数库中存储的有关车站的数据进行变更,从而得到包含更新后的预置数据的目标数据库,然后在影子数据库中变更得到最新的数据库结构之后,通过影子数据库与目标数据库的比较可将数据变更的执行包含于数据库变更日志中,目标对象在相应数据库中执行该数据库变更日志,实现预置数据自动化地部署。
数据库变动信息包括:至少一条关于数据库中的数据的数据变动信息。该数据变动信息可用于描述在目标数据库中预置数据的变更。该变更可以是新增、修改、删除中的任一种或多种。此处关于数据库中数据的变动是由于开发环境中的数据库中的数据的变更导致的。本申请中在一个版本的目标应用的开发任务完成后,经过当前版本的开发数据库验证之后,可以在开发平台上进行发版工作,发版过程中开发平台可提供对版本添加预置数据的功能。通过在数据编辑界面中对数据的编辑操作可生成数据变动信息,具体以下步骤包括①~④:
①显示关于目标数据库的数据编辑界面。
数据编辑界面包括:用于选择数据模型的模型选择区域,以及数据对比区域。数据模型选择区域中可以通过输入数据模型的名称来选择数据模型,也可以通过勾选已显示的数据模型的名称来选择,数据对比区域中可以将同一个数据模型在影子数据库和当前版本的开发数据库中的数据进行比对显示。通过比对显示可以直观地得知开发数据库中的数据对应的变更。
②根据在模型选择区域中检测到的模型选择操作,从目标数据库所包含的数据模型中确定被选择的目标数据模型。
开发人员可以在数据选择区域中选择需要处理的数据模型,计算机设备可以检测待模型选择区域中的模型选择操作,该模型选择操作可指示所选择的数据模型的信息,例如数据模型的名称,基于模型选择操作可以从目标数据库包含的数据模型中确定目标数据模型,以便于获取目标数据模型中的数据并在数据比对区域中进行展示;此处提及的目标数据模型可以是新开发的数据模型,对此不作限定。
③确定目标数据模型在目标数据库中所包含的各条目标数据,以及目标数据模型在影子数据库中所包含的各条历史数据。
为了保证数据比对的准确性,通常在数据比对之前,会将新开发的数据模型更新至影子数据库,此时影子数据库和目标数据库均包含最新的数据模型,而影子数据库由于还未执行数据变更,其中包含的是旧数据,目标数据库(即当前版本的开发数据库)中包含的是最新的数据,最新的数据可由开发人员手动添加或者通过开发环境程序写入。这样,影子数据库中包含的旧数据即作为数据比对的历史版本的数据源,此处目标数据模型也存在于影子数据库中,该目标数据模型在目标数据库和影子数据库中的结构是相同的,目标数据模型在目标数据库中所包含的各条目标数据是最新的数据,目标数据模型在影子数据库中所包含的各条历史数据是旧数据,即目标数据库更新之前所包含的数据。
当目标应用是首次开发时,目标数据模型在影子数据库中的历史数据为空数据,目标数据模型在当前版本的开发数据库中包含最新添加的数据。示例性地,请参见图4d所示的数据编辑界面,数据编辑界面440包括模型选择区域441以及数据比对区域442,模型选择区域441中选择的数据模型student,将历史版本的数据和当前版本的数据展示在数据比对区域442中,在数据对比区域442的左侧为历史版本的数据展示区域,该展示区域中显示了数据库结构,对应的数据为空,即表示影子数据库中的历史数据为空,数据对比区域的右侧展示有当前版本的开发数库中的4条地址数据。
目标数据的数量和历史数据的数量可以相同或不同,例如对目标数据模型中的某条历史数据进行删除之后,得到目标数据模型在目标数据库中的目标数据的数量比原来少一条。
④在数据对比区域中,逐行显示各条目标数据和各条历史数据;其中,具有同一数据标识的目标数据和历史数据被显示在同一行。
在数据比对区域中可以按照数据标识对目标数据和历史数据进行组织显示,具有相同数据标识的目标数据可显示在同一行,然后可按照数据标识的顺序逐行显示各条目标数据和各条历史数据。在一个实施例中,步骤④的具体实现方式包括:按照同一数据标识的目标数据和历史数据需位于同一行的数据构建策略,采用各条目标数据和各条历史数据构建待显示的多行数据;针对待显示的任一行数据,根据任一行数据中的各条数据之间的差异,确定任一行数据的数据变动情况;根据数据变动情况和显示样式之间的对应关系,确定与任一行数据的数据变动情况对应的显示样式;在数据对比区域中,采用确定出的显示样式显示任一行数据中的各条数据。
根据数据构建策略可以构建待显示的多行数据,按照数据构建策略构建的一行数据可以包括相同数据标识的一条目标数据和一条历史数据,也可以仅包括一条目标数据(新增目标数据),还可以仅包括一条历史数据(删除历史数据)。这是对开发数据库中的数据进行不同的数据库变更操作带来的。待显示的任一行数据中目标数据和历史数据之间存在差异,这个差异可以是相同数据标识的目标数据和历史数据不同,也可以是一个数据标识对应存在目标数据而不存在历史数据,或者是一个数据标识对应存在历史数据而不存在目标数据,这样可以得知任一行数据的数据变动情况,该数据变动情况用于指示一个数据标识下历史数据的变更。数据变动情况可以是未变更、修改、删除以及增加中的任一种。一种数据变动情况可对应一种显示样式,不同数据变动情况有不同的显示样式,可预先设置数据变动情况和显示样式之间的对应关系,基于该对应关系对于待显示的每一行数据的数据变动情况均可确定出对应的显示样式,从而在数据比对区域中按照确定出的显示样式来显示该行数中的历史数据和目标数据。其中,显示样式可用于直观地表示数据变动情况。在一种可行的方式中,显示样式可以是颜色,例如无色表示数据无变化,黄色表示数据被修改,粉色表示数据被删除,绿色表示新增的数据。在另一种可行的方式中,显示样式也可以是字体格式,如加粗字体表示数据被修改,斜体字体表示数据删除,正常字体表示数据无变化,字体下划线表示数据新增。显示样式也可以是对一行数据标记的图案等,在此对显示样式不做限制。示例性地,如图4e所示的另一种数据编辑界面,在数据编辑界面包含的数据对比区域中通过不同的填充图案来显示相应的数据库变更操作,包括未变更、修改、删除以及增加操作。通过不同的显示样式区分不同数据变动的情况,可以将数据变动情况以可视化地方式更加直观地展示给开发人员,以快速地选择已变更的数据。
进一步地,当数据对比区域中无法全部展示所有数据时,可通过翻页按钮进行翻页或者是通过侧边滑动栏进行滑动显示新的数据。在数据比对区域中可设置用于仅展示存在数据变动的数据的功能按钮,当该功能按钮被触发,一行数据中未变更的历史数据和目标数据可以被隐藏,而只需显示存在数据变动的历史数据和目标数据,这样在选择数据时无需手动筛选,直接选择即可。
⑤在数据对比区域中选中至少一行数据,并根据被选中的各行数据分别生成相应的数据变动信息,一行数据对应一条数据变动信息。
在数据对比区域中被选中的一行数据可以是存在数据变动的数据,计算机设备根据被选中的一行数据可以生成一个数据变动信息,例如被选中的数据是新增的目标数据,那么该数据变动信息为:在目标数据模型中插入目标数据。这样,被选中的一行数据可以生成与该行数据对应的数据变动情况匹配的数据变动信息。若被选中M行数据,那么可以生成M条数据变动信息。可选地,可为每行数据提供选择操作标识(例如勾选框)供开发人员进行选择,数据无变化的行可以不设置该选择操作标识(例如勾选框)或者选择操作标识不支持被操作,当开发人员勾选该选择操作标识时则代表需要将被选择的一行数据包含在当前版本的目标应用中并发布,也即确认需要将数据由历史版本向目标版本进行更改。当所需处理的全部数据模型处理完毕之后,点击完成按钮提交保存即可自动化地生成数据变动信息。示例性地,如前述图4e所示的数据编辑界面,在发版(即版本发布)过程中,在数据比对区域所显示的一行数据提供一个勾选框,当前勾选的3条变更数据包括新增的D城市,删除A城市以及将B城市修改为B1城市,在数据比对区域选择的变更数据的数量可以同步地显示在模型选择区域对应的模型标识周围。当点击完成按钮之后,可提交所勾选的一行数据,基于开发数据库的数据变更生成数据变动信息,基于数据变动信息添加预置数据。可以理解的是,上述方式生成的数据库变动信息可以在需要时被获取。
可见,通过可视化界面可以向开发平台传递需要变动的数据库结构或者是需要变动的数据库的数据,开发平台依据提交的数据库结构变动信息和/或数据变动信息作为基础,将这些数据库变动信息经过校验、处理、组织、记录后,为后续数据库以及目标应用的部署与执行做好准备。这种完全图形化的方式可以使得开发人员不用编写任何脚本,开发人员只需提交在可视化界面中对数据库所作出的变动,就能够基于数据库变动信息自动生成数据库变更日志,并由目标对象进行一系列自动化地执行、部署等工作,降低由于人工整理数据库脚本的出错概率,提高交付效率和部署效率。
数据库变更信息(包括数据库的结构变更信息和/或数据变更信息)可通过一种文本格式进行承载,本申请中通过数据库变更日志承载。在一种实施例中,根据数据变更信息生成数据库变更日志的实现方式可以采用如下S302和S303所介绍的方式。
S302,根据操作类型和操作语句模板之间的对应关系,获取与数据库变更信息指示的数据库变更操作的操作类型对应的操作语句模板。
一种数据库变更操作对应一种操作类型,操作类型例如是创建数据库表、新增数据字段、新增数据等,一种操作类型对应一种操作语句模板,操作语句模板是用于对数据库执行变更操作的预设语句格式。相同操作类型的数据库变更操作可使用相同的操作语句模板,即便不同数据库变更信息,只要数据库变更信息所指示的数据库变更操作的操作类型相同,对应的操作语句模板就可以相同。举例来说,一条数据库变动信息为新增数据A、另一条数据库变动信息为新增数据B,那么获取到的操作语句模板均可以用于插入数据的操作语句模板,只是操作语句模板中所需补充的信息内容不同。
S303,基于获取到的操作语句模板和数据库变动信息生成数据库变更日志。
通过数据库变更日志可对任一数据库执行目标数据库所涉及的数据库变更操作。在一种可行的实现方式中,数据库变动信息包括M条子信息,M为正整数,一条子信息用于指示一个数据库变更操作;其中,M条子信息中的任一条子信息为关于数据库结构的结构变动信息,或者关于数据库中的数据的数据变动信息;任一操作语句模板包括:一个或多个空白字段,一个空白字段用于填充一个数据。获取到的数据库变动信息可以包括结构变动信息和数据变动信息中的任一种或两种,该结构变动信息和数据变动信息均可以是基于开发人员在相应地可视化界面进行编辑操作或者选择操作生成的。由于可视化界面可提供一站式数据库结构等内容的开发工作,数据库变动信息可以包括至少一条子信息,对应为部署目标数据库所执行的至少一个数据库变更操作。操作语句模板中包括的空白字段是待填充的字段。例如插入数据的操作语句模板可以是:inserttablename=“(待填充)”,columnname=“(待填充)”,value=“(待填充)”。
数据库变动信息的子信息中包含对应操作语句模板填充所需的数据,S303的具体实现步骤包括:遍历获取数据库变动信息包括的各条子信息,将当前遍历的子信息确定为目标子信息;从获取到的操作语句模板中,筛选出与目标子信息所指示的数据变更操作的操作类型对应的操作语句模板;根据目标子信息对筛选出的操作语句模板中的各个空白字段进行填充处理,得到目标操作语句;在数据库变动信息包括的各条子信息均被遍历后,对得到的各个目标操作语句进行组合处理,得到数据库变更日志。
计算机设备在遍历M条子信息之前,可获取N个操作语句模板,N为小于或等于M的正整数。这N个操作语句模板对应M条子信息所指示的数据库变更操作所涉及的N种操作类型,相同操作语句模板可以提供给不同的子信息(所指示的数据库变更的操作类型相同)使用。对于当前遍历的子信息,可从N个操作语句模板中筛选当前遍历的子信息所指示的数据库变更操作的操作类型对应的操作语句模板,然后依据目标子信息所包含的数据对操作语句模板中的空白字段进行填充,得到填充后的操作语句模板,即最终生成的目标操作语句。当不同子信息所指示的数据库变更操作对应操作的数据不同时,即便操作类型相同以支持使用相同操作语句模板,不同子信息也会生成不同的目标操作语句。举例来说,一条子信息描述的是:在数据库表table1中添加新的地址Y,另一条子信息描述的是:在数据库表table2中添加新的车站K,那么操作语句模板均可以使用:insert tablename=“(待填充)”,column name=“(待填充)”,value=“(待填充)”。前者对应的目标操作语句为:insert tablename=“table1,column name=“address”,value=“Y”,后者对应的目标操作语句为:insert tablename=“table2”,column name=“station”,value=“K”。通过遍历数据库变动信息中的各条子信息,可以对每一条子信息都按照对目标子信息的处理流程执行,从而得到各条子信息分别对应的目标操作语句。在M条子信息均被遍历之后,就可以对得到的M个目标操作语句进行组合,从而构建出数据库变更日志。需要说明的是,若目标应用是对版本的升级,那么数据库变更日志中除了目标操作语句之外,还包括历史版本的目标应用所产生的数据库变动信息对应的历史操作语句,通过将各个版本的目标应用所执行的所有数据库变更操作记录在数据库变更日志中,为部署目标数据库执行的所有数据库变更操作都可以在交付的目标对象侧的相应数据库中执行,从而保证目标应用的成功部署。
在一种实现方式中,计算机设备对关于同一数据库结构的结构变动信息,或者是关于数据库中相同数据模型中数据的数据变动信息,可以将对应的目标操作语句整合一个变更日志片段,例如对数据模型M1插入数据D1、D2、D3,对应的目标操作语句可以合成一个变更日志片段。再例如创建数据库表table1,并在数据库表table1中添加数据字段A、B、C,对应的目标操作语句也可合成一个变更日志片段。通过目标操作语句的合成可提高减少冗余的操作语句,提高数据库变更日志的执行速度。
进一步地,在当前遍历的子信息确定为目标子信息之后,为了保证关于数据库结构设计的合法性,还可以执行以下内容:当目标子信息为结构变动信息时,根据信息内容和合法性校验策略之间的对应关系,采用相应的合法性校验策略对目标子信息中的信息内容进行合法性校验;若目标子信息通过合法性校验,则触发执行从获取到的操作语句模板中,筛选出与目标子信息所指示的数据变更操作的操作类型对应的操作语句模板的步骤。
具体地,在目标子信息为结构变动信息的条件下,还可以对目标子信息中的信息内容进行合法性校验,以保证数据库变更日志的合法性。子信息包含的信息内容是子信息所指示的数据库变更操作所操作的数据。信息内容例如是字段类型、字段默认值、索引等,对信息内容的合法性校验包括但不限于:字段类型合法性校验、字段默认值合法性校验、字段类型转换安全性校验、索引合法性校验等。当目标子信息为结构变动信息时,目标子信息的信息内容可能包括多种,对目标子信息的合法性校验可以是多重合法性校验,即对各种信息内容均进行合法性校验。不同的信息内容可采用不同的合法性校验策略,该合法性校验策略是一种用于指示对应信息内容的校验规则。具体可以包括以下内容:
(1)在信息内容为字段类型时,针对修改字段类型所采用的合法性校验策略可包括以下一种或多种:确认字段类型是否允许修改、修改字段类型的长度精度时小数点前后是否都大于原始值、默认值是否合法(即是否允许无默认值)、索引是否合法(即修改后的字段是否允许添加索引或需要长度)、整行数据长度校验(计算全部字段长度是否超过MySQL最大长度)。
(2)在信息内容为索引,针对添加索引所采用合法性校验策略包括以下任一种或多种:字段是否支持添加索引、索引是否需要长度、唯一索引需要与字段一起添加,否则无法处理数据。举例来说,若字段不支持添加索引,而在索引设置时为其添加了索引,则表示索引设置不合法。
(3)字段删除时所采用合法性校验策略可以是:存在索引时索引需要同步修改或先删除索引。
(4)设置默认值时所采用的合法性策略包括以下一种或多种:是否允许添加自定义默认值(text/blob/json不允许添加自定义默认值)、默认值是否与字段类型匹配、默认值长度精度是否与字段类型匹配、默认值为NULL时不能非空约束。
(5)在特殊情况下,合法性校验策略还包括以下一种或多种:timestamp(时间戳)非空时必须有默认值、datetime(日期时间值)可以非空无默认值。
(6)对于非空约束所采用的合法性策略可包括以下一种或多种:添加非空约束时需要空数据的修改值(空数据修改值是否合法,规则可参考设置默认值时所采用的合法性策略)、默认值不能为空。
根据信息内容和合法性校验策略之间的对应关系可确定出目标子信息对应的合法性校验策略,并基于该对应的合法性校验策略对目标子信息的信息内容进行校验。若目标子信息通过合法性校验,则说明开发人员所做的操作是合法的,从而可以触发执行从获取到的操作语句模板中,筛选出与目标子信息所指示的数据变更操作的操作类型对应的操作语句模板的步骤,最终得到数据库变更日志。若目标子信息未通过合法性校验,说明开发人员所做的至少一部分操作是不合法的,从而不支持生成数据库变更日志。
可选地,对于子信息的合法性校验的启动可以是在模型编辑界面中点击确认提交之后所执行的内容,计算机设备可以对提交的结构变动信息进行初步的保存以进行合法性校验,若目标子信息未通过合法性校验,则可以在模型编辑界面中输出保存失败的提示信息,该保存失败的提示信息可用于提示未通过合法性校验的具体信息内容,以便于开发人员依据该提示信息快速定位,无需人工地分析不合法内容,从而高效地进行修改。
数据库变更日志可以是开源工具Liquibase支持的changLog。其中,Liquibase是一个用于管理和应用数据库变化的开源的数据库重构工具。它将所有数据库的变化(包括结构和数据)都保存在XML(Extensible Markup Language,可扩展标记语言)文件中,便于对数据库的版本进行控制。Liquibase具有以下功能:①不依赖于特定的数据库,目前支持包括Oracle、Sql Server、DB2、MySql、Sybase、PostgreSQL、Caché等12种数据库,这样在数据库的部署和升级环节可帮助目标应用支持多数据库。②提供数据库比较功能,比较结果保存在XML文件中,基于该XML文件你可用Liquibase轻松部署或升级数据库。③以XML文件存储数据库变化,其中以作者和ID唯一标识一个变化(ChangSet),支持数据库变化的合并,因此支持多开发人员同时工作。④在数据库中保存数据库修改历史(DatabaseChangeHistory),在数据库升级时自动跳过已应用的变化(ChangSet)。⑤提供变化应用的回滚功能,可按时间、数量或标签(tag)回滚已应用的变化。通过这种方式,开发人员可轻易的还原数据库在任何时间点的状态。⑥可生成数据库修改文档(HTML格式)。⑦提供数据重构的独立的IDE(Integrated Development Environment,集成开发环境)和Eclipse插件(开发应用所需的工具),集成开发环境是用于提供程序开发环境的应用程序。
在另一种实施方式中,根据数据变更信息生成数据库变更日志的方式也可以是:将数据库变更信息直接转换为原生关系型数据库语言,基于原生关系型数据库语言构建出一个数据库脚本,并将构建的数据库脚本作为数据库变更日志。
S304,采用数据库变更日志和目标应用的开发程序代码,生成目标应用的交付程序包。
S305,当向目标对象交付目标应用时,将交付程序包发送给目标对象,使目标对象在相应数据库中执行交付程序包中的数据库变更日志以变更相应数据库,并基于变更后的数据库和交付程序包中的开发程序代码运行目标应用。
本申请实施例提供的应用处理方法,可以通过提供可视化界面进行数据库结构和预置数据的便捷开发,包括通过模型编辑界面便捷地设置数据库结构,通过数据编辑界面可添加预置数据,从而生成数据库变动信息(包括结构变动信息和数据变动信息中的任一种或两种),通过可视化界面可避免传统的数据库脚本的编写工作,方便开发人员进行开发,可以极大地提高研发效率。在验证所开发的目标应用之后,基于获取到的数据库变动信息可自动化地生成数据库变更日志,具体可由计算机设备判别数据库变动信息所指示的数据库变更操作的操作类型,并获取对应的操作语句模板,得到目标操作语句,进而生成数据库变更日志。整个过程无需人工编写用于维护数据库版本的数据库脚本,而是基于操作模板和数据库变动信息自主地生成用于数据库变更日志,由目标对象将数据库变更日志执行于相应数据库中,实现将数据库结构和数据在相应数据库中的自动化部署,目标对象侧的更新后的数据库可具有与目标数据库相匹配的结构或数据,从而使得目标对象可基于变更后的数据库和交付程序包中的开发程序代码正常运行目标应用。
请参见图5,图5是本申请一个示例性实施例提供的一种应用处理方法的流程示意图。该方法可由计算机设备(例如图1a所示的开发设备)执行。该应用处理方法包括以下步骤S501-S507:
S501,在基于开发环境中的目标数据库验证目标应用满足交付条件后,获取关于目标数据库的数据库变动信息。
S502,根据数据库变动信息生成数据库变更日志。
在一个实施例中,目标数据库是对开发数据库进行更新得到的,开发数据库是空数据库或者是包含至少一个数据模型的数据库。当目标应用提供的业务服务是首次开发的业务服务(例如首次开发目标应用或者是在目标应用中新增业务功能)时,开发数据库是空数据库,目标数据库是对空数据库进行更新得到的当前版本(或者说最新版本)的开发数据库;当目标应用提供的业务服务是待升级的业务服务(可能是对已提供业务服务的优化)时,开发数据库中可包含至少一个数据模型,至少一个数据模型可以是历史版本的目标应用开发时所设置的,目标数据库是对该包含至少一个数据模型的开发数据库进行更新得到的。
S503,确定用于验证数据库变更日志的影子数据库。
影子数据库是对开发数据库进行模拟得到的数据库。影子数据库可以视为开发平台侧的开发数据库的副本,即影子数据库的数据库结构和开发数据库的数据库结构相同,且影子数据库中的数据和开发数据库中的数据相同。影子数据库可用于体现工程最新的数据库结构。在影子数据库中可通过执行数据库变更日志来变更影子数据库,以验证数据库变更日志的可用性,预先验证可避免直接在交付侧中执行失败而产生不必要的资源浪费。
S504,利用数据库重构工具在影子数据库中执行数据库变更日志,以变更影子数据库,得到变更结果。
为了对任一数据库的正确变更,计算机设备可以通过在影子数据库中执行数据库变更日志来验证数据库变更日志。并且,计算机设备在影子数据库中执行数据库变更日志还能够对用于指示数据库变更操作的数据库变更信息的合法性进行进一步验证,这样就与合法性校验构成了对信息内容的双重验证,如果在合法性校验阶段存在一些信息内容通过合法性校验但并不是真正地合法,那么可以通过在影子数据库中执行来进一步验证,在验证通过时才在数据库中执行数据库变更日志,实现目标数据库的成功变更,从而避免变更失败需回滚数据库而导致的资源浪费。
利用数据库重构工具可以将新生成的数据库变更日志执行于影子数据库中,数据库重构工具是用于变更数据库版本的工具,该数据库重构数据例如是开源工具Liquibase。通过在影子数据库中执行数据库变更日志可变更影子数据库,得到变更结果,该变更结果可指示影子数据库是否变更成功,从而可验证数据库结构的变动或者是数据的变动是否正确。
数据库变更日志可以包括由关于数据库结构的结构变动信息生成的变更日志,也可以包括由关于数据库中的数据的数据变动信息生成的变更日志,还可以包括基于结构变动信息生成的变更日志以及数据变动信息生成的变更日志。若数据库变动信息是基于关于数据库结构的结构变动信息生成的,则在影子数据库中模拟的是数据库结构的变更,若数据库变动信息是基于关于数据库中的数据的数据变动信息生成的,那么在影子数据库中模拟的是数据库中数据的变更。
S505,根据变更结果对数据库变更日志进行可用性检测。
变更结果可用于指示数据库变更日志在影子数据库中的执行是否异常,从而对数据库变更日志的可用性进行检测,此处的可用性是指数据库变更日志是否可被使用在数据库中以正确地执行数据库变更操作。
在一个可行的实施例中,S505的具体实现方式可以是:若变更结果指示数据库变更日志的执行过程出现异常,则确定数据库变更日志未通过可用性检测;若变更结果指示数据库变更日志的执行过程未出现异常,则对变更后的影子数据库和目标数据库进行一致性匹配;若一致性匹配成功,则确定数据库变更日志通过可用性检测,若一致性匹配失败,则确定数据库变更日志未通过可用性检测。
若变更结果指示数据库变更日志在影子数据库中执行的过程出现异常,例如出现错误提示,说明数据库变更日志执行失败,数据库变更日志未通过可用性检测,若变更结果指示数据库变更日志在影子数据库中正常执行,说明数据库变更日志是成功执行的,可以进一步将变更后的影子数据库和目标数据库一致性匹配,此处一致性匹配具体是匹配的两个数据库之间的数据是否一致。例如目标数据库中包括新添加的预置数据和历史的预置数据,影子数据库中包括历史的预置数据,数据库变更日志在影子数据库中执行后对于数据的变动是否准确,可通过更新后的影子数据库中所包含的预置数据与目标数据库中所包含的预置数据的比对确定。如果变更后的影子数据库和目标数据库是一致的,说明数据变更是正确的,进而可以确定数据库变更日志通过可用性检测。并在数据库变更日志通过可用性检测后,触发执行S506,并通过执行S507将目标应用交付给目标对象,实现对目标对象侧的数据库的变更。
通过这样的方式,可以将开发者无法预料到的交付环境中各种具体执行情况进行全面地考量,开发平台形成一种约定(即对于开发者提供的数据库模型和/或数据的变更自动生成数据库变更日志并加入至交付程序包中)使得整个交付过程可以不依赖于开发人员,仅仅由运维人员进行部署即可。恰恰就是这种约定,开发人员使用开发平台进行数据库模型和/或数据的编辑,开发平台通过自身技术手段(包括检查、验证、组织)保证开发者的操作可以得到正确的执行,
S506,采用数据库变更日志和目标应用的开发程序代码,生成目标应用的交付程序包。
在一个实施例中,目标应用的开发程序代码存储在代码仓库中。代码仓库用于管理有关目标应用的各个业务服务的开发程序代码。即不同开发人员所负责开发或升级的业务服务的开发程序代码都可以推送至代码仓库进行管理或共享给其他开发人员,代码仓库中包括完整的目标应用的开发程序代码。S506的可选实现方式可以是:将数据库变更日志推送至代码仓库,并在代码仓库中对开发程序代码进行编译处理,得到编译后的开发程序代码;对数据库变更日志和编译后的开发程序代码进行打包处理,以得到目标应用的交付程序包。
数据库变更日志生成并经过验证通过(即在数据库变更日志在影子数据库中执行成功)之后,计算机设备可以将数据库变更日志推送到用于管理目标应用的开发程序代码的代码仓库中,在代码仓库中对目标应用的开发程序代码进行编译,得到编辑后的开发程序代码,可以是可执行的代码文件,再将数据库变更日志与编译后的开发程序代码一同打包为交付程序包,交付程序包中包含数据库变更日志。目标应用的开发程序代码可能位于某个版本管理工具(如Git、SVN)中。
对于以上方案内容,通过可视化界面生成数据库变更日志的流程可参见图6,具体包括模型结构(即数据库结构)的变更流程以及模型数据(即数据库中的数据)的变更流程。对于模型结构的变更流程包括:开发人员通过可视化编辑数据模型之后,计算机设备可通过开发平台针对开发人员所做的操作进行合法性校验,在校验通过之后,通过开发平台可合成用于体现执行数据库变更操作的数据库变更日志,并在影子数据库中执行该数据库变更日志,在执行成功之后可将数据库变更日志推送至代码仓库中。对于模型数据的变更流程包括:开发人员通过可视化操作可以勾选新版本需要包含的数据变更,该数据变更是由目标数据库和影子数据库进行比对得到的,保存后可将数据变更合成为数据库变更日志,在影子数据库上执行该数据库变更日志,并在执行成功后将数据库变更日志推送至代码仓库中。
通过将数据库变更日志推送至代码仓库中,可以将数据库变更日志和目标应用的开发程序代码打包到一起进行部署,通过数据库变更日志的执行,在部署目标应用的开发程序代码之前,自动对数据库进行变更,而不用花费额外的资源对目标应用所需交付的目标对象侧的数据库进行变更。由于不同的交付场景可能包括目标应用的初次部署或者目标应用的升级,不论交付环境是全量部署还是增量升级,都不再需人工梳理需要执行的用于变更数据库的数据库操作语言(如SQL语句),数据库操作语言的执行工作集成在交付程序包中(包括数据库变更日志),将由交付程序包在启动过程中自动对比执行未执行的数据库操作语言,这样可以极大的减少运维人员工作,也降低了传统执行数据库操作语言发生错误的概率。
S507,当向目标对象交付目标应用时,将交付程序包发送给目标对象,使目标对象在相应数据库中执行交付程序包中的数据库变更日志以变更相应数据库,并基于变更后的数据库和交付程序包中的开发程序代码运行目标应用。
计算机设备可响应于运维人员所触发的发送指令,向目标对象交付目标应用,具体可将交付程序包发送给目对象,目标对象可以是交付程序包需要交付的环境(即目标交付环境)中的一个设备(例如服务器),该交付程序包可在服务器上启动,交付程序包中的数据库变更日志可被自动执行,完成目标交付环境中的数据库的变更。
需要说明的是,由于目标应用的开发和部署并不是在一个环境中执行的,目标交付环境中的数据库变动并非实时执行,因此本申请对目标应用的交付是一种离线交付。此外,本申请所提供的应用处理方案可应用于云开发平台,也可应用于本地开发工具中,在数据库开发、交付解耦方面有优异的表现。
本申请实施例所提供的应用处理方案,通过对关于数据库结构的结构变动信息进行合法性验证,可以保证开发工作的准确性。将基于结构变动信息生成的数据库变更日志,以及基于数据变动信息生成的数据库变更日志,均可执行于影子数据库中,验证数据库变更日志的可用性,以便于在交付给目标对象时,使得目标对象在相应数据库中执行该数据库变更日志,成功地变更相应数据库,实现对数据库的自动化且正确地部署。此外,通过将数据库变更日志打包至交付程序包中,可以使得数据库操作语言的执行工作集成在交付程序包中,将由交付程序包在启动过程中自动对比,确定出未执行的数据库操作语言并自动执行,这样可以极大的减少运维人员工作,也降低了传统执行数据库操作语言发生错误的概率。
请参见图7,图7是本申请一个示例性实施例提供的一种应用处理方法的流程示意图。该方法可由目标对象(例如图1a所示的交付对象)执行。在一个实施例中,数据库变更日志包括一条或多条目标操作语句,一条目标操作语句用于执行一个数据库变更操作。目标操作语句的生成过程可以参见前述的实施例对于数据库变更日志的生成方式的介绍,在此不做赘述。在交付程序包发送给目标对象之后,目标对象可在相应数据库中执行交付程序包中的数据库变更日志,具体是在相应数据库中执行目标操作语句来变更相应数据库。相应数据库可以是部署在目标对象中的业务数据库,也可是部署在目标对象所属交付环境的其他设备中的业务数据库。若目标操作语句是基于结构变动信息和对应的操作语句模板生成的,则在相应数据库执行该目标操作语句可实现对相应数据库的结构的变更,若目标操作语句是基于数据变动信息和对应的操作语句模板生成的,则在相应数据库执行该目标操作语句可实现对相应数据库的数据的变更。目标对象在相应数据库中执行交付程序包中的数据库变更日志的过程包括以下步骤S701-S703:
S701,获取为目标应用配置的数据库链接,并基于数据库链接获取相应数据库的执行记录表。
在开发人员对目标应用开发完毕之后,计算机设备可以将目标应用的开发程序代码经过编译后,与数据库变更日志打包构建形成交付程序包。该交付程序包可以存储在开发平台中,也可以通过对开发平台链接一个运维平台,将交付程序包先发送至该运维平台中,运维人员可以在该运维平台中将交付程序包上传至目标交付环境,目标交付环境可以是私有化环境或者公有化环境,然后为目标应用配置数据库链接,该数据库链接可用于指示目标交付环境中业务数据库的地址,通过数据库链接可连接到业务数据库进行相应处理,例如变更业务数据库、在运行目标应用时从业务数据库中读取数据或将目标应用产生的数据存储至业务数据库中。目标对象可获取配置好的数据库链接,并响应于启动指令启动交付程序包。在交付程序包的启动过程中,首先可以基于数据库链接从该数据库链接所指示的数据库中获取执行记录表。执行记录表用于指示在相应数据库中已执行的数据库变更操作,已执行的数据库变更操作是通过数据库变更日志的执行实现的。当目标应用是首次开发且首次交付给目标对象时,执行记录表中不包含数据库变更日志在相应数据库中的执行记录。当目标应用涉及对某个已有业务的升级且非首次交付时,由于数据库变更日志会包含历史版本的目标应用所关联的数据库结构变更和/或数据变更对应的目标操作语句,执行记录表中包含数据库变更日志中的部分执行记录。
S702,根据执行记录表从数据库变更日志中筛选出待执行的目标操作语句。
目标对象在获取到执行记录表之后,可通过数据库变更日志和执行记录表之间的比对,确定数据库变更日志在相应数据库中未执行的目标操作语句,未执行的目标操作语句均是等待被执行的目标操作语句,因此可其作为待执行的目标操作语句。待执行的目标操作语句所对应的数据库变更操作未被执行记录表指示。执行记录表可能为空,说明数据库变更日志中的所有目标操作语句均是待执行的目标操作语句,执行记录表不为空,说明数据库变更日志中部分目标操作语句是已被执行的,一部分是待执行的目标操作语句。
在一个实施例中,数据库变更日志包括一个或多个日志片段以及每个日志片段的片段标识,一个日志片段包括基于同一个操作语句模板所生成的各条目标操作语句;其中,执行记录表包括一个或多个已执行的日志片段的片段标识。
一个日志片段中包括的多条目标操作语句可用于执行相同操作类型的数据库变更操作。每个日志片段的片段标识具有唯一性,以区别不同的日志片段。数据库变更日志可以是changeLog文件,对应的,日志片段是changeLog文件中的changeSet,一个changeLog由多个changeSet组成。各个changeSet的执行顺序自上而下,且已经执行过的changeSet可以跳过。片段标识可以是changeSet的ID。示例性地,如图8a所示的数据库变更日志的内容示意图,其中包括3个changeSet,第一个changeSet包括创建数据库表的目标操作语句,第二个changeSet包括创建索引的目标操作语句,第三个changeSet包括插入数据的目标操作语句。
S702的可选实施方式可以是:根据执行记录表中的各个片段标识,从数据库变更日志中筛选出有效片段标识,有效片段标识是指未位于执行记录表中的片段标识;将有效片段标识所对应的日志片段中的各个目标操作语句,确定为待执行的目标操作语句。具体地,执行记录表中记录的各个日志片段的片段标识是已执行的日志片段的片段标识,而数据库变更日志中包含全量的日志片段的片段标识,因此可通过比对片段标识,从数据库变更日志中筛选出未被执行的日志片段的片段标识作为有效片段标识,有效片段标识是执行记录表中未记录的片段标识。有效片段标识所对应的日志片段中的各个目标操作语句可确定为待执行的目标操作语句。
S703,在数据库链接对应的数据库中执行待执行的目标操作语句,以变更相应数据库。
目标对象可以通过在数据库链接对应的数据库中执行待执行的目标操作语句,来变更数据库链接对应的数据库。目标对象在相应数据库中将待执行的目标操作语句都执行完毕之后,即完成数据库的变更。该目标对象可以是分布式环境(包括多台服务器,目标应用部署在至少两台服务器上)中的一台服务器,目标对象在相应数据库中对待执行的目标操作语句的执行没有完成时,其他服务器进入阻塞状态,等待待执行的目标操作语句完成之后,其他服务器就可直接启动目标应用。
在一个可行的实施方式中,目标操作语句可能不是相应数据库可识别的数据库操作语言,为了能够准确地执行数据库变更,可以将待执行的目标操作语言翻译为相应数据库能够识别的数据库操作语言,例如SQL语句,并在相应数据库中执行翻译之后的数据库操作语言,实现数据库的变更。S703的具体实现步骤可以包括:调用翻译工具并根据数据库链接对应的数据库所支持的语言格式,将待执行的目标操作语句翻译为与相应数据库适配的目标数据库操作语言;在数据库链接对应的数据库中,执行目标数据库操作语言。
不同类型的数据库存在不同的数据库方言,即数据库所支持的语言格式不同,目标操作语句可以按照数据库链接对应的数据库所指示的语言格式进行翻译,将其转换为相应数据库能够识别的目标数据库操作语言,并在相应数据库中执行该目标数据库操作语言,来变更数据库链接对应的数据库。
在数据库变更日志为changeLog时,该翻译工具可以是Liquibase工具中的翻译功能模块,可以将changeLog翻译为具体执行sql。每个changeSet都可以被翻译为一条或多条SQL语句,可能是DDL(Data Definition Language,数据定义语言,用于对数据库中的某些对象(例如,database,table)进行管理,如Create,Alter和Drop)语句,也可能DML(DataManipulation Language,数据操纵语言,用于对数据库中的数据进行一些简单操作,如insert、delete、update、select等)语句。这些SQL语句都是数据库链接所指示的数据库能够识别的SQL语句,可在数据库中执行SQL语句实现对数据库的变更。在数据库变更日志为原生关系型数据库脚本时,该数据库脚本中包含的就是SQL语句,但由于不同的数据库有自己的数据库方言,在一些表达上可能略微存在差别,因此,即便是SQL语句可能也有数据库不能识别的内容,因此也可以按照上述的流程处理,从而使得处理后的SQL语句与相应数据库进行适配,以成功地完成数据库的变更。
在一个实施例中,目标对象还可以:在执行任一目标操作语句后,根据被执行的目标操作语句更新执行记录表。具体地,可以在任一目标操作语句被执行后,在执行记录表中添加用于指示对应数据库变更操作被执行的执行记录。可选地,当一个日志片段中包含的目标操作语句被执行之后,可以将日志片段的片段标识记录在执行记录表中,即更新后的执行记录表包括该日志片段的片段标识。在数据库变更日志的所有目标操作语句在相应数据库中被执行完毕并将执行记录写入到执行记录表中之后,表示数据库变更完成,交付程序包启动成功。目标应用的开发程序代码可以按需部署到一个或多个目标对象中,从而各目标对象可基于变更后的数据库和开发程序代码运行目标应用。
在一个实施例中,交付程序包还包括目标代码语句。该目标代码语句是用于启动数据库重构子程序的代码语句,可以在打包交付程序包时添加至该交付程序包中的。目标对象在获取到数据库链接之后,还用于从交付程序包中获取目标代码语句,并通过执行目标代码语句启动数据库重构子程序。其中,执行记录表的获取操作、待执行的目标操作语句的筛选操作以及待执行的目标操作语句的执行操作、执行记录表的更新操作,均是由启动后的数据库重构子程序驱动执行的。也就是说,数据库重构子程序启动之后,首先可查询相应数据库中的执行记录表,然后通过比对数据库变更日志和执行记录可得到待执行的目标操作语句,并将待执行的目标操作语句翻译为相应数据库可识别的目标数据库操作语言,在相应数据库中执行该目标数据库操作语言,并将执行记录写入执行记录表。整个过程中,数据重构子程序可调用数据库重构工具(如Liquibase工具),执行比对、目标操作语句的翻译等工作。
对于以上内容,可参见图8b所示的数据库变更日志执行的流程示意图。运维人员可在目标对象中部署目标应用的业务服务,首先可启动主程序(即交付程序包),然后由主程序启动数据库重构子程序(具体是主程序中用于启动数据库重构子程序的目标代码语句启动),然后子程序可以从业务数据库中获取执行记录表,查询执行记录,根据执行记录(例如片段标识)从数据库变更日志中筛选出需要执行的变更内容(由待执行的目标操作语句指示),然后执行数据库变更日志,在执行时自动跳过已执行的变更内容,而将待执行的目标操作语句翻译为数据库操作语句,在业务数据库中执行,对于相应目标操作语句的执行记录可写入执行记录表中,在数据库变更日志中被执行完毕时,即代表交付程序包启动完成。对于执行记录表的查询、比对、数据库变更日志的执行的过程是受分布式锁保护的,这样可以防止多实例并行处理同一个数据库变更日志,避免不可预料的错误。对于分布式锁设置的详细内容可参见下述实施例的介绍。
在一个实施例中,目标应用可以在目标交付环境中分布式地部署,目标交付环境中包括P个(至少两个)设备(例如服务器),目标应用的一个业务服务可以部署到P个设备的至少两个设备中,这样在接收到海量的针对一个业务服务的请求时,可以由不同的设备分担响应的压力,并且在一个设备宕机时,另一个部署有相同业务服务的设备可以作为支撑设备。在分布式系统部署下,目标对象是目标交付环境中的其中一个设备,目标交付环境中的各个设备共享一个数据库,且目标交付环境中的各个设备均支持接收目标应用的交付程序包,并根据交付程序包变更相应的数据库。示例性地,如图8c所示的分布式系统的示意图,目标交付环境中包含4个服务器,其中3个服务器接收到交付程序包,即目标应用所提供的业务服务可同时部署在3个服务器,剩余的服务器中可部署业务数据库。服务器80、服务器81以及服务器82可以共同使用服务器83中的业务数据库,并且可以在业务数据库中执行数据库变更日志来变更业务数据库。
由于交付程序包中包含数据库变更日志,各个设备启动交付程序包时均会执行以上步骤S701-S703,而各个设备中的数据库变更日志是相同的,数据库变更日志被执行一次即可对数据库进行正确变更,在分布式系统多实例(即多个设备)同时启动的场景下,要保证各个设备对数据库变更日志进行串行化执行,避免至少两个设备在同一时刻同时执行数据库变更日志所带来的错误。因此,对数据库变更日志的比对、执行、记录等过程可以设置分布式锁,例如通过将子程序放在分布式锁保护的代码块中,可以保证此部分操作在分布式系统多实例同时启动的场景中能够串行化执行,而不会出现两个服务实例(运行业务服务的设备)同时执行同一个数据库变更日志的情况,避免不可预料的错误发生。分布式锁例如redis锁、zookeeper锁、consul锁或者数据库锁,在此不做限制。
在一种实现方式中,目标对象在获取到执行记录表之后,采用分布式锁对执行记录表进行加锁处理,且在相应数据库中执行待执行的目标操作语句后,对执行记录表进行解锁处理,以使目标交付环境中除目标对象以外的其他设备在执行记录表被解锁后,成功获取执行记录表。
目标环境中的各个设备可以同时向相应数据库请求获取执行记录表,在目标对象获取到执行记录表之后,通过分布式锁对执行记录表进行加锁处理,执行记录表处于锁定状态,目标交付环境中除目标对象以外的其他设备获取执行记录表的线程处于阻塞状态,从而无法使用该执行记录表实现相应数据库的变更操作。在执行记录表被解锁之后,执行记录表处于解锁状态,目标交付环境中除目标对象以外的其他设备可成功获取执行记录表,并直接启动目标应用。这是因为分布式环境下,获取到锁的一台设备可在相应数据库中完整地执行数据库变更日志中待执行的内容,而未获取到锁的其他设备在此过程中将阻塞,待获取到锁之后,由于数据库变更日志中待执行的内容都被执行了,因此其他设备可直接启动目标应用而不执行数据库变更日志。
具体可参见图8c所示的内容,部署有目标应用的多个服务器均请求获取执行记录表,在服务器80从服务器83中的业务数据库中成功获取到执行记录表之后,执行记录表被锁定,服务器81、服务器82获取执行记录表的线程处于阻塞状态。
需要说明的是,在其他设备获取到执行记录表之后,也可以采用分布式锁对执行记录表进行加锁处理。当相应数据库所在的设备与目标对象是不同的设备时,目标对象可以从相应数据库所在的设备获取执行记录表,并且可以将翻译好的目标数据库语言发送给数据库所在的设备,以在相应数据库中执行的目标数据库操作语言,完成对相应数据库的变更。变更后的数据库和目标应用的开发程序代码可用于共同支撑目标应用的正常运行。
本申请实施例提供的应用处理方案,可以由目标对象在相应数据库中执行数据库变更日志,具体是基于获取到的执行记录表筛选出待执行的目标操作语句,并将其翻译为相应数据库可识别的目标数据库操作语言,通过在相应数据库中执行目标数据库操作语言,实现对数据库变更日志的执行,由于对相应数据库不支持识别的数据库操作语言也支持按照数据库对应的语言格式进行翻译,调整为相应数据库可识别的数据库操作语言,这样可使得数据库变更日志在数据库中执行的准确性。对于数据库变更日志的自动化执行、比对,可实现对数据库的自动化变更。此外,对于数据库变更日志的执行过程设置了分布式锁,基于分布式锁可以使得分布式部署的目标应用,在多个服务实例同时启动时串行化执行数据库变更日志,从而保证相应数据库的正确变更。
请参见图9,图9是本申请一个示例性实施例提供的一种应用处理装置的结构示意图。上述应用处理装置可以是运行于计算机设备(如上述开发设备)中的一个计算机程序(包括程序代码),例如该应用处理装置为一个应用软件;该应用处理装置可以用于执行本申请实施例提供的方法中的相应步骤。如图9所示,该应用处理装置900可以包括以下至少一种:获取模块901、生成模块902、发送模块903、校验模块904以及检测模块905。
获取模块901,用于在基于开发环境中的目标数据库验证目标应用满足交付条件后,获取关于目标数据库的数据库变动信息;数据库变动信息用于指示:部署目标数据库时所执行的数据库变更操作;
生成模块902,用于根据数据库变动信息生成数据库变更日志,数据库变更日志用于对任一数据库执行目标数据库所涉及的数据库变更操作;
生成模块902,还用于采用数据库变更日志和目标应用的开发程序代码,生成目标应用的交付程序包;
发送模块903,当向目标对象交付目标应用时,将交付程序包发送给目标对象,使目标对象在相应数据库中执行交付程序包中的数据库变更日志以变更相应数据库,并基于变更后的数据库和交付程序包中的开发程序代码运行目标应用。
在一个实施例中,数据库变动信息包括:至少一条关于数据库结构的结构变动信息;数据库结构通过一个或多个数据模型进行描述,一个数据模型包括一个或多个数据字段;获取模块901,还用于:显示关于目标数据库的模型编辑界面,模型编辑界面包括:用于编辑数据模型的模型编辑区域,以及用于编辑数据字段的字段编辑区域;在模型编辑区域中获取关于数据模型的编辑操作,以及在字段编辑区域中获取关于数据字段的编辑操作,编辑操作包括以下至少一项:新增操作、删除操作和修改操作;分别根据获取到的各个编辑操作,生成相应的结构变动信息,一个编辑操作对应一条结构变动信息。
在一个实施例中,字段编辑区域包括如下至少一个子区域:用于修改字段信息的子区域、用于删除数据字段的子区域,以及用于新增数据字段的子区域;其中,字段信息包括以下至少一项:字段名称、字段属性描述信息、字段类型、字段默认值,以及用于约束字段的取值是否可为空的约束信息。
在一个实施例中,模型编辑界面还可包括:用于设置数据模型的索引的索引设置区域,任一数据模型的索引用于对相应数据模型中的数据字段进行搜索处理;获取模块901,还用于:在索引设置区域中获取关于索引的编辑操作,并根据在索引设置区域中获取到的各个编辑操作,生成相应的结构变动信息。
在一个实施例中,目标数据库是对开发数据库进行更新得到的,开发数据库是空数据库或者是包含至少一个数据模型的数据库,开发数据库对应一个影子数据库,影子数据库是对开发数据库进行模拟得到的数据库;数据库变动信息包括:至少一条关于数据库中的数据的数据变动信息;生成模块902,还用于:显示关于目标数据库的数据编辑界面,数据编辑界面包括:用于选择数据模型的模型选择区域,以及数据对比区域;根据在模型选择区域中检测到的模型选择操作,从目标数据库所包含的数据模型中确定被选择的目标数据模型;确定目标数据模型在目标数据库中所包含的各条目标数据,以及目标数据模型在影子数据库中所包含的各条历史数据;在数据对比区域中,逐行显示各条目标数据和各条历史数据;其中,具有同一数据标识的目标数据和历史数据被显示在同一行;在数据对比区域中选中至少一行数据,并根据被选中的各行数据分别生成相应的数据变动信息,一行数据对应一条数据变动信息。
在一个实施例中,生成模块902,还用于:按照同一数据标识的目标数据和历史数据需位于同一行的数据构建策略,采用各条目标数据和各条历史数据构建待显示的多行数据;针对待显示的任一行数据,根据任一行数据中的各条数据之间的差异,确定任一行数据的数据变动情况;根据数据变动情况和显示样式之间的对应关系,确定与任一行数据的数据变动情况对应的显示样式;在数据对比区域中,采用确定出的显示样式显示任一行数据中的各条数据。
在一个实施例中,生成模块902,还用于:根据操作类型和操作语句模板之间的对应关系,获取与数据库变更信息指示的数据库变更操作的操作类型对应的操作语句模板;基于获取到的操作语句模板和数据库变动信息生成数据库变更日志,数据库变更日志用于对任一数据库执行目标数据库所涉及的数据库变更操作。
在一个实施例中,数据库变动信息包括M条子信息,M为正整数,一条子信息用于指示一个数据库变更操作;其中,M条子信息中的任一条子信息为关于数据库结构的结构变动信息,或者关于数据库中的数据的数据变动信息;任一操作语句模板包括:一个或多个空白字段,一个空白字段用于填充一个数据;生成模块902,还用于:遍历获取数据库变动信息包括的各条子信息,将当前遍历的子信息确定为目标子信息;从获取到的操作语句模板中,筛选出与目标子信息所指示的数据变更操作的操作类型对应的操作语句模板;根据目标子信息对筛选出的操作语句模板中的各个空白字段进行填充处理,得到目标操作语句;在数据库变动信息包括的各条子信息均被遍历后,对得到的各个目标操作语句进行组合处理,得到数据库变更日志。
在一个实施例中,将当前遍历的子信息确定为目标子信息之后,校验模块904,用于:当目标子信息为结构变动信息时,根据信息内容和合法性校验策略之间的对应关系,采用相应的合法性校验策略对目标子信息中的信息内容进行合法性校验;若目标子信息通过合法性校验,则触发执行从获取到的操作语句模板中,筛选出与目标子信息所指示的数据变更操作的操作类型对应的操作语句模板的步骤。
在一个实施例中,目标数据库是对开发数据库进行更新得到的,开发数据库是空数据库或者是包含至少一个数据模型的数据库;检测模块905,用于:确定用于验证数据库变更日志的影子数据库,影子数据库是对开发数据库进行模拟得到的数据库;利用数据库重构工具在影子数据库中执行数据库变更日志,以变更影子数据库,得到变更结果;根据变更结果对数据库变更日志进行可用性检测,并在数据库变更日志通过可用性检测后,触发执行采用数据库变更日志和目标应用的开发程序代码,生成目标应用的交付程序包的步骤。
在一个实施例中,检测模块,具体用于:若变更结果指示数据库变更日志的执行过程出现异常,则确定数据库变更日志未通过可用性检测;若变更结果指示数据库变更日志的执行过程未出现异常,则对变更后的影子数据库和目标数据库进行一致性匹配;若一致性匹配成功,则确定数据库变更日志通过可用性检测,若一致性匹配失败,则确定数据库变更日志未通过可用性检测。
在一个实施例中,目标应用的开发程序代码存储在代码仓库中;生成模块902,用于:将数据库变更日志推送至代码仓库,并在代码仓库中对开发程序代码进行编译处理,得到编译后的开发程序代码;对数据库变更日志和编译后的开发程序代码进行打包处理,以得到目标应用的交付程序包。
在一个实施例中,数据库变更日志包括一条或多条目标操作语句,一条目标操作语句用于执行一个数据库变更操作;目标对象在相应数据库中执行交付程序包中的数据库变更日志的过程包括:获取为目标应用配置的数据库链接,并基于数据库链接获取相应数据库的执行记录表,执行记录表用于指示在相应数据库中已执行的数据库变更操作;根据执行记录表从数据库变更日志中筛选出待执行的目标操作语句,待执行的目标操作语句所对应的数据库变更操作未被执行记录表指示;在数据库链接对应的数据库中执行待执行的目标操作语句,以变更相应数据库;
其中,目标对象还用于:在执行任一目标操作语句后,根据被执行的目标操作语句更新执行记录表。
在一个实施例中,数据库变更日志中包括一个或多个日志片段以及每个日志片段的片段标识,一个日志片段包括基于同一个操作语句模板所生成的各条目标操作语句;其中,执行记录表包括一个或多个已执行的日志片段的片段标识;根据执行记录表从数据库变更日志中筛选出待执行的目标操作语句,包括:根据执行记录表中的各个片段标识,从数据库变更日志中筛选出有效片段标识,有效片段标识是指未位于执行记录表中的片段标识;将有效片段标识所对应的日志片段中的各个目标操作语句,确定为待执行的目标操作语句。
在一个实施例中,在数据库链接对应的数据库中执行待执行的目标操作语句,包括:调用翻译工具并根据数据库链接对应的数据库所支持的语言格式,将待执行的目标操作语句翻译为与相应数据库适配的目标数据库操作语言;在数据库链接对应的数据库中,执行目标数据库操作语言。
在一个实施例中,交付程序包还包括目标代码语句;目标对象在获取到数据库链接之后,还用于从交付程序包中获取目标代码语句,并通过执行目标代码语句启动数据库重构子程序;其中,执行记录表的获取操作、待执行的目标操作语句的筛选操作以及执行操作、执行记录表的更新操作,均是由启动后的数据库重构子程序驱动执行的。
在一个实施例中,目标对象是目标交付环境中的其中一个设备,目标交付环境中的各个设备共享一个数据库,且目标交付环境中的各个设备均支持接收目标应用的交付程序包,并根据交付程序包变更相应的数据库;其中,目标对象在获取到执行记录表之后,采用分布式锁对执行记录表进行加锁处理,且在相应数据库中执行待执行的目标操作语句后,对执行记录表进行解锁处理,以使目标交付环境中除目标对象以外的其他设备在执行记录表被解锁后,成功获取执行记录表。
可以理解的是,本申请实施例所描述的应用处理装置的各功能模块的功能可根据上述方法实施例中的方法具体实现,其具体实现过程可以参照上述方法实施例的相关描述,此处不再赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。
请参见图10,是本申请实施例提供的一种计算机设备的结构示意图。如图10所示,该计算机设备可以是终端设备,也可以是服务器,具体可以包括输入设备1001、输出设备1002、处理器1003、存储器1004、网络接口1005和至少一个通信总线1006。其中:处理器1003可以是中央处理器(Central Processing Unit,CPU)。处理器还可以进一步包括硬件芯片。上述硬件芯片可以是专用集成电路(Application-Specific Integrated Circuit,ASIC),可编程逻辑器件(Programmable Logic Device,PLD)等。上述PLD可以是现场可编程逻辑门阵列(Field-Programmable Gate Array,FPGA),通用阵列逻辑(Generic Array Logic,GAL)等。
存储器1004可以包括易失性存储器(Volatile Memory),例如随机存取存储器(Random-Access Memory,RAM);存储器1004也可以包括非易失性存储器(Non-VolatileMemory),例如快闪存储器(Flash Memory),固态硬盘(Solid-State Drive,SSD)等;存储器1004可以是高速RAM存储器,也可以是非不稳定的存储器(Non-volatile Memory),例如至少一个磁盘存储器。存储器1004可选的还可以是至少一个位于远离前述处理器1003的存储装置。存储器1004还可以包括上述种类的存储器的组合。如图10所示,作为一种计算机可读存储介质的存储器1004中可以包括操作系统、网络通信模块、用户接口模块以及设备控制应用程序。
网络接口1005可以包括标准的有线接口、无线接口(如WI-FI接口),该网络接口作为通信接口,可用于提供数据通信功能;通信总线1006负责连接各个通信元件;输入设备1001接收用户输入的指令,以产生与终端设备的用户设置以及功能控制有关的信号输入,在一个实施例中,输入设备1001包括但不限于触控面板、物理键盘或虚拟键盘(Keyboard)、功能键、鼠标等中的一种或多种;输出设备1002用于输出数据信息,在本申请实施例中输出设备1002可用于显示模型编辑界面、数据编辑界面等,输出设备1002可以包括显示屏(Display)或其他显示设备;处理器1003是终端设备的控制中心,由各种接口和线路连接整个终端设备的各个部分,通过调度运行存储在存储器1004中的计算机程序,执行各种功能。
其中,处理器1003可以用于调用存储器中的计算机程序,以执行如下操作:
在基于开发环境中的目标数据库验证目标应用满足交付条件后,获取关于目标数据库的数据库变动信息;数据库变动信息用于指示:部署目标数据库时所执行的数据库变更操作;根据数据库变动信息生成数据库变更日志,数据库变更日志用于对任一数据库执行目标数据库所涉及的数据库变更操作;采用数据库变更日志和目标应用的开发程序代码,生成目标应用的交付程序包;当向目标对象交付目标应用时,将交付程序包发送给目标对象,使目标对象在相应数据库中执行交付程序包中的数据库变更日志以变更相应数据库,并基于变更后的数据库和交付程序包中的开发程序代码运行目标应用。
在一个实施例中,数据库变动信息包括:至少一条关于数据库结构的结构变动信息;数据库结构通过一个或多个数据模型进行描述,一个数据模型包括一个或多个数据字段;处理器1003,具体用于:显示关于目标数据库的模型编辑界面,模型编辑界面包括:用于编辑数据模型的模型编辑区域,以及用于编辑数据字段的字段编辑区域;在模型编辑区域中获取关于数据模型的编辑操作,以及在字段编辑区域中获取关于数据字段的编辑操作,编辑操作包括以下至少一项:新增操作、删除操作和修改操作;分别根据获取到的各个编辑操作,生成相应的结构变动信息,一个编辑操作对应一条结构变动信息。
在一个实施例中,字段编辑区域包括如下至少一个子区域:用于修改字段信息的子区域、用于删除数据字段的子区域,以及用于新增数据字段的子区域;其中,字段信息包括以下至少一项:字段名称、字段属性描述信息、字段类型、字段默认值,以及用于约束字段的取值是否可为空的约束信息。
在一个实施例中,模型编辑界面还可包括:用于设置数据模型的索引的索引设置区域,任一数据模型的索引用于对相应数据模型中的数据字段进行搜索处理;处理器1003,具体用于:在索引设置区域中获取关于索引的编辑操作,并根据在索引设置区域中获取到的各个编辑操作,生成相应的结构变动信息。
在一个实施例中,目标数据库是对开发数据库进行更新得到的,开发数据库是空数据库或者是包含至少一个数据模型的数据库,开发数据库对应一个影子数据库,影子数据库是对开发数据库进行模拟得到的数据库;数据库变动信息包括:至少一条关于数据库中的数据的数据变动信息;处理器1003,具体用于:通过输出设备1002显示关于目标数据库的数据编辑界面,数据编辑界面包括:用于选择数据模型的模型选择区域,以及数据对比区域;根据在模型选择区域中检测到的模型选择操作,从目标数据库所包含的数据模型中确定被选择的目标数据模型;确定目标数据模型在目标数据库中所包含的各条目标数据,以及目标数据模型在影子数据库中所包含的各条历史数据;在数据对比区域中,逐行显示各条目标数据和各条历史数据;其中,具有同一数据标识的目标数据和历史数据被显示在同一行;在数据对比区域中选中至少一行数据,并根据被选中的各行数据分别生成相应的数据变动信息,一行数据对应一条数据变动信息。
在一个实施例中,处理器1003,具体用于:按照同一数据标识的目标数据和历史数据需位于同一行的数据构建策略,采用各条目标数据和各条历史数据构建待显示的多行数据;针对待显示的任一行数据,根据任一行数据中的各条数据之间的差异,确定任一行数据的数据变动情况;根据数据变动情况和显示样式之间的对应关系,确定与任一行数据的数据变动情况对应的显示样式;在数据对比区域中,采用确定出的显示样式显示任一行数据中的各条数据。
在一个实施例中,处理器1003,具体用于:根据操作类型和操作语句模板之间的对应关系,获取与数据库变更信息指示的数据库变更操作的操作类型对应的操作语句模板;基于获取到的操作语句模板和数据库变动信息生成数据库变更日志,数据库变更日志用于对任一数据库执行目标数据库所涉及的数据库变更操作。
在一个实施例中,数据库变动信息包括M条子信息,M为正整数,一条子信息用于指示一个数据库变更操作;其中,M条子信息中的任一条子信息为关于数据库结构的结构变动信息,或者关于数据库中的数据的数据变动信息;任一操作语句模板包括:一个或多个空白字段,一个空白字段用于填充一个数据;在一个实施例中,处理器1003,具体用于:遍历获取数据库变动信息包括的各条子信息,将当前遍历的子信息确定为目标子信息;从获取到的操作语句模板中,筛选出与目标子信息所指示的数据变更操作的操作类型对应的操作语句模板;根据目标子信息对筛选出的操作语句模板中的各个空白字段进行填充处理,得到目标操作语句;在数据库变动信息包括的各条子信息均被遍历后,对得到的各个目标操作语句进行组合处理,得到数据库变更日志。
在一个实施例中,处理器1003,用于:当目标子信息为结构变动信息时,根据信息内容和合法性校验策略之间的对应关系,采用相应的合法性校验策略对目标子信息中的信息内容进行合法性校验;若目标子信息通过合法性校验,则触发执行从获取到的操作语句模板中,筛选出与目标子信息所指示的数据变更操作的操作类型对应的操作语句模板的步骤。
在一个实施例中,目标数据库是对开发数据库进行更新得到的,开发数据库是空数据库或者是包含至少一个数据模型的数据库;处理器1003,用于:确定用于验证数据库变更日志的影子数据库,影子数据库是对开发数据库进行模拟得到的数据库;利用数据库重构工具在影子数据库中执行数据库变更日志,以变更影子数据库,得到变更结果;根据变更结果对数据库变更日志进行可用性检测,并在数据库变更日志通过可用性检测后,触发执行采用数据库变更日志和目标应用的开发程序代码,生成目标应用的交付程序包的步骤。
在一个实施例中,处理器1003,用于:若变更结果指示数据库变更日志的执行过程出现异常,则确定数据库变更日志未通过可用性检测;若变更结果指示数据库变更日志的执行过程未出现异常,则对变更后的影子数据库和目标数据库进行一致性匹配;若一致性匹配成功,则确定数据库变更日志通过可用性检测,若一致性匹配失败,则确定数据库变更日志未通过可用性检测。
在一个实施例中,目标应用的开发程序代码存储在代码仓库中;处理器1003,用于:将数据库变更日志推送至代码仓库,并在代码仓库中对开发程序代码进行编译处理,得到编译后的开发程序代码;对数据库变更日志和编译后的开发程序代码进行打包处理,以得到目标应用的交付程序包。
在一个实施例中,数据库变更日志包括一条或多条目标操作语句,一条目标操作语句用于执行一个数据库变更操作;目标对象在相应数据库中执行交付程序包中的数据库变更日志的过程包括:获取为目标应用配置的数据库链接,并基于数据库链接获取相应数据库的执行记录表,执行记录表用于指示在相应数据库中已执行的数据库变更操作;根据执行记录表从数据库变更日志中筛选出待执行的目标操作语句,待执行的目标操作语句所对应的数据库变更操作未被执行记录表指示;在数据库链接对应的数据库中执行待执行的目标操作语句,以变更相应数据库;
其中,目标对象还用于:在执行任一目标操作语句后,根据被执行的目标操作语句更新执行记录表。
在一个实施例中,数据库变更日志中包括一个或多个日志片段以及每个日志片段的片段标识,一个日志片段包括基于同一个操作语句模板所生成的各条目标操作语句;其中,执行记录表包括一个或多个已执行的日志片段的片段标识;根据执行记录表从数据库变更日志中筛选出待执行的目标操作语句,包括:根据执行记录表中的各个片段标识,从数据库变更日志中筛选出有效片段标识,有效片段标识是指未位于执行记录表中的片段标识;将有效片段标识所对应的日志片段中的各个目标操作语句,确定为待执行的目标操作语句。
在一个实施例中,在数据库链接对应的数据库中执行待执行的目标操作语句,包括:调用翻译工具并根据数据库链接对应的数据库所支持的语言格式,将待执行的目标操作语句翻译为与相应数据库适配的目标数据库操作语言;在数据库链接对应的数据库中,执行目标数据库操作语言。
在一个实施例中,交付程序包还包括目标代码语句;目标对象在获取到数据库链接之后,还用于从交付程序包中获取目标代码语句,并通过执行目标代码语句启动数据库重构子程序;其中,执行记录表的获取操作、待执行的目标操作语句的筛选操作以及执行操作、执行记录表的更新操作,均是由启动后的数据库重构子程序驱动执行的。
在一个实施例中,目标对象是目标交付环境中的其中一个设备,目标交付环境中的各个设备共享一个数据库,且目标交付环境中的各个设备均支持接收目标应用的交付程序包,并根据交付程序包变更相应的数据库;其中,目标对象在获取到执行记录表之后,采用分布式锁对执行记录表进行加锁处理,且在相应数据库中执行待执行的目标操作语句后,对执行记录表进行解锁处理,以使目标交付环境中除目标对象以外的其他设备在执行记录表被解锁后,成功获取执行记录表。
应当理解,本申请实施例中所描述的计算机设备1000可执行前文所对应实施例中对该应用处理方法的描述,也可执行前文图9所对应实施例中对该应用处理装置900的描述,在此不再赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。
此外,还应指出,本申请一个示例性实施例还提供了一种存储介质,该存储介质中存储了前述应用处理方法的计算机程序,该计算机程序包括程序指令,当一个或多个处理器加载并执行该程序指令,可以实现实施例中对应用处理方法的描述,这里不再赘述,对采用相同方法的有益效果描述,也在此不再赘述。可以理解的是,程序指令可以被部署在一个或能够互相通信的多个计算机设备上执行。
上述计算机可读存储介质可以是前述任一实施例提供的应用处理装置或者上述计算机设备的内部存储单元,例如计算机设备的硬盘或内存。该计算机可读存储介质也可以是该计算机设备的外部存储设备,例如该计算机设备上配备的插接式硬盘,智能存储卡(smart media card,SMC),安全数字(secure digital,SD)卡,闪存卡(flash card)等。进一步地,该计算机可读存储介质还可以既包括该计算机设备的内部存储单元也包括外部存储设备。该计算机可读存储介质用于存储该计算机程序以及该计算机设备所需的其他程序和数据。该计算机可读存储介质还可以用于暂时地存储已经输出或者将要输出的数据。
本申请的一个方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行本申请实施例中一方面提供的方法。
本申请的一个方面,提供了另一种计算机程序产品,该计算机程序产品包括计算机程序或计算机指令,该计算机程序或计算机指令被处理器执行时实现本申请实施例提供的应用处理方法的步骤。
本申请实施例方法中的步骤可以根据实际需要进行顺序调整、合并和删减。
本申请实施例装置中的模块可以根据实际需要进行合并、划分和删减。
以上所揭露的仅为本申请的部分实施例而已,当然不能以此来限定本申请之权利范围,本领域普通技术人员可以理解实现上述实施例的全部或部分流程,并依本申请权利要求所作的等同变化,仍属于发明所涵盖的范围。

Claims (20)

1.一种应用处理方法,其特征在于,包括:
在基于开发环境中的目标数据库验证所述目标应用满足交付条件后,获取关于所述目标数据库的数据库变动信息;所述数据库变动信息用于指示:部署所述目标数据库时所执行的数据库变更操作;
根据所述数据库变动信息生成数据库变更日志,所述数据库变更日志用于对任一数据库执行所述目标数据库所涉及的数据库变更操作;
采用所述数据库变更日志和所述目标应用的开发程序代码,生成所述目标应用的交付程序包;
当向目标对象交付所述目标应用时,将所述交付程序包发送给所述目标对象,使所述目标对象在相应数据库中执行所述交付程序包中的数据库变更日志以变更相应数据库,并基于变更后的数据库和所述交付程序包中的开发程序代码运行所述目标应用。
2.如权利要求1所述的方法,其特征在于,所述数据库变动信息包括:至少一条关于数据库结构的结构变动信息;所述数据库结构通过一个或多个数据模型进行描述,一个数据模型包括一个或多个数据字段;
所述获取关于所述目标数据库的数据库变动信息,包括:
显示关于所述目标数据库的模型编辑界面,所述模型编辑界面包括:用于编辑数据模型的模型编辑区域,以及用于编辑数据字段的字段编辑区域;
在所述模型编辑区域中获取关于数据模型的编辑操作,以及在所述字段编辑区域中获取关于数据字段的编辑操作,所述编辑操作包括以下至少一项:新增操作、删除操作和修改操作;
分别根据获取到的各个编辑操作,生成相应的结构变动信息,一个编辑操作对应一条结构变动信息。
3.如权利要求2所述的方法,其特征在于,所述字段编辑区域包括如下至少一个子区域:用于修改字段信息的子区域、用于删除数据字段的子区域,以及用于新增数据字段的子区域;
其中,所述字段信息包括以下至少一项:字段名称、字段属性描述信息、字段类型、字段默认值,以及用于约束字段的取值是否可为空的约束信息。
4.如权利要求2所述的方法,其特征在于,所述模型编辑界面还可包括:用于设置数据模型的索引的索引设置区域,任一数据模型的索引用于对相应数据模型中的数据字段进行搜索处理;
所述获取关于所述目标数据库的数据库变动信息,还包括:
在所述索引设置区域中获取关于索引的编辑操作,并根据在所述索引设置区域中获取到的各个编辑操作,生成相应的结构变动信息。
5.如权利要求1~4中任一项所述的方法,其特征在于,所述目标数据库是对开发数据库进行更新得到的,所述开发数据库是空数据库或者是包含至少一个数据模型的数据库;所述开发数据库对应一个影子数据库,所述影子数据库是对所述开发数据库进行模拟得到的数据库;
所述数据库变动信息包括:至少一条关于数据库中的数据的数据变动信息;
所述获取关于所述目标数据库的数据库变动信息,包括:
显示关于所述目标数据库的数据编辑界面,所述数据编辑界面包括:用于选择数据模型的模型选择区域,以及数据对比区域;
根据在所述模型选择区域中检测到的模型选择操作,从所述目标数据库所包含的数据模型中确定被选择的目标数据模型;
确定所述目标数据模型在所述目标数据库中所包含的各条目标数据,以及所述目标数据模型在所述影子数据库中所包含的各条历史数据;
在所述数据对比区域中,逐行显示所述各条目标数据和所述各条历史数据;其中,具有同一数据标识的目标数据和历史数据被显示在同一行;
在所述数据对比区域中选中至少一行数据,并根据被选中的各行数据分别生成相应的数据变动信息,一行数据对应一条数据变动信息。
6.如权利要求5所述的方法,其特征在于,所述在所述数据对比区域中,逐行显示所述各条目标数据和所述各条历史数据,包括:
按照同一数据标识的目标数据和历史数据需位于同一行的数据构建策略,采用所述各条目标数据和所述各条历史数据构建待显示的多行数据;
针对待显示的任一行数据,根据所述任一行数据中的各条数据之间的差异,确定所述任一行数据的数据变动情况;
根据数据变动情况和显示样式之间的对应关系,确定与所述任一行数据的数据变动情况对应的显示样式;
在所述数据对比区域中,采用确定出的显示样式显示所述任一行数据中的各条数据。
7.如权利要求1所述的方法,其特征在于,所述根据所述数据库变动信息生成数据库变更日志,包括:
根据操作类型和操作语句模板之间的对应关系,获取与所述数据库变更信息指示的数据库变更操作的操作类型对应的操作语句模板;
基于获取到的操作语句模板和所述数据库变动信息生成数据库变更日志,所述数据库变更日志用于对任一数据库执行所述目标数据库所涉及的数据库变更操作。
8.如权利要求7所述的方法,其特征在于,所述数据库变动信息包括M条子信息,M为正整数,一条子信息用于指示一个数据库变更操作;其中,所述M条子信息中的任一条子信息为关于数据库结构的结构变动信息,或者关于数据库中的数据的数据变动信息;任一操作语句模板包括:一个或多个空白字段,一个空白字段用于填充一个数据;
所述基于获取到的操作语句模板和所述数据库变动信息生成数据库变更日志,包括:
遍历获取所述数据库变动信息包括的各条子信息,将当前遍历的子信息确定为目标子信息;
从获取到的操作语句模板中,筛选出与所述目标子信息所指示的数据变更操作的操作类型对应的操作语句模板;
根据所述目标子信息对筛选出的操作语句模板中的各个空白字段进行填充处理,得到目标操作语句;
在所述数据库变动信息包括的各条子信息均被遍历后,对得到的各个目标操作语句进行组合处理,得到数据库变更日志。
9.如权利要求8所述的方法,其特征在于,所述将当前遍历的子信息确定为目标子信息之后,所述方法还包括:
当所述目标子信息为结构变动信息时,根据信息内容和合法性校验策略之间的对应关系,采用相应的合法性校验策略对所述目标子信息中的信息内容进行合法性校验;
若所述目标子信息通过所述合法性校验,则触发执行所述从获取到的操作语句模板中,筛选出与所述目标子信息所指示的数据变更操作的操作类型对应的操作语句模板的步骤。
10.如权利要求1所述的方法,其特征在于,所述目标数据库是对开发数据库进行更新得到的,所述开发数据库是空数据库或者是包含至少一个数据模型的数据库;
在所述根据所述数据库变动信息生成数据库变更日志之后,所述方法还包括:
确定用于验证数据库变更日志的影子数据库,所述影子数据库是对所述开发数据库进行模拟得到的数据库;
利用数据库重构工具在所述影子数据库中执行所述数据库变更日志,以变更所述影子数据库,得到变更结果;
根据所述变更结果对所述数据库变更日志进行可用性检测,并在所述数据库变更日志通过可用性检测后,触发执行所述采用所述数据库变更日志和所述目标应用的开发程序代码,生成所述目标应用的交付程序包的步骤。
11.如权利要求10所述的方法,其特征在于,所述根据所述变更结果对所述数据库变更日志进行可用性检测,包括:
若所述变更结果指示所述数据库变更日志的执行过程出现异常,则确定所述数据库变更日志未通过可用性检测;
若所述变更结果指示所述数据库变更日志的执行过程未出现异常,则对变更后的影子数据库和所述目标数据库进行一致性匹配;若一致性匹配成功,则确定所述数据库变更日志通过可用性检测,若一致性匹配失败,则确定所述数据库变更日志未通过可用性检测。
12.如权利要求1所述的方法,其特征在于,所述目标应用的开发程序代码存储在代码仓库中;所述采用所述数据库变更日志和所述目标应用的开发程序代码,生成所述目标应用的交付程序包,包括:
将所述数据库变更日志推送至所述代码仓库,并在所述代码仓库中对所述开发程序代码进行编译处理,得到编译后的开发程序代码;
对所述数据库变更日志和所述编译后的开发程序代码进行打包处理,以得到所述目标应用的交付程序包。
13.如权利要求1所述的方法,其特征在于,所述数据库变更日志包括一条或多条目标操作语句,一条目标操作语句用于执行一个数据库变更操作;
所述目标对象在相应数据库中执行所述交付程序包中的数据库变更日志的过程包括:
获取为所述目标应用配置的数据库链接,并基于所述数据库链接获取相应数据库的执行记录表,所述执行记录表用于指示在相应数据库中已执行的数据库变更操作;
根据所述执行记录表从所述数据库变更日志中筛选出待执行的目标操作语句,所述待执行的目标操作语句所对应的数据库变更操作未被所述执行记录表指示;
在所述数据库链接对应的数据库中执行所述待执行的目标操作语句,以变更相应数据库;
其中,所述目标对象还用于:在执行任一目标操作语句后,根据被执行的目标操作语句更新所述执行记录表。
14.如权利要求13所述的方法,其特征在于,所述数据库变更日志中包括一个或多个日志片段以及每个日志片段的片段标识,一个日志片段包括基于同一个操作语句模板所生成的各条目标操作语句;其中,所述执行记录表包括一个或多个已执行的日志片段的片段标识;
所述根据所述执行记录表从所述数据库变更日志中筛选出待执行的目标操作语句,包括:
根据所述执行记录表中的各个片段标识,从所述数据库变更日志中筛选出有效片段标识,所述有效片段标识是指未位于所述执行记录表中的片段标识;
将所述有效片段标识所对应的日志片段中的各个目标操作语句,确定为待执行的目标操作语句。
15.如权利要求14所述的方法,其特征在于,所述在所述数据库链接对应的数据库中执行所述待执行的目标操作语句,包括:
调用翻译工具并根据所述数据库链接对应的数据库所支持的语言格式,将所述待执行的目标操作语句翻译为与相应数据库适配的目标数据库操作语言;
在所述数据库链接对应的数据库中,执行所述目标数据库操作语言。
16.如权利要求13~15中任一项所述的方法,其特征在于,所述交付程序包还包括目标代码语句;所述目标对象在获取到数据库链接之后,还用于从所述交付程序包中获取所述目标代码语句,并通过执行所述目标代码语句启动数据库重构子程序;
其中,所述执行记录表的获取操作、所述待执行的目标操作语句的筛选操作以及执行操作、所述执行记录表的更新操作,均是由启动后的数据库重构子程序驱动执行的。
17.如权利要求13~15中任一项所述的方法,其特征在于,所述目标对象是目标交付环境中的其中一个设备,所述目标交付环境中的各个设备共享一个数据库,且所述目标交付环境中的各个设备均支持接收所述目标应用的交付程序包,并根据所述交付程序包变更相应的数据库;
其中,所述目标对象在获取到所述执行记录表之后,采用分布式锁对所述执行记录表进行加锁处理,且在相应数据库中执行所述待执行的目标操作语句后,对所述执行记录表进行解锁处理,以使所述目标交付环境中除所述目标对象以外的其他设备在所述执行记录表被解锁后,成功获取所述执行记录表。
18.一种应用处理装置,其特征在于,包括:
获取模块,用于在基于开发环境中的目标数据库验证所述目标应用满足交付条件后,获取关于所述目标数据库的数据库变动信息;所述数据库变动信息用于指示:部署所述目标数据库时所执行的数据库变更操作;
生成模块,用于根据所述数据库变动信息生成数据库变更日志,所述数据库变更日志用于对任一数据库执行所述目标数据库所涉及的数据库变更操作;
生成模块,用于采用所述数据库变更日志和所述目标应用的开发程序代码,生成所述目标应用的交付程序包;
发送模块,用于当向目标对象交付所述目标应用时,将所述交付程序包发送给所述目标对象,使所述目标对象在相应数据库中执行所述交付程序包中的数据库变更日志以变更相应数据库,并基于变更后的数据库和所述交付程序包中的开发程序代码运行所述目标应用。
19.一种计算机设备,其特征在于,包括:处理器、存储器以及网络接口;
所述处理器与所述存储器、所述网络接口相连,其中,所述网络接口用于提供网络通信功能,所述存储器用于存储程序代码,所述处理器用于调用所述程序代码,以执行权利要求1-17中任一项所述的应用处理方法。
20.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时,执行权利要求1-17中任一项所述的应用处理方法。
CN202210972691.6A 2022-08-12 2022-08-12 一种应用处理方法、装置、计算机设备以及可读存储介质 Pending CN117632250A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210972691.6A CN117632250A (zh) 2022-08-12 2022-08-12 一种应用处理方法、装置、计算机设备以及可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210972691.6A CN117632250A (zh) 2022-08-12 2022-08-12 一种应用处理方法、装置、计算机设备以及可读存储介质

Publications (1)

Publication Number Publication Date
CN117632250A true CN117632250A (zh) 2024-03-01

Family

ID=90015159

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210972691.6A Pending CN117632250A (zh) 2022-08-12 2022-08-12 一种应用处理方法、装置、计算机设备以及可读存储介质

Country Status (1)

Country Link
CN (1) CN117632250A (zh)

Similar Documents

Publication Publication Date Title
US5418957A (en) Network data dictionary
US8433673B2 (en) System and method for supporting data warehouse metadata extension using an extender
US8954375B2 (en) Method and system for developing data integration applications with reusable semantic types to represent and process application data
US20210049052A1 (en) Distillation of various application interface data structures distributed over distinctive repositories to form a data source of consolidated application interface data components
US7194730B2 (en) System and method for the configuration of software products
US8065323B2 (en) Offline validation of data in a database system for foreign key constraints
US10445675B2 (en) Confirming enforcement of business rules specified in a data access tier of a multi-tier application
US20180246704A1 (en) Systems and methods for transactional applications in an unreliable wireless network
CN108762743B (zh) 一种数据表操作代码生成方法及装置
US20090282066A1 (en) Method and system for developing data integration applications with reusable semantic identifiers to represent application data sources and variables
US20120054147A1 (en) System and method for extract, transform, and load workflow generation
CN106649457A (zh) 基于对象关系映射技术的数据处理框架
Powell Microsoft Power BI cookbook: Creating business intelligence solutions of analytical data models, reports, and dashboards
CA2868430A1 (en) Data selection and identification
US20050216486A1 (en) Methods and systems for software release management
CN110941629A (zh) 元数据处理方法、装置、设备及计算机可读存储介质
US20230086854A1 (en) Dynamically controlling case model structure using case fragments
US20230289331A1 (en) Model generation service for data retrieval
WO2021022703A1 (zh) 软件项目重构方法、装置、计算机装置及存储介质
CN115525624A (zh) 批量数据建模和数据处理的方法
Thao A configuration management system for software product lines
CN115202711B (zh) 数据发布方法及系统
WO2017072872A1 (ja) 業務プログラム生成支援システムおよび業務プログラム生成支援方法
US20230004477A1 (en) Providing a pseudo language for manipulating complex variables of an orchestration flow
US20230035835A1 (en) System and method of a modular framework for configuration and reuse of web components

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