一种sql语句处理方法及装置的制作方法

文档序号:6377705阅读:85来源:国知局

专利名称::一种sql语句处理方法及装置的制作方法
技术领域
:本发明涉及数据库
技术领域
,尤其涉及ー种SQL语句处理方法及装置。
背景技术
:MySQL是ー种关联数据库管理系统,其使用的SQL(StructuredQueryLanguage,结构化查询语言)是用于访问数据库的最常用标准化语言。在现有的MySQL技术中,MySQLProxy是ー个处于客户端和MySQL服务器端之间的一个应用程序,作为中间层代理,负责将前台应用客户端的连接请求转发给后台的数据库,并且通过使用Iua脚本,可以实现复杂的连接控制和过滤,从而实现读写分离和负载平衡。对于应用客户端来说,MySQLProxy是完全透明的,应用客户端则只需要连接到MySQLProxy的监听端ロ即可。随着对于海量数据存储和查询的需要,现有技术中出现了公有云计算的分布式数据库集群技术,在实际应用中,经常会有大量应用客户端向数据库集群请求进行一些数据库处理操作,而且,其中还可能包括ー些不良的,甚至是恶意的请求操作,导致数据库集群的整体负载较高,降低了进行数据库处理操作的效率,并影响了对其他客户端的正常请求的处理。然而,将MySQLProxy引入到数据库集群技术中,也仅是能实现连接控制、读写分离和负载平衡等,而无法对请求进行数据库处理操作的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语句,从而提高了数据库运行性能。附图用来提供对本发明的进ー步理解,并且构成说明书的一部分,与本发明实施例一起用于解释本发明,并不构成对本发明的限制。在附图中图I为本发明实施例提供的SQL语句处理方法的流程图;图2为本发明实施例I提供的SQL语句处理方法的流程图;图3为本发明实施例2提供的SQL语句处理方法的流程图;图4为本发明实施例3提供的SQL语句处理装置的结构示意图。具体实施例方式为了给出提高数据库运行性能的实现方案,本发明实施例提供了ー种SQL语句处理方法及装置,以下结合说明书附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。并且在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互組合。本发明实施例提供ー种SQL语句处理方法,如图I所示,包括步骤101、获取请求进行数据库处理操作的SQL语句。步骤102、对该SQL语句进行结构分析,得到分析結果。步骤103、根据分析结果,确定按照该SQL语句进行数据库处理操作时所表征的基准行数,基准行数为进行数据库处理操作时需要查询的数据行数。步骤104、当确定的基准行数小于行数阈值时,确定按照该SQL语句进行数据库处理操作,否则,确定取消按照该SQL语句进行数据库处理操作。进ー步的,在执行步骤102之前,可以判断该SQL语句的类型,并针对指定类型的SQL语句进入后续的分析处理,指定类型可以根据实际需要进行设置,例如,将可能导致数据库负载较大增长的SQL语句的类型设置为指定类型,具体可以包括选择类型(select)、更新类型(update)、删除类型(delete)、创建索引类型(createindex)和修改表结构类型(altertable)。进ー步的,在上述步骤102中对该SQL语句进行结构分析时,具体可以根据该SQL语句的类型,按照与其类型对应的分析方式,对该SQL语句进行结构分析;也可以当该SQL语句为选择类型语句时,按照与选择类型语句对应的分析方式,对该SQL语句进行结构分析,当该SQL语句非选择类型语句时,将该SQL语句转换为选择类型语句,按照与选择类型语句对应的分析方式,对转换后的SQL语句进行结构分析。其中,由于在实现时,相比对各种类型的SQL语句的分析,对SQL语句的类型转换更容易,所以,采用第二种方式将SQL语句转换为统一的选择类型语句,再进行结构分析,能够提高本方案的处理效率。进一步的,本发明实施例中针对上述步骤103和步骤104的处理,也提出了更详细的处理流程,下面结合附图,用具体实施例对本发明提供的方法及装置进行详细描述。实施例I:图2所示为本发明实施例I提供的SQL语句处理方法的流程图,具体包括如下处理步骤步骤201、获取请求进行数据库处理操作的SQL语句。该SQL语句可以为应用客户端向数据库系统发送的用于请求进行数据库处理操作的SQL语句,本发明实施例I中,在该SQL语句到达数据库系统,并按照该SQL语句进行相应处理操作之前,可以先获取该SQL语句,并按照后续的处理流程对其进行处理,以判定该SQL语句是否会引起数据库系统负载的较大增长,从而确定是否按照该SQL语句进行数据库处理操作。其中,该数据库系统可以为公有云计算的分布式数据库集群,可以为其它类型的数据库系统。步骤202、确定该SQL语句是否为指定类型的SQL语句,如果不是,进入步骤203,如果是,进入步骤204。其中,指定类型可以根据实际需要进行设置,例如,将可能导致数据库负载较大的SQL语句的类型设置为指定类型,具体可以包括选择类型(select)、更新类型(update)、删除类型(delete)、创建索引类型(createindex)和修改表结构类型(altertable)。步骤203、当该SQL语句不是指定类型的SQL语句时,或者,从后续的步骤212进入本步骤,即当该SQL语句进行数据库处理操作时所表征的基准行数小于行数阈值时,表示该SQL语句不会引起数据库系统负载的较大增长,所以确定按照该SQL语句进行数据库处理操作,具体可以将该SQL语句转发至数据库系统,由数据库系统按照该SQL语句进行相应的处理操作。步骤204、当该SQL语句是指定类型的SQL语句时,表示该SQL语句可能会引起数据库系统负载的较大增长,所以需要通过对其进行结构分析,以便作进一步的判定。本步骤中,首先确定该SQL语句是否为选择类型语句,如果不是,进入步骤205,如果是,进入步骤206。步骤205、将该SQL语句转换为选择类型语句。具体可以基于该非选择类型的SQL语句中用于表征类型的类型标记,确定该SQL语句的类型,并根据该SQL语句的类型,从该SQL语句中提取对应的内容信息,并基于所提取的内容信息生成该SQL语句对应的转换后的选择类型的SQL语句。例如,针对更新类型的SQL语句在进行转换时,提取的内容信息可以包括别名、表名和条件(where)语句;针对删除类型的SQL语句在进行转换时,提取的内容信息可以包括标识、表名和条件语句;针对创建索引类型的SQL语句在进行转换时,提取的内容信息可以包括表名;针对修改表结构类型的SQL语句在进行转换时,提取的内容信息可以包括表名。步骤206、针对由上述步骤204中确定的为选择类型的SQL语句,以及上述步骤205中经过转换后的为选择类型的SQL语句,本步骤中,按照与选择类型语句对应的分析方式,对该SQL语句进行结构分析,并得到分析结果。具体的,可以通过对该SQL语句进行结构分析,确定该SQL语句包括的各子语句块的类型,以及包括的各子语句块表征的基准行数,以及该SQL语句中是否包括限制(limit)参数,即该SQL语句最外层是否附带了限制参数,以及该SQL语句中是否包括外排序参数,即该SQL语句最外层是否附带了外排序参数,以及该SQL语句中是否包括索引参数。下面对分析结果中SQL语句包括的各子语句块的类型和表征的基准行数举例描述如下表I所示为该SQL语句包括的各子语句块的第一种情况。表I权利要求1.一种结构化查询语言SQL语句处理方法,其特征在于,包括获取请求进行数据库处理操作的SQL语句;对所述SQL语句进行结构分析,得到分析结果;根据所述分析結果,确定按照所述SQL语句进行数据库处理操作时所表征的基准行数,所述基准行数为进行数据库处理操作时需要查询的数据行数;当确定的所述基准行数小于行数阈值时,确定按照所述SQL语句进行数据库处理操作,否则,确定取消按照所述SQL语句进行数据库处理操作。2.如权利要求I所述的方法,其特征在于,在对所述SQL语句进行结构分析之前,还包括确定所述SQL语句为指定类型的SQL语句。3.如权利要求I所述的方法,其特征在干,对所述SQL语句进行结构分析,具体包括当所述SQL语句为选择类型语句吋,按照与选择类型语句对应的分析方式,对所述SQL语句进行结构分析;当所述SQL语句为非选择类型语句时,将所述SQL语句转换为选择类型语句,按照与选择类型语句对应的分析方式,对转换后的SQL语句进行结构分析。4.如权利要求I所述的方法,其特征在干,对所述SQL语句进行结构分析,得到分析结果,具体包括对所述SQL语句进行结构分析,确定所述SQL语句包括的各子语句块的类型,以及所述各子语句块表征的基准行数,以及所述SQL语句中是否包括限制參数,以及所述SQL语句中是否包括外排序參数,以及所述SQL语句中是否包括索引參数。5.如权利要求4所述的方法,其特征在于,根据所述分析結果,确定按照所述SQL语句进行数据库处理操作时所表征的基准行数,具体包括按照所述SQL语句所包括的各子语句块从前到后的顺序,对所述各子语句块进行分组,其中,每个分组中的第一个子语句块的类型为简单类型或者原始类型,且每个分组中除第一个子语句块外不包括简单类型和原始类型的子语句块;针对每个分组包括的各子语句块的类型和表征的基准行数,采用如下步骤确定该分组表征的基准行数按照该分组包括的各子语句块的先后顺序,从该分组中第二个子语句块开始,依次确定每个子语句块对应的中间基准行数,并将该分组中最后一个子语句块对应的中间基准行数作为该分组表征的基准行数,其中,当子语句块的类型为联合类型或依赖联合类型时,该子语句块对应的中间基准行数为前ー个子语句块对应的中间基准行数和该子语句块表征的基准行数的乘积,当子语句块的类型为子查询类型、依赖子查询类型或派生类型时,该子语句块对应的中间基准行数为前ー个子语句块对应的中间基准行数和该子语句块表征的基准行数中的最小值,该分组中的第一个子语句块对应的中间基准行数为第一个子语句块表征的基准行数;确定各分组表征的基准行数的和值;根据所述SQL语句中是否包括限制參数,以及是否包括外排序參数,对所述和值进行加减修正,得到第一修正值;根据所述SQL语句中是否包括索引參数,对所述第一修正值进行倍数修正,得到所述SQL语句进行数据库处理操作时所表征的基准行数。6.如权利要求4所述的方法,其特征在于,在确定按照所述SQL语句进行数据库处理操作时所表征的基准行数之前,还包括确定所述SQL语句中不包括限制參数,以及所述SQL语句中包括外排序參数。7.如权利要求6所述的方法,其特征在于,根据所述分析結果,确定按照所述SQL语句进行数据库处理操作时所表征的基准行数,具体包括按照所述SQL语句所包括的各子语句块从前到后的顺序,对所述各子语句块进行分组,其中,每个分组中的第一个子语句块的类型为简单类型或者原始类型,且每个分组中除第一个子语句块外不包括简单类型和原始类型的子语句块;针对每个分组包括的各子语句块的类型和表征的基准行数,采用如下步骤确定该分组表征的基准行数按照该分组包括的各子语句块的先后顺序,从该分组中第二个子语句块开始,依次确定每个子语句块对应的中间基准行数,并将该分组中最后一个子语句块对应的中间基准行数作为该分组表征的基准行数,其中,当子语句块的类型为联合类型或依赖联合类型时,该子语句块对应的中间基准行数为前ー个子语句块对应的中间基准行数和该子语句块表征的基准行数的乘积,当子语句块的类型为子查询类型、依赖子查询类型或派生类型时,该子语句块对应的中间基准行数为前ー个子语句块对应的中间基准行数和该子语句块表征的基准行数中的最小值,该分组中的第一个子语句块对应的中间基准行数为第一个子语句块表征的基准行数;确定各分组表征的基准行数的和值;根据所述SQL语句中是否包括索引參数,对所述和值进行倍数修正,得到所述SQL语句进行数据库处理操作时所表征的基准行数。8.一种结构化查询语言SQL语句处理装置,其特征在于,包括获取单元,用于获取请求进行数据库处理操作的SQL语句;分析単元,用于对所述SQL语句进行结构分析,得到分析结果;第一确定单元,用于根据所述分析結果,确定按照所述SQL语句进行数据库处理操作时所表征的基准行数,所述基准行数为进行数据库处理操作时需要查询的数据行数;第二确定单元,用于当确定的所述基准行数小于行数阈值时,确定按照所述SQL语句进行数据库处理操作,否则,确定取消按照所述SQL语句进行数据库处理操作。9.如权利要求8所述的装置,其特征在于,所述分析単元,还用于在对所述SQL语句进行分析之前,确定所述SQL语句为指定类型的SQL语句。10.如权利要求8所述的装置,其特征在于,所述分析単元,具体用于当所述SQL语句为选择类型语句时,按照与选择类型语句对应的分析方式,对所述SQL语句进行结构分析;以及当所述SQL语句为非选择类型语句时,将所述SQL语句转换为选择类型语句,按照与选择类型语句对应的分析方式,对转换后的SQL语句进行结构分析。11.如权利要求8所述的装置,其特征在干,所述分析単元,具体用于对所述SQL语句进行结构分析,确定所述SQL语句包括的各子语句块的类型,以及所述各子语句块表征的基准行数,以及所述SQL语句中是否包括限制參数,以及所述SQL语句中是否包括外排序參数,以及所述SQL语句中是否包括索引參数。12.如权利要求11所述的装置,其特征在于,所述第一确定单元,具体用于按照所述SQL语句所包括的各子语句块从前到后的顺序,对所述各子语句块进行分组,其中,每个分组中的第一个子语句块的类型为简单类型或者原始类型,且每个分组中除第一个子语句块外不包括简单类型和原始类型的子语句块;并针对每个分组包括的各子语句块的类型和表征的基准行数,采用如下步骤确定该分组表征的基准行数按照该分组包括的各子语句块的先后顺序,从该分组中第二个子语句块开始,依次确定每个子语句块对应的中间基准行数,并将该分组中最后一个子语句块对应的中间基准行数作为该分组表征的基准行数,其中,当子语句块的类型为联合类型或依赖联合类型时,该子语句块对应的中间基准行数为前ー个子语句块对应的中间基准行数和该子语句块表征的基准行数的乘积,当子语句块的类型为子查询类型、依赖子查询类型或派生类型时,该子语句块对应的中间基准行数为前ー个子语句块对应的中间基准行数和该子语句块表征的基准行数中的最小值,该分组中的第一个子语句块对应的中间基准行数为第一个子语句块表征的基准行数;确定各分组表征的基准行数的和值;并根据所述SQL语句中是否包括限制參数,以及是否包括外排序參数,对所述和值进行加減修正,得到第一修正值;以及根据所述SQL语句中是否包括索引參数,对所述第一修正值进行倍数修正,得到所述SQL语句进行数据库处理操作时所表征的基准行数。13.如权利要求11所述的装置,其特征在于,所述第一确定单元,还用于在确定按照所述SQL语句进行数据库处理操作时所表征的基准行数之前,确定所述SQL语句中不包括限制參数,以及所述SQL语句中包括外排序參数。14.如权利要求13所述的装置,其特征在干,所述第一确定单元,具体用于按照所述SQL语句所包括的各子语句块从前到后的顺序,对所述各子语句块进行分组,其中,每个分组中的第一个子语句块的类型为简单类型或者原始类型,且每个分组中除第一个子语句块外不包括简单类型和原始类型的子语句块;并针对每个分组包括的各子语句块的类型和表征的基准行数,采用如下步骤确定该分组表征的基准行数按照该分组包括的各子语句块的先后顺序,从该分组中第二个子语句块开始,依次确定每个子语句块对应的中间基准行数,并将该分组中最后一个子语句块对应的中间基准行数作为该分组表征的基准行数,其中,当子语句块的类型为联合类型或依赖联合类型时,该子语句块对应的中间基准行数为前ー个子语句块对应的中间基准行数和该子语句块表征的基准行数的乘积,当子语句块的类型为子查询类型、依赖子查询类型或派生类型时,该子语句块对应的中间基准行数为前ー个子语句块对应的中间基准行数和该子语句块表征的基准行数中的最小值,该分组中的第一个子语句块对应的中间基准行数为第一个子语句块表征的基准行数;确定各分组表征的基准行数的和值;井根据所述SQL语句中是否包括索引參数,对所述和值进行倍数修正,得到所述SQL语句进行数据库处理操作时所表征的基准行数。全文摘要本发明公开了一种SQL语句处理方法及装置,包括获取请求进行数据库处理操作的SQL语句;并对该SQL语句进行结构分析,得到分析结果;并根据分析结果,确定按照该SQL语句进行数据库处理操作时所表征的基准行数,基准行数为进行数据库处理操作时需要查询的数据行数;以及当确定的基准行数小于行数阈值时,确定按照该SQL语句进行数据库处理操作,否则,确定取消按照该SQL语句进行数据库处理操作。采用本发明实施例提供的方案,提高了数据库运行性能。文档编号G06F17/30GK102915344SQ201210361178公开日2013年2月6日申请日期2012年9月25日优先权日2012年9月25日发明者丛磊,王利俊,郑志勇申请人:新浪网技术(中国)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1