结构化查询语言程序的计算方法、调整方法和服务器的制造方法
【专利摘要】本申请涉及一种SQL程序的计算方法、调整方法和服务器。该方法包括:服务器获取待计算的原始SQL程序,该原始SQL程序携带有标识信息;根据所述原始SQL程序的标识信息,在优化数据库中提取所述标识信息对应的优化SQL程序;其中,所述优化SQL程序是所述服务器对原始数据库中的所有原始SQL程序进行分解和重组的优化处理后得到的,所述优化SQL程序包括优化逻辑结果;根据所述优化SQL程序的优化逻辑结果的内容,对所述优化SQL程序进行计算,以获得所述原始SQL程序的计算结果。本申请实施例提高了对原始SQL程序计算的效率,减轻了服务器对源数据的访问负担。
【专利说明】结构化查询语言程序的计算方法、调整方法和服务器
【技术领域】
[0001]本申请涉及数据查询领域,尤其涉及一种结构化查询语言SQL程序的计算方法、调整方法和服务器。
【背景技术】
[0002]随着互联网的快速发展,产生了大量的数据。对这些数据的操作,如查询等,占用了大量的计算资源。并且由于数据查询操作的相似性,导致大量信息的重复计算。例如,作为电子商务网站中,为完成数据操作,每天都要运行一万到两万个结构化查询语言(Structured Query Language, SQL)程序,在运行时,通过调度系统实现所有SQL程序的顺序调度。这些SQL程序看上去是为了解决各种各样的业务问题,但其本质上是对于源数据的类似操作,由于计算的相似性,导致大量的重复计算。
[0003]现有技术下,SQL程序的计算方法为:对每个需要运行的SQL程序都进行完整的计算。现有的SQL程序的计算方法的缺点是:很多SQL程序都是对源数据的类似操作,因此,对每个SQL程序都进行完整的计算相当于每次都对源数据进行扫描,在源数据量大的情况下,这种运算严重浪费了计算资源,而且延长了计算时间,计算效率低。
【发明内容】
[0004]本申请的目的是,提供一种SQL程序的计算方法、调整方法和服务器,以实现服务器自动对要进行运算的原始SQL程序进行调整得到优化SQL程序,提高对原始SQL程序计算的效率,以及减轻服务器对源数据的访问负担。
[0005]为实现上述目的,本申请提供了一种SQL程序的计算方法,所述方法包括:
[0006]服务器获取待计算的原始SQL程序,所述原始SQL程序携带有标识信息;
[0007]根据所述原始SQL程序的标识信息,在优化数据库中提取所述标识信息对应的优化SQL程序;其中,所述优化SQL程序是所述服务器对原始数据库中的所有原始SQL程序进行分解和重组的优化处理后得到的,所述优化SQL程序包括优化逻辑结果;
[0008]根据所述优化SQL程序的优化逻辑结果的内容,对所述优化SQL程序进行计算,以获得所述原始SQL程序的计算结果。
[0009]本申请还提供了一种SQL程序的调整方法,所述方法包括:
[0010]使用语法解析器对所有所述原始SQL程序按照最小的语法结构词进行拆分处理获得语法节点,并且将拆分后的所有语法节点按照各个节点之间的原始语法关系组装为一个语法树;
[0011]对所有原始SQL程序的语法节点组装后的所述语法树之间进行匹配运算,得到匹配的最大子树;
[0012]将所述匹配的最大子树的计算逻辑的所述优化逻辑结果保存在第二缓存表中;
[0013]使用第二缓存表中保存的所述计算逻辑的优化逻辑结果替换所述原始SQL程序中与所述匹配的最大子树对应的子程序,得到优化SQL程序。[0014]相应地,本申请还提供了一种服务器,所述服务器包括:
[0015]获取单元,用于服务器获取待计算的原始SQL程序,所述原始SQL程序携带有标识
信息;
[0016]提取单元,用于根据所述原始SQL程序的标识信息,在优化数据库中提取所述标识信息对应的优化SQL程序;其中,所述优化SQL程序是所述服务器对原始数据库中的所有原始SQL程序进行分解和重组的优化处理后得到的,所述优化SQL程序包括优化逻辑结果;
[0017]计算单元,用于根据所述优化SQL程序的优化逻辑结果的内容,对所述优化SQL程序进行计算,以获得所述原始SQL程序的计算结果。
[0018]相应地,本申请还提供了一种服务器,所述服务器包括:
[0019]建树单元,用于使用语法解析器对所有所述原始SQL程序按照最小的语法结构词进行拆分处理获得语法节点,并且将拆分后的所有语法节点按照各个节点之间的原始语法关系组装为一个语法树;
[0020]匹配单元,用于对所有原始SQL程序的语法节点组装后的所述语法树之间进行匹配运算,得到匹配的最大子树;
[0021]存储单元,用于将所述匹配的最大子树的计算逻辑的所述优化逻辑结果保存在第
二缓存表中;
[0022]替换单元,用于使用第二缓存表中保存的所述计算逻辑的优化逻辑结果替换所述原始SQL程序中与所述匹配的最大子树对应的子程序,得到优化SQL程序。
[0023]因此,本申请实现了服务器对大量的原始SQL程序进行分解和重组,得到优化SQL程序,并且对原始SQL程序公用的计算逻辑的优化逻辑结果存储在第二缓存表中,将优化逻辑结果的内容存储在第一缓存表中,使得对原始SQL的计算可以替换为对优化SQL程序的计算,提高了对原始SQL程序计算的效率,以及减轻了服务器对源数据的访问负担。
【专利附图】
【附图说明】
[0024]图1为本申请实施例提供的一种SQL程序的计算方法流程图;
[0025]图2为本申请实施例提供的一种SQL程序的调整方法流程图;
[0026]图3 (a)为本申请实施例提供的原始SQL程序I对应的树结构示意图;
[0027]图3 (b)为本申请实施例提供的原始SQL程序2对应的树结构示意图;
[0028]图3 (C)为本申请实施例提供的原始SQL程序I和原始SQL程序2的最大匹配子树示意图;
[0029]图4为本申请实施例提供的一种服务器的示意图;
[0030]图5为本申请实施例提供的一种服务器的示意图。
【具体实施方式】
[0031]下面通过附图和实施例,对本申请的技术方案做进一步的详细描述。
[0032]本申请提供的SQL程序的计算方法及服务器,通过对原始SQL程序进行分组和重组,提取到多个原始SQL程序中公用的计算逻辑,将该公用的计算逻辑及计算逻辑的优化逻辑结果保存在第二缓存表中,将该优化逻辑结果的内容保存在第一缓存表中,使用公用的计算逻辑的优化逻辑结果代替原始SQL程序中的匹配的公用的计算逻辑,构建出优化SQL程序,并将优化SQL程序保存在优化数据库中。在服务器对原始SQL程序进行计算时,服务器根据原始SQL程序的标识信息在优化数据库中获取对应的优化SQL程序,通过对优化SQL程序的计算完成对原始SQL程序的计算。从而实现服务器自动对要进行运算的原始SQL程序进行优化得到优化SQL程序,提高对原始SQL程序计算的效率,以及减轻服务器对源数据的访问负担。
[0033]本申请实施例提供的SQL程序的计算方法和服务器在实际应用时,作为一种新的计算方法可应用于被开源语法分析器Antlr支持的数据库系统的大数据处理方案中,在服务器对大量的SQL程序进行计算时,通过对原始SQL程序的分解和重组,提取到多个SQL程序中公用的计算逻辑,并将该公用的计算逻辑及该计算逻辑的优化逻辑结果保存在缓存表中,使用公用的优化逻辑结果代替原始SQL程序中的匹配的部分,构建出优化SQL程序。通过对SQL程序的计算实现对原始SQL程序的计算,提高了对原始SQL程序计算的效率,以及减轻了服务器对源数据的访问负担。
[0034]如图1所示,其为本申请实施例提供的一种SQL程序的计算方法流程图。该实施例主体是服务器,其中详细描述了如何对原始SQL程序进行计算。本申请实施例SQL程序的计算方法具体包括以下步骤:
[0035]步骤101,服务器获取待计算的原始SQL程序,所述原始SQL程序携带有标识信息;
[0036]具体地,当服务器需要对大量的原始SQL程序进行计算时,可以首先访问原始数据库,将要进行计算的数据库从原始数据库中提取出来。其中,原始数据库中保存了所有需要进行计算的原始SQL程序。每一个SQL程序都有一个唯一的标识信息,在原始数据库中除了保存SQL程序外,还保存了对应的SQL程序的标识信息。
[0037]步骤102,根据所述原始SQL程序的标识信息,在优化数据库中提取所述标识信息对应的优化SQL程序;其中,所述优化SQL程序是所述服务器对原始数据库中的所有原始SQL程序进行分解和重组的优化处理后得到的,所述优化SQL程序包括优化逻辑结果;
[0038]服务器在离线时,可以首先对原始数据库中的原始SQL程序进行优化调整,并将得到的优化SQL程序和原始SQL程序都按照相同的标识信息保存在优化数据库中。其中,优化数据库中保存了优化SQL程序和原始SQL程序,服务器在离线时可以对优化数据库中保存的优化SQL程序进行更新。
[0039]服务器对原始SQL程序的优化过程为:
[0040]I)使用语法解析器,对所有所述原始SQL程序按照最小的语法结构词进行拆分处理获得语法节点,并且将拆分后的所有语法节点按照各个节点之间的原始语法关系组装为一个语法树;
[0041]2)对所有原始SQL程序的语法节点组装后的所述语法树之间进行匹配运算,得到匹配的最大子树;
[0042]3)将所述匹配的最大子树的计算逻辑的所述优化逻辑结果保存在第二缓存表中;
[0043]4)使用第二缓存表中保存的所述计算逻辑的优化逻辑结果替换所述原始SQL程序中与所述匹配的最大子树对应的子程序,得到优化SQL程序。[0044]其中,所述匹配运算是指从语法树的叶节点开始向上扫描,匹配上一层相同的父节点及父节点的子节点,如果一致,则继续向上层匹配,当上层找不到匹配的节点时,则匹配操作结束,所得到的匹配节点所组成的子树就是两个原始SQL程序的匹配的最大子树。对于该匹配的最大子树,在语法上具有完整性,可以按照这个子树的计算逻辑及优化逻辑结果建立第二缓存表,并将这个子树的计算逻辑及优化逻辑结果放入第二缓存表中,这样所有具有该子树对应的子程序的原始SQL程序可以公用一份优化逻辑结果。而对于这个匹配的最大子树的计算逻辑的优化逻辑结果的内容,则可以保存在第一缓存表中。
[0045]所述的第一缓存表的格式是资源文件(Resource File,RCFile)格式,缓存表的各列的内容是匹配子树的计算逻辑的优化逻辑结果的内容,这样在SQL程序对应的语法中种包括该匹配子树的计算逻辑时,服务器便可以直接从第二缓存表中扫描该计算结果,而无须重新对大量的源数据进行计算。第二缓存表MySQL格式的缓存表,其中保存了匹配子树对应的计算逻辑,如匹配子树对应的SQL语句。
[0046]步骤103,根据所述优化SQL程序的优化逻辑结果的内容,对所述优化SQL程序进行计算,以获得所述原始SQL程序的计算结果。
[0047]在对优化SQL程序进行计算时,运算到优化SQL程序中的匹配子树对应的计算逻辑的优化逻辑结果时,可以直接访问第一缓存表中的优化逻辑结果的内容。
[0048]根据优化逻辑结果的内容,按照正常的SQL程序的计算方法,即可完成对优化SQL程序的计算,从而完成对原始SQL程序的计算。
[0049]本申请实施例通过服务器获取待计算的原始SQL程序,所述原始SQL程序携带有标识信息;根据所述原始SQL程序的标识信息,在优化数据库中提取所述标识信息对应的优化SQL程序;其中,所述优化SQL程序是所述服务器对原始数据库中的所有原始SQL程序进行分解和重组的优化处理后得到的,所述优化SQL程序包括优化逻辑结果;根据所述优化SQL程序的优化逻辑结果的内容,对所述优化SQL程序进行计算,以获得所述原始SQL程序的计算结果。由此提高了对原始SQL程序计算的效率,以及减轻了服务器对源数据的访问负担。
[0050]在一个优选的实施例中,如图1所示,在步骤101之后,还包括:
[0051]步骤104,根据所述SQL程序的标识信息,在所述优化数据库中不能获取到所述标识信息对应的优化SQL程序时,对所述原始SQL程序进行计算。
[0052]具体地,如果服务器不能在优化数据库中找到要计算的原始SQL程序的对应的优化SQL程序,则可以按照正常的计算方法对该程序进行计算。
[0053]在另一个优选的实施例中,如图1所示,在步骤102之前,还包括:
[0054]步骤104,对原始数据库中的所有原始SQL程序进行优化处理得到所述优化SQL程序,并将所述优化SQL程序保存在所述优化数据库中。
[0055]具体地,在对原始SQL程序进行计算之前,在离线情况下,可对原始数据库中的所有原始SQL程序进行优化处理,如果原始SQL程序可以进行优化,则可得到优化SQL程序,并保存在优化数据库中,否则不能得到优化SQL程序。
[0056]上述实施例描述了服务器对原始SQL程序进行计算的方法,下面的实施例介绍对原始SQL程序进行优化调整得到优化SQL程序的方法。如图2所示,其为本申请实施例提供的一种SQL程序的调整方法流程图。该实施例的执行主体是服务器,其中详细描述了服务器对原始SQL程序进行分解和重组的优化处理得到优化SQL程序的过程。本申请实施例具体包括以下步骤:
[0057]步骤201,使用语法解析器对所有所述原始SQL程序按照最小的语法结构词进行拆分处理获得语法节点,并且将拆分后的所有语法节点按照各个节点之间的原始语法关系组装为一个语法树;
[0058]使用语法解析器,如Antlr可以对每个SQL程序进行分解,分解到最小的粒度,然后按照每个粒度之间的语法关系进行组装,得到一个语法树。
[0059]例如,数据库中的源数据表包括表r_861161'、表s_child_user等。其中表r_seller 中包括列 Pt、列 user_id、列 nick 等,而表 s_child_user 包括 pt 列、列 L0GIN_ID等。
[0060]对于SQL程序1:
[0061]
【权利要求】
1.一种结构化查询语言SQL程序的计算方法,其特征在于,所述方法包括: 服务器获取待计算的原始SQL程序,所述原始SQL程序携带有标识信息; 根据所述原始SQL程序的标识信息,在优化数据库中提取所述标识信息对应的优化SQL程序;其中,所述优化SQL程序是所述服务器对原始数据库中的所有原始SQL程序进行分解和重组的优化处理后得到的,所述优化SQL程序包括优化逻辑结果; 根据所述优化SQL程序的优化逻辑结果的内容,对所述优化SQL程序进行计算,以获得所述原始SQL程序的计算结果。
2.根据权利要求1所述的SQL程序的计算方法,其特征在于,所述获取待计算的原始SQL程序之后,还包括:根据所述原始SQL程序的标识信息,在所述优化数据库中不能获取到所述标识信息对应的优化SQL程序时,对所述原始SQL程序进行计算。
3.根据权利要求1所述的SQL程序的计算方法,其特征在于,所述方法还包括: 将所述优化逻辑结果的内容存放于所述第一缓存表中。
4.根据权利要求1所述的SQL程序的计算方法,其特征在于,所述方法还包括:对原始数据库中的所有原始SQL程序进行优化处理得到所述优化SQL程序,并将所述优化SQL程序保存在所述优化数据库中。
5.根据权利要求4所述的SQL程序的计算方法,其特征在于,所述对原始数据库中的所有原始SQL程序进行分解和重组的优化处理得到所述优化SQL程序具体为: 使用语法解析器,对所`有所述原始SQL程序按照最小的语法结构词进行拆分处理获得语法节点,并且将拆分后的所有语法节点按照各个节点之间的原始语法关系组装为一个语法树; 对所有原始SQL程序的语法节点组装后的所述语法树之间进行匹配运算,得到匹配的最大子树; 将所述匹配的最大子树的计算逻辑的所述优化逻辑结果保存在第二缓存表中; 使用第二缓存表中保存的所述计算逻辑的优化逻辑结果替换所述原始SQL程序中与所述匹配的最大子树对应的子程序,得到优化SQL程序。
6.根据权利要求5所述的SQL程序的计算方法,其特征在于,所述使用第二缓存表中保存的所述计算逻辑替换所述原始SQL程序中与所述匹配的最大子树对应的子程序,得到优化SQL程序具体为: 使用所述第二缓存表中保存的所述的优化逻辑结果替换所述语法树中与所述优化逻辑结果所对应的最大子树相应的优化分支,所述优化分支是所述原始SQL程序中与所述匹配的最大子树对应的子程序的树形结构; 从所述优化分支向所述语法树的根部扫描,得到所述优化SQL程序的树形结构,从而得到所述优化SQL程序。
7.根据权利要求5所述的SQL程序的计算方法,其特征在于,所述使用所述第二缓存表中保存的所述的优化逻辑结果替换所述语法树中与所述优化逻辑结果所对应的最大子树相应的优化分支之前还包括: 使用语法解析器对每一条所述原始SQL程序按照最小的语法结构进行拆分处理,并且将拆分后的所有语法节点按照各个粒度之间的语法关系组装为一个语法树。
8.—种结构化查询语言SQL程序的调整方法,其特征在于,所述方法包括:使用语法解析器对所有所述原始SQL程序按照最小的语法结构词进行拆分处理获得语法节点,并且将拆分后的所有语法节点按照各个节点之间的原始语法关系组装为一个语法树; 对所有原始SQL程序的语法节点组装后的所述语法树之间进行匹配运算,得到匹配的最大子树; 将所述匹配的最大子树的计算逻辑的所述优化逻辑结果保存在第二缓存表中; 使用第二缓存表中保存的所述计算逻辑的优化逻辑结果替换所述原始SQL程序中与所述匹配的最大子树对应的子程序,得到优化SQL程序。
9.根据权利要求8所述的SQL程序的计算方法,其特征在于,所述使用第二缓存表中保存的所述计算逻辑替换所述原始SQL程序中与所述匹配的最大子树对应的子程序,得到优化SQL程序具体为: 使用所述第二缓存表中保存的所述的优化逻辑结果替换所述语法树中与所述优化逻辑结果所对应的最大子树相应的优化分支,所述优化分支是所述原始SQL程序中与所述匹配的最大子树对应的子程序的树形结构; 从所述优化分支向所述语法树的根部扫描,得到所述优化SQL程序的树形结构,从而得到所述优化SQL程序。
10.根据权利要求8所述的SQL程序的计算方法,其特征在于,所述使用所述第二缓存表中保存的所述的优化逻辑结果替换所述语法树中与所述优化逻辑结果所对应的最大子树相应的优化分支之前还包括: 使用语法解析器对每一条所述原始SQL程序按照最小的语法结构进行拆分处理,并且将拆分后的所有语法节点按照各个粒度之间的语法关系组装为一个语法树。
11.一种服务器,其特征在于,所述服务器包括: 获取单元,用于服务器获取待计算的原始SQL程序,所述原始SQL程序携带有标识信息; 提取单元,用于根据所述原始SQL程序的标识信息,在优化数据库中提取所述标识信息对应的优化SQL程序;其中,所述优化SQL程序是所述服务器对原始数据库中的所有原始SQL程序进行分解和重组的优化处理后得到的,所述优化SQL程序包括优化逻辑结果; 计算单元,用于根据所述优化SQL程序的优化逻辑结果的内容,对所述优化SQL程序进行计算,以获得所述原始SQL程序的计算结果。
12.一种服务器,其特征在于,所述服务器包括: 建树单元,用于使用语法解析器对所有所述原始SQL程序按照最小的语法结构词进行拆分处理获得语法节点,并且将拆分后的所有语法节点按照各个节点之间的原始语法关系组装为一个语法树; 匹配单元,用于对所有原始SQL程序的语法节点组装后的所述语法树之间进行匹配运算,得到匹配的最大子树; 存储单元,用于将所述匹配的最大子树的计算逻辑的所述优化逻辑结果保存在第二缓存表中; 替换单元,用于使用第二缓存表中保存的所述计算逻辑的优化逻辑结果替换所述原始SQL程序中与所述匹配的最大子树对应的子程序,得到优化SQL程序。
【文档编号】G06F17/30GK103729379SQ201210392343
【公开日】2014年4月16日 申请日期:2012年10月16日 优先权日:2012年10月16日
【发明者】黄明 申请人:阿里巴巴集团控股有限公司