CN113110866B - 一种数据库变更脚本的评估方法及装置 - Google Patents

一种数据库变更脚本的评估方法及装置 Download PDF

Info

Publication number
CN113110866B
CN113110866B CN202110478503.XA CN202110478503A CN113110866B CN 113110866 B CN113110866 B CN 113110866B CN 202110478503 A CN202110478503 A CN 202110478503A CN 113110866 B CN113110866 B CN 113110866B
Authority
CN
China
Prior art keywords
sql
script
change
sql change
analysis
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.)
Active
Application number
CN202110478503.XA
Other languages
English (en)
Other versions
CN113110866A (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.)
WeBank Co Ltd
Original Assignee
WeBank 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 WeBank Co Ltd filed Critical WeBank Co Ltd
Priority to CN202110478503.XA priority Critical patent/CN113110866B/zh
Publication of CN113110866A publication Critical patent/CN113110866A/zh
Priority to PCT/CN2021/134646 priority patent/WO2022227566A1/zh
Application granted granted Critical
Publication of CN113110866B publication Critical patent/CN113110866B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • 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/24Querying
    • G06F16/242Query formulation
    • G06F16/2433Query languages
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Mathematical Physics (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明实施例提供了一种数据库变更脚本的评估方法及装置,该方法包括接收针对数据库的结构化查询语言sql变更脚本,按照词语分析规则,确定sql变更脚本是否可执行,若可执行,则基于sql变更脚本中的目标变更对象,获取目标变更对象关联的数据库表的状态信息,根据数据库表的状态信息,确定sql变更脚本在变更时所产生的第一分析结果信息,基于第一分析结果信息,从预设策略库中匹配出用于优化sql变更脚本的第一策略。该方案的自动化实现可以减少依靠人工评估sql变更脚本的变更影响所耗费的时间和人力,并提高评估sql变更脚本的效率,以便解决现有技术中依赖运维人员评估sql变更脚本的变更影响所导致的评估效率低的问题。

Description

一种数据库变更脚本的评估方法及装置
技术领域
本发明实施例涉及金融科技(Fintech)领域,尤其涉及一种数据库变更脚本的评估方法及装置。
背景技术
随着计算机技术的发展,越来越多的技术应用在金融领域,传统金融业正在逐步向金融科技转变,但由于金融行业的安全性、实时性要求,也对技术提出的更高的要求。在金融领域中,随着金融业务的不断更新和/或增加,通常会涉及到对相关数据库表进行修改,而针对相关数据库表进行修改也即是通过对数据库表的结构化查询语言sql语句进行变更来实现。然而,若sql变更语句存在错误或者未对sql变更语句进行评估,在变更sql变更语句时会引起数据库发生故障,从而影响金融业务的正常执行,给金融领域带来严重的损失。因此,需要对sql变更语句的变更影响进行准确地评估,以确保金融领域的正常运行。
现有方案通常是基于运维人员的经验对sql变更语句的变更影响进行评估。具体地,运维人员在确定出sql变更语句后,根据自己的经验对sql变更语句的变更影响进行评估,确定出sql变更语句在变更时所产生的影响结果,然后再将sql变更语句提交给分析检测平台进行检测,以确定sql变更语句是否可执行。然而,这种处理方式由于不同运维人员的经验可能不同,导致评估结果的准确性也不同,并由于运维人员在评估过程中存在误判或漏判等问题,因此会导致sql变更语句在变更时使得金融业务系统出现异常。此外,由于需要依赖运维人员进行评估,需要耗费较长的时间和精力,使得评估的效率低。
综上,目前亟需一种数据库变更脚本的评估方法,用以解决现有技术中依赖运维人员评估sql变更脚本的变更影响所导致的评估效率低的问题。
发明内容
本发明实施例提供了一种数据库变更脚本的评估方法及装置,用以解决现有技术中依赖运维人员评估sql变更脚本的变更影响所导致的评估效率低的问题。
第一方面,本发明实施例提供了一种数据库变更脚本的评估方法,包括:
接收针对数据库的结构化查询语言sql变更脚本;
按照词语分析规则,确定所述sql变更脚本是否可执行;
若可执行,则基于所述sql变更脚本中的目标变更对象,获取所述目标变更对象关联的数据库表的状态信息;
根据所述数据库表的状态信息,确定所述sql变更脚本在变更时所产生的第一分析结果信息;
基于所述第一分析结果信息,从预设策略库中匹配出用于优化所述sql变更脚本的第一策略;所述预设策略库中存储有分析结果信息及对应的策略。
上述技术方案中,由于现有技术依靠人工分析来评估sql变更脚本的变更影响,需要耗费一定的时间,且由于依赖人工分析会导致评估出的影响结果准确性不高。而该方案在确定sql变更脚本可成功执行时,可以自动获取目标变更对象关联的数据库表的状态信息,并对数据库表的状态信息进行影响结果分析,可以自动准确地确定出sql变更脚本在变更时所产生的第一分析结果信息。再基于第一分析结果信息,可以及时地从预设策略库中匹配出用于优化sql变更脚本的第一策略。基于此可知,该方案的自动化实现可以避免人工过多的介入,有助于减少依靠人工评估sql变更脚本的变更影响所耗费的时间和人力,从而可以提高评估sql变更脚本的变更影响的效率,进而可以解决现有技术中依赖运维人员评估sql变更脚本的变更影响所导致的评估效率低的问题,并可以解决现有技术中因人工的经验不同所导致的评估准确性不同的问题。此外,由于该方案可以基于第一策略对sql变更脚本进行自动优化,因此相对人工评估和优化来说,可以大大降低评估和优化所需的知识门槛,并且更加的安全可靠。
可选地,所述按照词语分析规则,确定所述sql变更脚本是否可执行,包括:
基于词法分析规则对所述sql变更脚本进行词法分析,确定出所述sql变更脚本中的各关键字;
基于所述各关键字,利用语法分析规则对所述sql变更脚本进行语法分析,确定所述sql变更脚本是否符合语法规则,从而确定所述sql变更脚本是否可执行。
上述技术方案中,通过基于关键字,并利用语法分析规则对sql变更脚本进行语法分析,可以及时准确地确定sql变更脚本的语法是否正确,以便进一步确定sql变更脚本是否可执行,从而可以避免错误的sql变更脚本在变更时引起数据库的故障。
可选地,所述基于词法分析规则对所述sql变更脚本进行词法分析,确定出所述sql变更脚本中的各关键字,包括:
通过构建的关键字查找树,确定所述sql变更脚本中的各词汇;
针对每个词汇,确定关键字库中是否存在与所述词汇的哈希值相等的关键字;
若存在,则将所述词汇确定为关键字。
上述技术方案中,通过哈希值匹配的方式,可以快速地确定sql变更脚本中的词汇是否为关键字,而无需人工判断,从而可以提高sql变更脚本的变更影响的评估效率。此外,通过预先在关键字库中存储每个关键字的哈希值,可以直接比对词汇的哈希值与多个关键字的哈希值,而无需每次重新计算关键字的哈希值,从而可以提高数据处理的效率。
可选地,所述基于所述各关键字,利用语法分析规则对所述sql变更脚本进行语法分析,确定所述sql变更脚本是否符合语法规则,包括:
按照语法分析规则,以所述sql变更脚本中的各关键字作为构建语法分析树的参数,确定是否可构建出语法分析树;
若是,则确定所述sql变更脚本的语法正确,否则确定所述sql变更脚本的语法存在错误。
上述技术方案中,通过以各关键字作为构建语法分析树的参数,可以快速地去构建语法分析树,并可以确定所构建出的语法分析树是否符合语法规则,从而可以准确地确定sql变更脚本的语法是否正确,以便进一步地确定sql变更脚本是否可执行。
可选地,所述数据库表的状态信息包括以下至少一项:容量、行数、主键信息、索引信息、访问请求状态以及目标变更对象的影响范围。
上述技术方案中,通过实时采集数据库表的状态信息,可以及时准确地基于该数据库表的状态信息确定出sql变更脚本在变更时所产生的影响结果,并且该影响结果是基于实时采集的数据库表的状态信息确定的,所以该影响结果更加符合实际场景,从而可以便于后续能够更精准地对sql变更脚本进行优化。
可选地,所述根据所述数据库表的状态信息,确定变更所述sql变更脚本所产生的第一分析结果信息,包括:
针对所述数据库表的状态信息中每个子状态信息,确定所述子状态信息是否符合设定的影响策略条件;
若符合,则生成与所述子状态信息对应的影响结果信息,以及基于记忆神经网络模型对所述数据库表的状态信息进行预测,确定出预测结果信息;
将所述影响结果信息和所述预测结果信息确定为所述第一分析结果信息。
上述技术方案中,针对数据库表的状态信息中每个子状态信息,通过确定设定的各影响策略条件中是否存在与该子状态信息匹配的影响策略条件,可以及时准确的生成与该子状态信息对应的影响结果信息。此外,基于记忆神经网络模型可以及时准确地确定出预测结果信息。
可选地,所述基于记忆神经网络模型对所述数据库表的状态信息进行预测,确定出预测结果信息,包括:
将所述数据库表的状态信息中当前时刻的数据库表访问热点信息输入到所述记忆神经网络模型进行分析预测,确定出在当前时刻之后所述数据库表的访问量处于低谷的时间段;
将所述时间段作为sql变更脚本在数据库中进行变更的变更时段。
上述技术方案中,通过将当前时刻的数据库表访问热点信息输入到记忆神经网络模型进行分析预测,可以准确地确定出在当前时刻之后数据库表的访问量处于低谷的时间段,可以便于sql变更脚本基于该低谷的时间段在数据库中进行及时有效地变更,如此可以避免sql变更脚本在非访问低谷时间段进行变更时造成数据库表无法访问,从而可以确保数据库表能够被正常的访问,并可以确保业务系统能够正常运行。
可选地,所述方法还包括:
若确定所述sql变更脚本不可执行,则生成所述sql变更脚本的第二分析结果信息;
根据所述第二分析结果信息,从所述预设策略库中匹配出用于优化所述sql变更脚本的第二策略。
上述技术方案中,在确定sql变更脚本不可执行时,可以直接基于第二分析结果信息从预设策略库中匹配出用于优化sql变更脚本的第二策略,以便sql变更脚本能够及时的优化。
可选地,从预设策略库中匹配出用于优化所述sql变更脚本的第一策略,包括:
确定出所述第一分析结果信息的各分词;
基于所述各分词与所述预设策略库中的索引词的匹配情况,确定出匹配度;
若所述匹配度大于等于匹配阈值,将所述索引词对应的策略确定为所述第一策略;
基于所述第一策略,优化所述sql变更脚本。
上述技术方案中,通过基于各分词与预设策略库中的索引词进行匹配,可以更快速的确定出匹配度,并以及时地便于确定该匹配度所对应的策略是否为第一策略,从而可以便于后续及时准确地基于第一策略对sql变更脚本进行优化。
第二方面,本发明实施例还提供了一种数据库变更脚本的评估装置,包括:
接收单元,用于接收针对数据库的结构化查询语言sql变更脚本;
处理单元,用于按照词语分析规则,确定所述sql变更脚本是否可执行;若可执行,则基于所述sql变更脚本中的目标变更对象,获取所述目标变更对象关联的数据库表的状态信息;根据所述数据库表的状态信息,确定所述sql变更脚本在变更时所产生的第一分析结果信息;基于所述第一分析结果信息,从预设策略库中匹配出用于优化所述sql变更脚本的第一策略;所述预设策略库中存储有分析结果信息及对应的策略。
可选地,所述处理单元具体用于:
基于词法分析规则对所述sql变更脚本进行词法分析,确定出所述sql变更脚本中的各关键字;
基于所述各关键字,利用语法分析规则对所述sql变更脚本进行语法分析,确定所述sql变更脚本是否符合语法规则,从而确定所述sql变更脚本是否可执行。
可选地,所述处理单元具体用于:
通过构建的关键字查找树,确定所述sql变更脚本中的各词汇;
针对每个词汇,确定关键字库中是否存在与所述词汇的哈希值相等的关键字;
若存在,则将所述词汇确定为关键字。
可选地,所述处理单元具体用于:
按照语法分析规则,以所述sql变更脚本中的各关键字作为构建语法分析树的参数,确定是否可构建出语法分析树;
若是,则确定所述sql变更脚本的语法正确,否则确定所述sql变更脚本的语法存在错误。
可选地,所述处理单元具体用于:
所述数据库表的状态信息包括以下至少一项:容量、行数、主键信息、索引信息、访问请求状态以及目标变更对象的影响范围。
可选地,所述处理单元具体用于:
针对所述数据库表的状态信息中每个子状态信息,确定所述子状态信息是否符合设定的影响策略条件;
若符合,则生成与所述子状态信息对应的影响结果信息,以及基于记忆神经网络模型对所述数据库表的状态信息进行预测,确定出预测结果信息;
将所述影响结果信息和所述预测结果信息确定为所述第一分析结果信息。
可选地,所述处理单元具体用于:
将所述数据库表的状态信息中当前时刻的数据库表访问热点信息输入到所述记忆神经网络模型进行分析预测,确定出在当前时刻之后所述数据库表的访问量处于低谷的时间段;
将所述时间段作为sql变更脚本在数据库中进行变更的变更时段。
可选地,所述处理单元还用于:
若确定所述sql变更脚本不可执行,则生成所述sql变更脚本的第二分析结果信息;
根据所述第二分析结果信息,从所述预设策略库中匹配出用于优化所述sql变更脚本的第二策略。
可选地,所述处理单元具体用于:
确定出所述第一分析结果信息的各分词;
基于所述各分词与所述预设策略库中的索引词的匹配情况,确定出匹配度;
若所述匹配度大于等于匹配阈值,将所述索引词对应的策略确定为所述第一策略;
基于所述第一策略,优化所述sql变更脚本。
第三方面,本发明实施例提供一种计算设备,包括至少一个处理器以及至少一个存储器,其中,所述存储器存储有计算机程序,当所述程序被所述处理器执行时,使得所述处理器执行上述第一方面任意所述的数据库变更脚本的评估方法。
第四方面,本发明实施例提供一种计算机可读存储介质,其存储有可由计算设备执行的计算机程序,当所述程序在所述计算设备上运行时,使得所述计算设备执行上述第一方面任意所述的数据库变更脚本的评估方法。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种数据库变更脚本的评估系统架构的示意图;
图2为本发明实施例提供的一种数据库变更脚本的评估方法的流程示意图;
图3为本发明实施例提供的一种Trie树的结构示意图;
图4为本发明实施例提供的一种sql词法分析的状态机示意图;
图5为本发明实施例提供的一种构建语法分析树的示意图;
图6为本发明实施例提供的一种使用Lstm算法对数据库表访问热点情况进行分析预测的示意图;
图7为本发明实施例提供的一种全文索引算法的过程示意图;
图8为本发明实施例提供的一种基于A、B、C形成的语法树示意图;
图9为本发明实施例提供的一种对新创建的索引进行存储的示意图;
图10为本发明实施例提供的一种数据库变更脚本的评估装置的结构示意图;
图11为本发明实施例提供的一种计算设备的结构示意图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
下面首先对本发明实施例中涉及的部分用语进行解释说明,以便于本领域技术人员进行理解。
(1)数据库:是一些关联表的集合。
(2)数据表:表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。
(3)列:一列(数据元素)包含了相同类型的数据,例如邮政编码的数据。
(4)行:一行(元组或记录)是一组相关的数据,例如一条用户订阅的数据。
(5)主键:主键是唯一的,一个数据表中只能包含一个主键,可以使用主键来查询数据。
(6)索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。
(7)sql指令:结构化查询语言(Structured Query Language,sql),是一种特殊目的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
(8)树:一种数据结构,它是由n(n>=1)个有限结点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。
(9)MySQL:MySQL是一个关系型数据库管理系统,也是一种关联数据库管理系统,关联数据库将数据保存在不同的表中。
如上介绍了本发明实施例中涉及的部分用语,下面对本发明实施例涉及的技术特征进行介绍。
为了便于理解本发明实施例,首先以图1中示出的系统结构为例说明适用于本发明实施例的数据库变更脚本的评估系统架构。该数据库变更脚本的评估系统架构可以应用于评估优化运维人员提交的sql变更语句等。如图1所示,该数据库变更脚本的评估系统架构可以包括评估优化平台100和目标数据库系统200。
其中,评估优化平台100可以包括接收模块101、语法分析模块102、影响分析模块103、指令优化模块104和数据库状态采集模块105。
接收模块101用于接收运维人员提交的数据库sql变更脚本,并将该数据库sql变更脚本提交给语法分析模块102。同时也包含了返回信息的功能,可以将sql执行结果或者sql优化策略返回给运维人员。
语法分析模块102用于接收模块101提交过来的sql变更脚本,并通过事先定义好的人工智能自然语言语法分析模型对sql变更脚本进行分析,判断该sql变更脚本的语法正确性,进而判断该sql变更脚本是否能够在数据库(比如MySQL数据库)中成功执行。如果确定不能成功执行,则会将sql变更脚本以及sql变更脚本不能成功执行的影响结果提交到指令优化模块104,给出正确的语法优化策略,并最终返回给运维人员。如果确定可成功执行,则会将sql变更脚本提交到影响分析模块103,以便进行sql变更脚本在变更时可能造成的影响进行分析和预测。
影响分析模块103用于接收语法分析模块102提交的sql变更脚本,并将结合采集模块从目标数据库系统200中采集到的数据库表状态,进行分析和预测。因此该影响分析模块103又主要分为两大功能,分析和预测。其中,分析功能会根据采集结果中数据库表的实时状态信息,判断该sql变更脚本变更后必然会产生的影响结果,预测功能会根据采集到的数据库表访问状态,结合Lstm算法(Long Short-Term Memory,长短期记忆网络),进而预测数据库表未来的访问状态,最终预测未来某个时间变更该sql变更脚本可能造成的影响。对于分析和预测后可能存在变更风险的sql变更脚本,影响分析模块会将影响结果和sql变更脚本提交到指令优化模块104,给出影响风险最低的sql变更脚本优化策略,并最终返回给运维人员;对于分析和预测都低风险的sql变更脚本或者对数据库无影响的sql变更脚本,将最终提交到目标数据库系统200进行变更。
指令优化模块104用于接收来自语法分析模块102或者影响分析模块103提交的sql变更脚本和影响结果。再根据事先设置好的策略库,通过全文索引算法进行匹配检索,最终给出sql变更脚本的优化策略,并提交给接收模块101返回给运维人员。同时会将本次sql的分析/预测/执行结果落入知识库,以便评估优化平台100自我成长学习。
数据库状态采集模块105用于实时采集数据库表的运行状态信息。比如,采集数据库cpu使用率、磁盘I/O利用率、tcp网络连接数量、数据库表的容量大小、数据库表的主键/索引信息、变更字段涉及数据库表行数以及目标数据库系统200的数据库表访问频率等状态信息。
需要说明的是,上述图1所示的结构仅是一种示例,本发明实施例对此不做限定。
基于上述描述,图2示例性的示出了本发明实施例提供的一种数据库变更脚本的评估方法的流程,该流程可以由数据库变更脚本的评估装置执行。
如图2所示,该流程具体包括:
步骤201,接收针对数据库的结构化查询语言sql变更脚本。
步骤202,按照词语分析规则,确定所述sql变更脚本是否可执行。
步骤203,若可执行,则基于所述sql变更脚本中的目标变更对象,获取所述目标变更对象关联的数据库表的状态信息。
步骤204,根据所述数据库表的状态信息,确定所述sql变更脚本在变更时所产生的第一分析结果信息。
步骤205,基于所述第一分析结果信息,从预设策略库中匹配出用于优化所述sql变更脚本的第一策略;所述预设策略库中存储有分析结果信息及对应的策略。
上述步骤201中,sql变更脚本可以是运维人员根据实际应用场景对原来的数据库系统中的sql脚本进行变更(比如增加或减少索引条件、增加或减少时间限制以及增加或减少数据展示字段等)所形成的变更脚本。或者,也可以是数据库系统中某一个或某几个sql脚本在执行过程中经常报错或执行等待的时间比较长等,则运维人员根据实际情况对数据库系统中某一个或某几个sql脚本进行调整所形成的变更脚本。当然,也可以是其它形式下所产生的变更脚本,本发明实施例对此并不作限定。
具体地,运维人员在生成sql变更脚本后,需要检测该sql变更脚本是否可在数据库系统中成功执行,并确定该sql变更脚本在数据库系统中变更时所产生的影响结果(比如变更过程中可能会导致数据库表无法访问、数据库磁盘I/O负载压力增加等),进而基于影响结果对sql变更脚本进行优化。因此,需要将生成的sql变更脚本提交给评估优化平台中的数据接收模块,以便评估优化平台对该sql变更脚本进行评估优化。
上述步骤202和步骤203中,评估优化平台中的语法分析模块按照词语分析规则对sql变更脚本进行分析,确定sql变更脚本是否可执行。若确定sql变更脚本可执行,则将sql变更脚本提交给评估优化平台中的影响分析模块,影响分析模块基于sql变更脚本中的目标变更对象,从评估优化平台中的数据库状态采集模块获取目标变更对象关联的数据库表的状态信息。
其中,数据库表的状态信息包括以下至少一项:容量、行数、主键信息、索引信息、访问请求状态以及目标变更对象的影响范围。通过实时采集数据库表的状态信息,可以及时准确地基于该数据库表的状态信息确定出sql变更脚本在变更时所产生的影响结果,并且该影响结果是基于实时采集的数据库表的状态信息确定的,所以该影响结果更加符合实际场景,从而可以便于后续能够更精准地对sql变更脚本进行优化。
具体地,首先基于词法分析规则对sql变更脚本进行词法分析,确定出sql变更脚本中的各关键字。再基于各关键字,利用语法分析规则对sql变更脚本进行语法分析,确定sql变更脚本是否符合语法规则,从而确定sql变更脚本是否可执行。若确定sql变更脚本可执行,则将sql变更脚本提交给评估优化平台中的影响分析模块。
在一种可能的实现方式中,可以通过构建的关键字查找树,确定sql变更脚本中的各词汇。再针对每个词汇,确定关键字库中是否存在与词汇的哈希值相等的关键字。若存在,则将词汇确定为关键字。若不存在,则确定该词汇不为关键字。其中,关键字库可以包括select、from、where等关键字以及各关键字对应的哈希值。如此,通过哈希值匹配的方式,可以快速地确定sql变更脚本中的词汇是否为关键字,而无需人工判断,从而可以提高sql变更脚本的变更影响的评估效率。此外,通过预先在关键字库中存储每个关键字的哈希值,可以直接比对词汇的哈希值与多个关键字的哈希值,而无需每次重新计算关键字的哈希值,从而可以提高数据处理的效率。
示例性地,比如sql变更脚本为“select*from tableA;”,则通过构建的关键字查找树,可以查找出select、from等词汇,并通过词法分析器中的get_hash_symbol()函数可以获取select、from等词汇的哈希值。再将select、from等词汇的哈希值分别与预设关键字库中各关键字的哈希值进行匹配,若匹配成功,则可确定该词汇为关键字。
在一种可能的实现方式中,可以按照语法分析规则,以sql变更脚本中的各关键字作为构建语法分析树的参数,确定是否可构建出语法分析树。若是,则确定sql变更脚本的语法正确,否则确定sql变更脚本的语法存在错误。如此,通过以各关键字作为构建语法分析树的参数,可以快速地去构建语法分析树,并可以确定所构建出的语法分析树是否符合语法规则,从而可以准确地确定sql变更脚本的语法是否正确,以便进一步地确定sql变更脚本是否可执行,从而可以避免错误的sql变更脚本在变更时引起数据库的故障。
上述步骤204和步骤205中,评估优化平台中的影响分析模块可以根据数据库表的状态信息,确定sql变更脚本在变更时所产生的第一分析结果信息,并基于第一分析结果信息,从预设策略库中匹配出用于优化sql变更脚本的第一策略。其中,预设策略库中存储有分析结果信息及对应的策略。
具体地,针对数据库表的状态信息中每个子状态信息,确定子状态信息是否符合设定的影响策略条件。若符合,则生成与子状态信息对应的影响结果信息,以及基于记忆神经网络模型对数据库表的状态信息进行预测,确定出预测结果信息,即,将数据库表的状态信息中当前时刻的数据库表访问热点信息输入到记忆神经网络模型进行分析预测,确定出在当前时刻之后所述数据库表的访问量处于低谷的时间段,将时间段作为sql变更脚本在数据库中进行变更的变更时段。再将影响结果信息和预测结果信息确定为第一分析结果信息。如此,通过确定设定的各影响策略条件中是否存在与该子状态信息匹配的影响策略条件,可以及时准确的生成与该子状态信息对应的影响结果信息。此外,基于记忆神经网络模型可以及时准确地确定出预测结果信息。然后,再将第一分析结果信息和sql变更脚本提交给评估优化平台中的指令优化模块,指令优化模块会基于全文索引算法从预设策略库中匹配出与第一分析结果信息对应的策略,并基于该策略对sql变更脚本进行优化。即,指令优化模块首先确定出第一分析结果信息的各分词,并基于各分词与预设策略库中的索引词的匹配情况,确定出匹配度。若匹配度大于等于匹配阈值,将索引词对应的策略确定为第一策略,并基于第一策略,优化sql变更脚本。如此,通过基于各分词与预设策略库中的索引词进行匹配,可以更快速的确定出匹配度,并以及时地便于确定该匹配度所对应的策略是否为第一策略,从而可以便于后续及时准确地基于第一策略对sql变更脚本进行优化。
示例性地,假设sql变更脚本的某一子状态信息是:目标变更对象的影响范围为110000行,则确定各策略影响条件中是否存在与该子状态信息匹配的策略影响条件,并假设各影响策略条件中存在一个策略影响条件为:影响数据库行数超过100000行,需要进行拆分执行。在将该子状态信息与各策略影响条件进行匹配时,即目标变更对象的影响范围超过100000行,可确定各策略影响条件中存在一个策略影响条件与该子状态信息匹配,因此,可以生成影响结果信息“目标变更对象的影响范围超过100000行,导致数据库磁盘负载压力大”。此外,还可以使用Lstm算法对子状态信息“数据库表访问热点情况”进行分析预测,比如说数据库表访问热点情况的采集时刻为20:00,通过将该采集时刻的数据库表访问热点情况输入到Lstm算法中进行预测,即可预测出一个访问低谷时间段(比如22:00-22:30),并将该访问低谷时段作为sql变更脚本在数据库中进行变更的变更时段。然后,将sql变更脚本、影响结果信息以及访问低谷时间段提交给指令优化模块,则指令优化模块可以从影响结果信息中确定出分词,比如“目标”、“变更”、“对象”、“影响范围”、“超过100000行”等分词。将“目标”、“变更”、“对象”、“影响范围”、“超过100000行”、“数据库”、“磁盘”、“负载压力大”等分词与预设策略库中的索引词进行逐一匹配,确定出多个匹配度,比如确定出7个匹配度,即0.85、0.75、0.7、0.6、0.5、0.4、0.3,假设匹配阈值为0.8,则将该7个匹配度都与匹配阈值进行比较,即可得出只有0.85大于0.8。因此,可以将匹配度0.85所对应的策略确定为用于优化给数据库造成负载压力影响的sql变更脚本,或者,直接将该7个匹配度进行比对,确定出最大匹配度,并将最大匹配度所对应的策略确定为用于优化给数据库造成负载压力影响的sql变更脚本,以便将原有sql变更脚本拆解成多个子sql变更脚本,然后基于该多个子sql变更脚本在数据库中进行变更,以便缓解原有sql变更脚本在数据库中变更时对数据库造成的负载压力影响。
需要说明的是,语法分析模块若确定sql变更脚本不可执行,则生成sql变更脚本的第二分析结果信息,并直接将sql变更脚本以及第二分析结果信息提交给指令优化模块。指令优化模块首先会确定出第二分析结果信息的各分词,并基于各分词与预设策略库中的索引词的匹配情况,确定出匹配度。若匹配度大于等于匹配阈值,将索引词对应的策略确定为第二策略,以便sql变更脚本能够及时的被优化,确定出语法正确的sql变更脚本。
示例性地,语法分析模块在确定sql变更脚本不可执行时,生成sql变更脚本不可执行的分析结果信息(比如sql变更脚本存在语法错误)。然后,可以通过基于TCP(Transmission Control Protocol,传输控制协议)的连接方式与指令优化模块建立连接关系,将sql变更脚本以及分析结果信息传输给指令优化模块。指令优化模块从分析结果信息“sql变更脚本存在语法错误,导致在数据库中执行出错”中确定出分词,比如“语法”、“错误”或“语法错误”等分词。将“语法”、“错误”、“执行出错”或“语法错误”等分词与预设策略库中的索引词进行逐一匹配,确定出多个匹配度,比如确定出5个匹配度,即0.8、0.6、0.5、0.3、0.2,假设匹配阈值为0.7,则将该5个匹配度都与匹配阈值进行比较,即可得出只有0.8大于0.7,因此,可以将匹配度0.8所对应的策略确定为用于优化存在语法错误的sql变更脚本,或者,直接将该5个匹配度进行比对,确定出最大匹配度,并将最大匹配度所对应的策略确定为用于优化存在语法错误的sql变更脚本,从而得到语法正确的sql变更脚本。
基于此,下面对本发明实施例中数据库变更脚本的评估方法的实施过程进行具体描述。
Step1:接收模块接收运维人员提交的sql变更语句。
其中,接收模块可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统。
具体实施过程中,运维人员可以向接收模块发送sql变更请求(或sql变更指令),该sql变更请求包括sql变更语句(或称为sql变更脚本)。接收模块在接收到sql变更请求后,解析该sql变更请求得到sql变更语句,并将该发送给语法分析模块。例如,接收模块可以预先给运维人员提供服务界面,运维人员可以在该服务界面输入sql变更请求,以将sql变更请求提交给接收模块。接收模块在接收到sql变更请求后,解析该sql变更请求得到sql变更语句,并将该发送给语法分析模块。或者,运维人员可以在该服务界面直接输入sql变更语句,接收模块在接收到sql变更语句后,将该发送给语法分析模块。
其中,以运维人员向接收模块发送sql变更请求为例,若存在多条sql变更语句,运维人员可以基于该多条sql变更语句生成多个sql变更请求,并依次在接收模块提供的服务界面上输入该多个sql变更请求。接收模块可以每接收到一个sql变更请求就立即进行解析得到对应的sql变更语句,或者可以在全部接收该多个sql变更请求后,再对该多个sql变更请求进行解析,得到对应的多个sql变更语句。此外,运维人员也可以将该多条sql变更语句进行打包处理,得到数据包,并基于该数据包生成sql变更请求,在接收模块提供的服务界面上输入该ql变更请求。接收模块在接收到该sql变更请求后进行解析得到对应的多个sql变更语句。
需要说明的是,该接收模块还可以接收指令优化模块发送的sql变更语句优化策略以及sql变更语句的执行结果。
Step2:语法分析模块对sql变更语句进行分析,确定sql变更语句的语法正确性。
语法分析模块在接收到接收模块发送的sql变更语句后,通过预先设定的sql语法规则对sql变更语句进行分析,判断sql变更语句的语法正确性。若确定sql变更语句的语法正确,则说明sql变更语句能够在数据库表成功执行。若确定sql变更语句的语法不正确,则说明sql变更语句不能在数据库表成功执行,并确定出sql变更语句不能执行的影响结果,此时会将存在语法错误的sql变更语句以及sql变更语句不能执行的影响结果提交给指令优化模块,以使指令优化模块对存在语法错误的sql变更语句进行语法调整,确定出语法正确的sql变更语句。
此外,在确定sql变更语句的语法正确时,语法分析模块也会确定出sql变更语句所需要变更的目标对象(比如变更所涉及的表、表中的字段以及表中的数据行数、索引条件等)。然后将sql变更语句以及对应的分析结果提交给影响分析模块。该分析结果包括目标变更对象和sql变更语句的语法是正确的。具体地,语法分析模块在判断sql变更语句的语法是否正确的过程中,可以识别出sql变更语句所需要变更的目标对象。然后,将sql变更语句以及对应的分析结果(目标变更对象和sql变更语句的语法是正确的)进行打包处理,形成一个数据包,并将该数据包提交给影响分析模块。或者,也可以将sql变更语句以及对应的分析结果直接一起提交给影响分析模块。
示例性地,语法分析模块在接收到sql变更语句后,可以通过预先设定好的人工智能自然语言(NLP,Natural Language Processing)语法分析模型对sql变更语句进行分析,即利用自然语言语法分析模型中的词法分析和语法分析对sql变更语句进行分析,以判断sql变更语句的语法正确性。其中,词法分析所采用的是Lex词法分析器,语法分析所采用的是Bison语法分析器。
其中,利用Lex词法分析器对sql变更语句进行词法分析,即,将sql变更语句中每个字符转化成对应的标识符(token),转化后的标识符容易被后续的Bison语法分析器进行处理。具体地,Lex词法分析器将sql变更语句与常规表达式进行匹配,即,一次读入一个输入字符(即一个词汇),直至找到一个与输入字符匹配的模式,在找到匹配的模式后,确定出一个对应的token。每一个token都会对应一个Bison语法分析器中的终结符(终结符是不可拆分的最小元素)。每一个token加上其对应的终结符就可以构成一个字符串,然后这些字符串会被分为两组,即sql关键字和sql函数,该sql关键字和sql函数分别对应一个数组。此外,考虑到sql关键字(比如select、from、where等)是一个固定的集合,则可以使用数据结构字典树Trie树(一种哈希树的变种)来储存sql关键字数组。
如图3所示,图3为本发明实施例提供的一种Trie树的结构示意图。Trie树上存储有关键字数组,可以根据Trie树来查找sql变更语句中的关键字。具体地,在形成Trie树后,基于Trie树,并调用Lex词法分析器中的get_hash_symbol()函数就可以确定出sql变更语句中的关键字。即,利用Lex词法分析器中的get_hash_symbol()函数对sql变更语句中每个词汇进行处理,确定出各词汇的哈希值。针对每个词汇,将该词汇的哈希值与Trie树(即关键字库)中的关键字的哈希值进行比较,确定该词汇是否为关键字,若出现相等,则确定该词汇为关键字,否则确定该词汇不为关键字。
如图4所示,为本发明实施例提供的一种sql词法分析的状态机示意图。示例性地,以sql变更语句为“select*from table1;”为例,按照图所示的流程进行字符匹配,以便确定出相应字符对应的token。首先匹配出select,并确定出select对应的token,即SELECT_SYM 748。紧接着继续开始下一个字符的匹配,此时遇到空格会过滤,然后继续匹配出*,并确定出*对应的token,即*42。再继续开始下一个字符的匹配。匹配出from,并确定出from对应的token,即FROM 452。然后,由于table1为表名,表名是可以自定义的,每个自定义的表名都可能不相同,因此,此处无需确定表名所对应的token。直接继续开始下一个字符的识别,在匹配出一个特殊字符后,确定该特殊字符是否为结束字符,若是,则确定出该结束字符对应的token,即END_OF_INPUT 411。基于此,即可确定出sql变更语句“select*fromtable1;”中相应字符所对应的token。
在对sql变更语句进行词法分析后,就开始对词法分析后的sql变更语句(即sql变更语句所对应的各token)进行语法分析。具体地,Bison语法分析器根据预先定义好的规则(规则是指匹配上对应字符之后,执行相应的动作),对基于Lex词法分析器处理过的sql变更语句进行处理,构建一课语法分析树。当处理一个语法分析树时,会创建一组状态,每个状态都对应一个或者多个分析过的规则中的可能的位置。当语法分析器读取记号(token)时,每当它读到的记号无法结束一条规则时,它将把这个记号压入一个内部堆栈,然后切换到一个新状态,这个新状态就能够反映出刚刚读取的记号。当压入栈内的所有的语法符号已经等价于一个规则的右部时,就把右部的这些符号全部从堆栈中弹出,然后把规则中的左部语法符号压入堆栈。
参考图5,图5为本发明实施例提供的一种构建语法分析树的示意图。示例性地,继续以sql变更语句为“select*from table1;”为例,并按照图5所示的流程对构建sql变更语句的语法分析树的过程进行描述。首先,调用sql.tab.c中的解析函数,对词法分析后的sql变更语句进行解析,得到select_statement的状态,将select_statement作为参数,去匹配语法规则,并执行相应的动作,即可构建一课语法树。即,按照语法规则,对select_statement(即select*from table1)可按照从上到下的顺序进行构建,首先构建出第一层级,该层级包括select、selection和table expression。再基于table expression构建出第二层级,该层级包括from clause和option order by clause。然后,基于from clause构建出第三层级,该层级包括from、table refer list和option where clause,并基于tablerefer list继续构建出第四层级table refer和第五层级table。由于sql变更语句“select*from table1;”中没有相应的order by clause和相应的where clause,因此无需构建。此外,由于sql变更语句“select*from table1;”中只有一个table1,因此也无需构建第四层级和第五层级。在构建语法分析树的过程中,如果语法分析树能够构建成功,则确认sql变更语句的语法验证通过,并将分析结果提交给影响分析模块。如果语法分析树构建失败,比如sql变更语句“select*from table1;”中缺少from(或table1等),则在构建第二层级时构建不出from clause,则可以确认sql变更语句的语法存在错误,并将sql变更语句和错误信息(比如缺少from的错误信息等)提交给指令优化模块,以使指令优化模块基于错误信息对sql变更语句进行语法调整,确定出语法正确的sql变更语句。然后将语法正确的sql变更语句发送给运维人员进行确认。
Step3:影响分析模块对sql变更语句进行影响结果分析,确定出sql变更语句在变更时所产生的影响结果信息。
影响分析模块在接收到语法分析模块发送的数据包后,对数据包进行解析处理,得到sql变更语句以及对应的分析结果,或者接收语法分析模块直接一起发送的sql变更语句以及对应的分析结果。并向数据库状态采集模块发送数据获取请求,该数据获取请求中包括影响分析模块的标识和目标变更对象。数据库状态采集模块在接收到数据获取请求后,对数据获取请求进行解析得到影响分析模块的标识和目标变更对象,并基于目标变更对象实时从生产数据库系统中获取对应的数据库表的状态信息,然后将数据库表的状态信息发送给影响分析模块的标识对应的影响分析模块。或者,数据库状态采集模块也可以预先从生产数据库系统中采集数据库表的状态信息,并存储在内存中,如此,在接收到数据获取请求后,对数据获取请求进行解析得到影响分析模块的标识和目标变更对象,并基于目标变更对象从内存中获取对应的数据库表的状态信息,然后将数据库表的状态信息发送给影响分析模块的标识对应的影响分析模块。
其中,数据库表的状态信息可以包括以下至少一项:数据库表容量大小(含索引)、数据库表行数大小、数据库表主键信息、数据库表索引信息、目标变更对象影响范围(行数)、数据库表访问热点情况(即数据库表访问请求频繁度)。
影响分析模块结合数据库表的状态信息和各影响策略条件,确定sql变更语句的变更是否对数据库存在异常影响。具体地,数据库表的状态信息包括各子状态信息,针对每个子状态信息,影响分析模块确定影响策略条件库中是否存在与该子状态信息匹配的影响策略条件,其中,影响策略条件库中存储有各影响策略条件。若存在,则确定sql变更语句的变更对数据库存在异常影响,并基于该子状态信息所匹配的影响策略条件从分析结果库中确定出影响结果,并将影响结果和sql变更语句提交到指令优化模块进行优化处理。若不存在,则确定sql变更语句的变更对数据库不存在异常影响,可直接在数据库中基于sql变更语句进行变更。
其中,示例性地,影响策略条件可以包括(1)数据库表容量大小>10Gb,需要结合访问热点情况,预测未来业务低谷时间段;(2)影响数据库行数超过100000行,需要进行拆分执行;(3)变更数据库sql变更语句缺失索引,且影响行数超过5000行等。在实际应用场景中,本领域技术人员可以根据经验或实际场景需要进行设置,本发明实施例对此并不作限定。
在一种可能的实现方式中,影响分析模块可以预先设置各影响策略条件所对应的影响结果,并将各影响策略条件所对应的影响结果存储在分析结果库中。在从分析结果库中确定出影响结果时,针对某一子状态信息,若该子状态信息从影响策略条件库中匹配出对应的影响策略条件,则可以基于该影响策略条件从分析结果库中匹配出对应的影响结果。
此外,影响分析模块使用记忆神经网络算法对采集到的数据库表访问热点情况进行分析预测,确定出针对数据库表访问热点情况的预测结果信息。示例性地,影响分析模块使用Lstm算法对数据库表访问热点情况进行分析预测,预测出一个未来的访问低谷时间段,该低谷时间段即为相对可靠的变更时间范围,以便sql变更语句在数据库的这个访问低谷时间段进行变更。然后,将该预测结果(即一个未来的低谷时间段)提交给指令优化模块。示例性地,假设数据库表访问热点情况的采集时刻为9:00,通过将该采集时刻的数据库表访问热点情况输入到Lstm算法中进行预测,即可预测出一个访问低谷时间段(比如15:00-15:30),并将该访问低谷时段作为sql变更脚本在数据库中进行变更的变更时段,以便sql变更脚本根据影响分析模块给出的访问低谷时间段(比如15:00-15:30)在数据库中进行变更,如此可以避免sql变更脚本在非访问低谷时间段进行变更时造成数据库表无法访问。其中,使用Lstm算法对数据库表访问热点情况进行分析预测的示意图可以如图6所示。
Step4:指令优化模块基于接收到的影响结果,从预设策略库中确定出对应的优化策略。
指令优化模块可以接收来自语法分析模块的影响结果,也可以接收来自影响分析模块的影响结果。针对每个影响结果,可以利用全文索引算法从预设策略库中匹配出对应的优化策略。其中,如图7所示,图7为本发明实施例提供的一种全文索引算法的过程示意图。基于图可知,指令优化模块所使用的全文索引算法主要分为两个过程,即索引创建(Indexing)和搜索索引(Search Index)。
其中,索引创建即为预先定义好各影响结果所对应的优化策略,并将预先定义好各影响结果所对应的优化策略存储在策略库中。示例性地,策略库中可以包括(1)sql变更语句语法错误时,则修正语法错误,给出正确的sql变更语句;(2)变更目标数据库表容量超过10Gb时,会根据影响分析模块中预测的建议变更时间段进行变更;(3)变更对象影响记录行数超过100000行时,会自动将该sql变更语句拆解生成多个变更指令,以减少每一次变更对数据库表的影响等。在实际应用场景中,本领域技术人员可以根据经验或实际场景需要进行设置,本发明实施例对此并不作限定。
在搜索索引时(即检索策略库,去匹配对应的优化策略),同样会生成一课语法树进行检索,对输入的检索语句(即影响结果)进行拆分,关键字识别(AND,NOT)等。对拆分的词元进行语言处理,再由关键字与处理后的词生成语法树。根据生成的语法树进行搜索,即可获得符合设定条件的文档列表。示例性地,如图8所示,图8为本发明实施例提供的一种基于A、B、C形成的语法树示意图。基于图8所示的语法树,则会搜索包含A、B、C的文档列表,然后用A和B的文档列表做交集,所得的结果集再与C做差集,最后得到的结果,就是符合搜索条件的文档列表。其中,A、B、C即为处理后的词。此外,通过向量空间模型的算法,可以得到结果的相关性。比较简单的实现描述如下:在建立索引的时候,得到了Inverse documentFrequency(逆向文件频率)和Term Frequency(词频),Term Frequency越高,说明文档的相关性越高;Inverse document Frequency越高,说明相关性越弱。根据上面的排序结果,就可以确定出最终的优化策略。示例性地,假设指令优化模块收到影响分析模块提交的影响结果为“变更目标数据库表容量超过10Gb,导致数据库表无法访问”,则可以从影响结果中确定出分词,比如“变更目标”、“数据库表容量”、“超过10Gb”等分词。再将“变更目标”、“数据库表容量”、“超过10Gb”等分词与预设策略库中的索引词进行逐一匹配,确定出多个匹配度,比如确定出6个匹配度,即0.89、0.8、0.75、0.65、0.6、0.5,假设匹配阈值为0.85,则将该6个匹配度都与匹配阈值进行比较,即可得出只有0.89大于0.85。因此,可以将匹配度0.89所对应的策略确定为用于优化造成数据库表无法访问的sql变更脚本,或者,直接将该6个匹配度进行比对,确定出最大匹配度,并将最大匹配度所对应的策略确定为用于优化造成数据库表无法访问的sql变更脚本,以便sql变更脚本根据影响分析模块给出的访问低谷时间段(比如15:00-15:30)在数据库中进行变更,如此可以避免sql变更脚本在非访问低谷时间段进行变更时造成数据库表无法访问,从而可以确保数据库表能够被正常的访问,并可以确保业务系统能够正常运行。
其中,对于新出现的优化策略(即新创建的索引),也会将该优化策略存储在策略库中。如图9所示,图9为本发明实施例提供的一种对新创建的索引进行存储的示意图。基于图,在确定新创建的索引较长时,可以将该新创建的索引拆分为两个或者两个以上的子索引进行存储在策略库中。比如,将某一较长的索引先拆分为子索引1和子索引2。再将子索引1和子索引2存储在策略库中。
上述实施例表明,由于现有技术依靠人工分析来评估sql变更脚本的变更影响,需要耗费一定的时间,且由于依赖人工分析会导致评估出的影响结果准确性不高。而该方案在确定sql变更脚本可成功执行时,可以自动获取目标变更对象关联的数据库表的状态信息,并对数据库表的状态信息进行影响结果分析,可以自动准确地确定出sql变更脚本在变更时所产生的第一分析结果信息。再基于第一分析结果信息,可以及时地从预设策略库中匹配出用于优化sql变更脚本的第一策略。基于此可知,该方案的自动化实现可以避免人工过多的介入,有助于减少依靠人工评估sql变更脚本的变更影响所耗费的时间和人力,从而可以提高评估sql变更脚本的变更影响的效率,进而可以解决现有技术中依赖运维人员评估sql变更脚本的变更影响所导致的评估效率低的问题,并可以解决现有技术中因人工的经验不同所导致的评估准确性不同的问题。此外,由于该方案可以基于第一策略对sql变更脚本进行自动优化,因此相对人工评估和优化来说,可以大大降低评估和优化所需的知识门槛,并且更加的安全可靠。
基于相同的技术构思,图10示例性的示出了本发明实施例提供的一种数据库变更脚本的评估装置,该装置可以执行数据库变更脚本的评估方法的流程。
如图10所示,该装置包括:
接收单元1001,用于接收针对数据库的结构化查询语言sql变更脚本;
处理单元1002,用于按照词语分析规则,确定所述sql变更脚本是否可执行;若可执行,则基于所述sql变更脚本中的目标变更对象,获取所述目标变更对象关联的数据库表的状态信息;根据所述数据库表的状态信息,确定所述sql变更脚本在变更时所产生的第一分析结果信息;基于所述第一分析结果信息,从预设策略库中匹配出用于优化所述sql变更脚本的第一策略;所述预设策略库中存储有分析结果信息及对应的策略。
可选地,所述处理单元1002具体用于:
基于词法分析规则对所述sql变更脚本进行词法分析,确定出所述sql变更脚本中的各关键字;
基于所述各关键字,利用语法分析规则对所述sql变更脚本进行语法分析,确定所述sql变更脚本是否符合语法规则,从而确定所述sql变更脚本是否可执行。
可选地,所述处理单元1002具体用于:
通过构建的关键字查找树,确定所述sql变更脚本中的各词汇;
针对每个词汇,确定关键字库中是否存在与所述词汇的哈希值相等的关键字;
若存在,则将所述词汇确定为关键字。
可选地,所述处理单元1002具体用于:
按照语法分析规则,以所述sql变更脚本中的各关键字作为构建语法分析树的参数,确定是否可构建出语法分析树;
若是,则确定所述sql变更脚本的语法正确,否则确定所述sql变更脚本的语法存在错误。
可选地,所述处理单元1002具体用于:
所述数据库表的状态信息包括以下至少一项:容量、行数、主键信息、索引信息、访问请求状态以及目标变更对象的影响范围。
可选地,所述处理单元1002具体用于:
针对所述数据库表的状态信息中每个子状态信息,确定所述子状态信息是否符合设定的影响策略条件;
若符合,则生成与所述子状态信息对应的影响结果信息,以及基于记忆神经网络模型对所述数据库表的状态信息进行预测,确定出预测结果信息;
将所述影响结果信息和所述预测结果信息确定为所述第一分析结果信息。
可选地,所述处理单元1002具体用于:
将所述数据库表的状态信息中当前时刻的数据库表访问热点信息输入到所述记忆神经网络模型进行分析预测,确定出在当前时刻之后所述数据库表的访问量处于低谷的时间段;
将所述时间段作为sql变更脚本在数据库中进行变更的变更时段。
可选地,所述处理单元1002还用于:
若确定所述sql变更脚本不可执行,则生成所述sql变更脚本的第二分析结果信息;
根据所述第二分析结果信息,从所述预设策略库中匹配出用于优化所述sql变更脚本的第二策略。
可选地,所述处理单元1002具体用于:
确定出所述第一分析结果信息的各分词;
基于所述各分词与所述预设策略库中的索引词的匹配情况,确定出匹配度;
若所述匹配度大于等于匹配阈值,将所述索引词对应的策略确定为所述第一策略;
基于所述第一策略,优化所述sql变更脚本。
基于相同的技术构思,本发明实施例还提供了一种计算设备,如图11所示,包括至少一个处理器1101,以及与至少一个处理器连接的存储器1102,本发明实施例中不限定处理器1101与存储器1102之间的具体连接介质,图11中处理器1101和存储器1102之间通过总线连接为例。总线可以分为地址总线、数据总线、控制总线等。
在本发明实施例中,存储器1102存储有可被至少一个处理器1101执行的指令,至少一个处理器1101通过执行存储器1102存储的指令,可以执行前述的数据库变更脚本的评估方法中所包括的步骤。
其中,处理器1101是计算设备的控制中心,可以利用各种接口和线路连接计算设备的各个部分,通过运行或执行存储在存储器1102内的指令以及调用存储在存储器1102内的数据,从而实现数据处理。可选的,处理器1101可包括一个或多个处理单元,处理器1101可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理下发指令。可以理解的是,上述调制解调处理器也可以不集成到处理器1101中。在一些实施例中,处理器1101和存储器1102可以在同一芯片上实现,在一些实施例中,它们也可以在独立的芯片上分别实现。
处理器1101可以是通用处理器,例如中央处理器(CPU)、数字信号处理器、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件,可以实现或者执行本发明实施例中公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者任何常规的处理器等。结合数据库变更脚本的评估方法实施例所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。
存储器1102作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块。存储器1102可以包括至少一种类型的存储介质,例如可以包括闪存、硬盘、多媒体卡、卡型存储器、随机访问存储器(Random AccessMemory,RAM)、静态随机访问存储器(Static Random Access Memory,SRAM)、可编程只读存储器(Programmable Read Only Memory,PROM)、只读存储器(Read Only Memory,ROM)、带电可擦除可编程只读存储器(Electrically Erasable Programmable Read-Only Memory,EEPROM)、磁性存储器、磁盘、光盘等等。存储器1102是能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。本发明实施例中的存储器1102还可以是电路或者其它任意能够实现存储功能的装置,用于存储程序指令和/或数据。
基于相同的技术构思,本发明实施例还提供了一种计算机可读存储介质,其存储有可由计算设备执行的计算机程序,当所述程序在所述计算设备上运行时,使得所述计算设备执行上述数据库变更脚本的评估方法的步骤。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

Claims (10)

1.一种数据库变更脚本的评估方法,其特征在于,包括:
接收针对数据库的结构化查询语言sql变更脚本;
按照词语分析规则,确定所述sql变更脚本是否可执行;
若可执行,则基于所述sql变更脚本中的目标变更对象,获取所述目标变更对象关联的数据库表的状态信息;
根据所述数据库表的状态信息,确定所述sql变更脚本在变更时所产生的第一分析结果信息;
基于所述第一分析结果信息,从预设策略库中匹配出用于优化所述sql变更脚本的第一策略;所述预设策略库中存储有分析结果信息及对应的策略。
2.如权利要求1所述的方法,其特征在于,所述按照词语分析规则,确定所述sql变更脚本是否可执行,包括:
基于词法分析规则对所述sql变更脚本进行词法分析,确定出所述sql变更脚本中的各关键字;
基于所述各关键字,利用语法分析规则对所述sql变更脚本进行语法分析,确定所述sql变更脚本是否符合语法规则,从而确定所述sql变更脚本是否可执行。
3.如权利要求2所述的方法,其特征在于,所述基于词法分析规则对所述sql变更脚本进行词法分析,确定出所述sql变更脚本中的各关键字,包括:
通过构建的关键字查找树,确定所述sql变更脚本中的各词汇;
针对每个词汇,确定关键字库中是否存在与所述词汇的哈希值相等的关键字;
若存在,则将所述词汇确定为关键字。
4.如权利要求2所述的方法,其特征在于,所述基于所述各关键字,利用语法分析规则对所述sql变更脚本进行语法分析,确定所述sql变更脚本是否符合语法规则,包括:
按照语法分析规则,以所述sql变更脚本中的各关键字作为构建语法分析树的参数,确定是否可构建出语法分析树;
若是,则确定所述sql变更脚本的语法正确,否则确定所述sql变更脚本的语法存在错误。
5.如权利要求1至4任一项所述的方法,其特征在于,所述根据所述数据库表的状态信息,确定所述sql变更脚本在变更时所产生的第一分析结果信息,包括:
针对所述数据库表的状态信息中每个子状态信息,确定所述子状态信息是否符合设定的影响策略条件;
若符合,则生成与所述子状态信息对应的影响结果信息,以及基于记忆神经网络模型对所述数据库表的状态信息进行预测,确定出预测结果信息;
将所述影响结果信息和所述预测结果信息确定为所述第一分析结果信息。
6.如权利要求5所述的方法,其特征在于,所述基于记忆神经网络模型对所述数据库表的状态信息进行预测,确定出预测结果信息,包括:
将所述数据库表的状态信息中当前时刻的数据库表访问热点信息输入到所述记忆神经网络模型进行分析预测,确定出在当前时刻之后所述数据库表的访问量处于低谷的时间段;
将所述时间段作为sql变更脚本在数据库中进行变更的变更时段。
7.如权利要求1所述的方法,其特征在于,所述方法还包括:
若确定所述sql变更脚本不可执行,则生成所述sql变更脚本的第二分析结果信息;
根据所述第二分析结果信息,从所述预设策略库中匹配出用于优化所述sql变更脚本的第二策略。
8.如权利要求1至4任一项所述的方法,其特征在于,从预设策略库中匹配出用于优化所述sql变更脚本的第一策略,包括:
确定出所述第一分析结果信息的各分词;
基于所述各分词与所述预设策略库中的索引词的匹配情况,确定出匹配度;
若所述匹配度大于等于匹配阈值,将所述索引词对应的策略确定为所述第一策略;
基于所述第一策略,优化所述sql变更脚本。
9.一种数据库变更脚本的评估装置,其特征在于,包括:
接收单元,用于接收针对数据库的结构化查询语言sql变更脚本;
处理单元,用于按照词语分析规则,确定所述sql变更脚本是否可执行;若可执行,则基于所述sql变更脚本中的目标变更对象,获取所述目标变更对象关联的数据库表的状态信息;根据所述数据库表的状态信息,确定所述sql变更脚本在变更时所产生的第一分析结果信息;基于所述第一分析结果信息,从预设策略库中匹配出用于优化所述sql变更脚本的第一策略;所述预设策略库中存储有分析结果信息及对应的策略。
10.一种计算设备,其特征在于,包括至少一个处理器以及至少一个存储器,其中,所述存储器存储有计算机程序,当所述程序被所述处理器执行时,使得所述处理器执行权利要求1至8任一权利要求所述的方法。
CN202110478503.XA 2021-04-30 2021-04-30 一种数据库变更脚本的评估方法及装置 Active CN113110866B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN202110478503.XA CN113110866B (zh) 2021-04-30 2021-04-30 一种数据库变更脚本的评估方法及装置
PCT/CN2021/134646 WO2022227566A1 (zh) 2021-04-30 2021-11-30 一种数据库变更脚本的评估方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110478503.XA CN113110866B (zh) 2021-04-30 2021-04-30 一种数据库变更脚本的评估方法及装置

Publications (2)

Publication Number Publication Date
CN113110866A CN113110866A (zh) 2021-07-13
CN113110866B true CN113110866B (zh) 2023-07-21

Family

ID=76720633

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110478503.XA Active CN113110866B (zh) 2021-04-30 2021-04-30 一种数据库变更脚本的评估方法及装置

Country Status (2)

Country Link
CN (1) CN113110866B (zh)
WO (1) WO2022227566A1 (zh)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113110866B (zh) * 2021-04-30 2023-07-21 深圳前海微众银行股份有限公司 一种数据库变更脚本的评估方法及装置
CN116245406B (zh) * 2023-02-09 2023-09-19 江苏省工商行政管理局信息中心 基于运维质量管理数据库的软件运维质量评价方法及系统
CN116310440A (zh) * 2023-03-16 2023-06-23 中国华能集团有限公司北京招标分公司 一种规则引擎使用方法
CN116108025B (zh) * 2023-04-14 2023-08-01 安元科技股份有限公司 一种数据虚拟化性能优化方法
CN116720628B (zh) * 2023-08-07 2023-11-03 建信金融科技有限责任公司 系统投产变更预测方法、装置、设备及存储介质
CN117331908B (zh) * 2023-08-23 2024-05-14 上海麦杰科技股份有限公司广州分公司 一种实时数据库在线扩容方法及系统装置
CN116955504B (zh) * 2023-09-21 2023-12-19 太平金融科技服务(上海)有限公司 一种数据处理方法、装置、电子设备和存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107368582A (zh) * 2017-07-21 2017-11-21 深信服科技股份有限公司 一种sql语句检测方法及系统
CN110209684A (zh) * 2019-06-03 2019-09-06 深圳前海微众银行股份有限公司 数据库ddl变更操作的跟踪方法、装置、系统及介质
CN110795455A (zh) * 2019-09-06 2020-02-14 中国平安财产保险股份有限公司 依赖关系解析方法、电子装置、计算机设备及可读存储介质

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7136868B2 (en) * 2003-06-06 2006-11-14 Microsoft Corporation Database object script generation method and system
CN113110866B (zh) * 2021-04-30 2023-07-21 深圳前海微众银行股份有限公司 一种数据库变更脚本的评估方法及装置

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107368582A (zh) * 2017-07-21 2017-11-21 深信服科技股份有限公司 一种sql语句检测方法及系统
CN110209684A (zh) * 2019-06-03 2019-09-06 深圳前海微众银行股份有限公司 数据库ddl变更操作的跟踪方法、装置、系统及介质
CN110795455A (zh) * 2019-09-06 2020-02-14 中国平安财产保险股份有限公司 依赖关系解析方法、电子装置、计算机设备及可读存储介质

Also Published As

Publication number Publication date
CN113110866A (zh) 2021-07-13
WO2022227566A1 (zh) 2022-11-03

Similar Documents

Publication Publication Date Title
CN113110866B (zh) 一种数据库变更脚本的评估方法及装置
CN111522816B (zh) 基于数据库引擎的数据处理方法、装置、终端及介质
US10489463B2 (en) Finding documents describing solutions to computing issues
CN110795455B (zh) 依赖关系解析方法、电子装置、计算机设备及可读存储介质
US7747641B2 (en) Modeling sequence and time series data in predictive analytics
US9916368B2 (en) Non-exclusionary search within in-memory databases
CN111814455B (zh) 搜索词纠错对构建方法、终端及存储介质
US20220365957A1 (en) Log parsing method and device, server and storage medium
CN102141990A (zh) 一种搜索方法和装置
US9141665B1 (en) Optimizing search system resource usage and performance using multiple query processing systems
US20220269884A1 (en) Document lineage management system
CN109344227A (zh) 工单处理方法、系统和电子设备
WO2015084757A1 (en) Systems and methods for processing data stored in a database
Hameed et al. SURAGH: Syntactic Pattern Matching to Identify Ill-Formed Records.
CN111694966A (zh) 面向化工领域的多层次知识图谱构建方法及系统
US9223833B2 (en) Method for in-loop human validation of disambiguated features
US20220300505A1 (en) Method, electronic device for obtaining hierarchical data structure and processing log entires
CN114020446A (zh) 一种跨多引擎的路由处理方法、装置、设备及存储介质
CN114372083A (zh) 元数据分析方法及装置
KR102622433B1 (ko) 데이터의 타입을 자동으로 판별하여 메타데이터를 생성하는 방법 및 이를 위한 머신러닝/딥러닝 모델을 이용한 데이터 타입 판별 장치
CN111143582A (zh) 一种双索引实时更新联想词的多媒体资源推荐方法及装置
US20240111736A1 (en) Semantic classification for data management
US11830081B2 (en) Automated return evaluation with anomoly detection
CN113064597B (zh) 一种冗余代码的识别方法、装置和设备
US11775869B1 (en) Validation of account identifier

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