一种基于云计算的sql语句处理系统的制作方法

文档序号:6633782阅读:280来源:国知局
一种基于云计算的sql语句处理系统的制作方法【专利摘要】本发明公开了一种基于云计算的SQL语句处理系统,包括编译解析器,用于将接收到的SQL语句或存储过程的文本转换为对应的原子对象;合并优化器,用于遍历每个SQL语句的原子对象,将具有相同内容的原子对象提取出来作为一个公用的原子对象;执行监控器,用于接收合并优化器处理后的原子对象,为每个原子对象分配独立的可执行组件,并由可执行组件的运行获取计算结果;数据适配器,数据适配器包括数据输入适配器和数据输出适配器,数据输入适配器用于从不同的数据源读取数据,并传递至编译解析器;数据输出适配器用于将执行监控器生成的计算结果写入至对应的数据源中。本发明提高了SQL语句处理速度,优化CPU和内存,降低流量消耗。【专利说明】—种基于云计算的SQL语句处理系统【
技术领域
】[0001]本发明涉及数据库处理领域,特别是一种基于云计算的SQL语句处理系统。【
背景技术
】[0002]目前支持云计算的sql语句系统中,对于同时批量提交2条以上的查询SQL语句,每条SQL语句都是单独执行,没有对SQL语句里面相同表达式和语句进行共享合并操作,导致多条SQL语句同时执行的情况下,系统的内存和CPU等占用急剧变大,运行的速度比单条SQL顺序执行时还要慢,有些系统则直接导致内存不足等现象,导致任务执行失败。【
发明内容】[0003]为解决上述问题,本发明的目的在于提供一种基于云计算的SQL语句处理系统,优化SQL语句的并行与串行操作,降低SQL语句处理时的内存与CPU消耗,提升SQL语句处理效率。[0004]本发明解决其问题所采用的技术方案是:一种基于云计算的SQL语句处理系统,包括:编译解析器,用于将接收到的SQL语句或存储过程的文本转换为对应的原子对象;合并优化器,用于遍历每个SQL语句的原子对象,将具有相同内容的原子对象提取出来作为一个公用的原子对象;执行监控器,用于接收合并优化器处理后的原子对象,为每个原子对象分配独立的可执行组件,并由可执行组件的运行获取计算结果。[0005]进一步,还包括数据适配器,所述数据适配器包括数据输入适配器和数据输出适配器,其中:所述数据输入适配器用于从不同的数据源读取数据,并传递至编译解析器;所述数据输出适配器用于将执行监控器生成的计算结果写入至对应的数据源中。[0006]进一步,所述存储过程的文本为SQL语句文本。[0007]进一步,所述编译解析器包括:语法判断单元,用于判断对应的SQL语句是否符合语法规定;解析单元,用于将符合语法规定的SQL语句分割为对应字段表达式和/或条件表达式;语法分析对象单元,用于将字段表达式和/或条件表达式转换成语法树;原子对象单元,用于将语法树里面的对象进一步分解为最小粒度的原子对象,所述最小粒度的原子对象包括字段、表名、函数和分组对象。[0008]进一步,所述最小粒度的原子对象被保存至一个hashmap对象中,且不同的原子对象,都具有唯一的⑶ID编号。[0009]进一步,所述合并优化器在提取公用的原子对象时,若原子对象的父亲节点是一个表达式对象,且所有原子对象的表达式对象内容相同,则提取该表达式对象作为公用的表达式对象,所述提取的公用的原子对象、表达式对象均被存入至公共内存池中。[0010]进一步,所述执行监控器包括:执行器,用于为为每个原子对象分配独立的可执行组件,每个组件分别在执行器中独立执行;监控器,用于记录每个可执行组件的开始时间、结束时间、占用CPU和内存及耗费网络流量参数,以优化可执行组件的串行与并行,获取本次计算中的关键路径和最优模型。[0011]本发明的有益效果是:本发明采用一种基于云计算的SQL语句处理系统,将SQL语句首先分割为原子对象,再对原子对象进行合并优化,提取出公用的原子对象或表达式对象,为每个原子或表达式对象分配单独的可执行组件,并监控执行过程,根据监控的每个可执行组件的开始时间、结束时间、占用CPU和内存及耗费网络流量等参数,确定哪些组件可以并行运行,哪些组件必须串行运行,并依此计算本次任务中的关键路径和最优模型,以便对系统性能等进行优化。本发明在分割原子对象时,每个原子对象均有唯一的GUID编号,方便记录及后续的合并优化;公共内存池中存储的不仅是原子对象,亦可以是原子对象的父亲节点——表达式对象,实现了大对象的共享功能;根据监控的开始时间、结束时间、占用CPU和内存及耗费网络流量等参数,及时判断哪些可执行组件可以并行和串行,从而计算本次任务中的关键路径和最优模型,提高运行速度,优化CPU和内存,降低流量消耗。【专利附图】【附图说明】[0012]下面结合附图和实例对本发明作进一步说明。[0013]图1是本发明优选实施例中所述系统的整体结构示意图;图2是本发明优选实施例中分割为原子对象后的语法树示意图;图3是本发明优选实施例中优化合并后的语法树示意图。【具体实施方式】[0014]实施例1:参照图1所示,本发明的优选实施例提供了一种基于云计算的SQL语句处理系统,包括:编译解析器,用于将接收到的SQL语句或存储过程的文本转换为对应的原子对象;合并优化器,用于遍历每个SQL语句的原子对象,将具有相同内容的原子对象提取出来作为一个公用的原子对象;执行监控器,用于接收合并优化器处理后的原子对象,为每个原子对象分配独立的可执行组件,并由可执行组件的运行获取计算结果。[0015]包含SQL语句的数据源具有多种,包括关系数据库、hadoop、hbase、hypertable等,为了能适应读取和写入不同的数据源和数据格式(包括文件或二进制等),本发明设置有数据适配器。所述数据适配器相当于为不同的数据源提供了统一的接口,即可用于从不同的数据源读取数据,也可用于将数据写入对应数据源。数据适配器在统一接口的同时,针对不同的数据源,单独编写不同的inputformat和outputformat对象,对不同的数据需要做单独的特殊优化和改进,充分利用各种不同的特点,实现数据读取和输入。数据适配器包括输入数据适配器和输出数据适配器,通过数据输入适配器从不同的数据源读取数据,并传递至编译解析器,当批量查询SQL执行完成后,系统调用输出数据适配器,将执行监控器生成的计算结果写入至对应的数据源中。[0016]编译解析器接收到存储过程的文本为SQL语句文本。所述编译解析器包括:语法判断单元,用于判断对应的SQL语句是否符合语法规定;解析单元,用于将符合语法规定的SQL语句分割为对应字段表达式和/或条件表达式;语法分析对象单元,用于将字段表达式和/或条件表达式转换成语法树;原子对象单元,用于将语法树里面的对象进一步分解为最小粒度的原子对象,所述最小粒度的原子对象包括字段、表名、函数和分组对象。[0017]当查询的SQL语句或存储过程的文本发送到编译解析器中后,语法判断单元首先进行语法判断,如果有不符合语法的文本,就会报出异常,直接退出;之后,解析单元将符合语法的文本对象(SQL语句),分割为字段表达式和条件表达式等;之后,语法分析对象单元将文本对象转成语法树;而原子对象单元再将语法树里面的对象进一步分解,一直分解成最小粒度的原子对象,其中最小粒度的原子对象包括字段、表名、函数和分组对象。系统会将原子对象保存到一个hashmap对象中,且不同的原子对象,都具有唯一的GUID编号。[0018]当编译解析器把文本解析成原子对象后,就进入到合并优化阶段。通过合并优化器遍历每个SQL语句的原子对象,把具有相同的内容的原子对象提取出来合并成一个公用的原子对象,存放到公共内存池中,语法树叶只是存放这个原子对象的引用。如果原子对象的父亲节点是一个表达式对象,且整个表达式对象的内容均相同,合并优化器则将此相同的表达式对象提取出来,合并成一个表达式对象,存放到公共内存对象池中,实现大对象的共享功能,如此类推,以合并优化整个子SQL语句。对于hadoop系统,其中原子对象按执行过程分,可以分为map阶段,combine过程和reduce阶段三种类型,即合并优化一个对象,最多可以减少3个过程处理。[0019]原子对象被优化合并后,全部被同时输入到执行监控器中。执行监控器包括执行器和监控器,在执行器中,每个原子对象都可以找到和自己对应的一个可执行组件,每个组件分别在执行器中独立执行。监控器会记录每个可执行组件的开始时间、结束时间、占用CPU和内存、耗费网络流量等参数。有了这些参数,系统即可确定哪些组件可以并行运行,哪些组件必须串行运行,以便计算本次任务中的关键路径和最优模型,对系统性能等进行优化。[0020]以上所述,本发明将SQL语句首先分割为原子对象,再对原子对象进行合并优化,提取出公用的原子对象或表达式对象,为每个原子或表达式对象分配单独的可执行组件,并监控执行过程,根据监控的每个可执行组件的开始时间、结束时间、占用CPU和内存及耗费网络流量等参数,确定哪些组件可以并行运行,哪些组件必须串行运行,并依此计算本次任务中的关键路径和最优模型,以便对系统性能等进行优化。本发明在分割原子对象时,每个原子对象均有唯一的GUID编号,方便记录及后续的合并优化;公共内存池中存储的不仅是原子对象,亦可以是原子对象的父亲节点——表达式对象,实现了大对象的共享功能;根据监控的开始时间、结束时间、占用CPU和内存及耗费网络流量等参数,及时判断哪些可执行组件可以并行和串行,从而计算本次任务中的关键路径和最优模型,提高运行速度,优化CPU和内存,降低流量消耗。[0021]实施例2:本优选实施例以具体的例子为说明,对本发明进行进一步解释。[0022]以批量提交的2条sql语句分别如下为例:SQLl:selecta,(a+b)asc,count(氺)fromtwherea+b>0groupbya,(a+b);SQL2:select(a+b)asc,count(氺)fromtwherea+b+d>100groupby(a+b)。[0023]参照图2所示,首先通过编译解析器,将每条sql语句循环分解成语法树,将树枝节点分解成最小粒度的原子对象(字段,表名,函数,分组对象),分解后的结果即图中显示内容。以SQLl为例,分解后,a,(a+b)asc为字段对象,countO)为函数对象,(a+b)asc中的a+b为为字段对象a、b与运算对象+的组合,表对象为t,查找条件为a+b>0,条件a+b>O同样是字段对象a、b与运算对象+的组合。SQL2的分解类似,详见图中的结果。[0024]之后,参照图3所示,通过合并优化器,合并语法树里面每个相同的子节点,形成公共内存池。其中(a+b)表达式对象在SQL语法树中不需要a和b这2个字段对象。公共内存池中⑶ID编号及对应原子对象或表达式对象亦参照图中所示。同样以SQLl为例,合并优化后,公共原子对象I为a,公共表达式对象3为a+b,公共的表对象4为t。SQL2合并优化后的结果见图中所述。[0025]之后,执行监控器将优化合并后的对象存入内存,并先执行公共内存池里面的对象,然后再分别并行执行2个SQL语法树。在hadoop执行的map,combine,reduce3个阶段分别找到对应的组件解释执行,如groupby对象作为map的key值,count(*)就是计数器加1,如果是a+b表达式,则调用表达式对象进行计算,如字段a只是通过数据适配器从hadoop等数据源里面读取一次数据后给2个SQL语法树进行计算。[0026]以上所述,只是本发明的较佳实施例而已,本发明并不局限于上述实施方式,只要其以相同的手段达到本发明的技术效果,都应属于本发明的保护范围。【权利要求】1.一种基于云计算的SQL语句处理系统,其特征在于,包括:编译解析器,用于将接收到的SQL语句或存储过程的文本转换为对应的原子对象;合并优化器,用于遍历每个SQL语句的原子对象,将具有相同内容的原子对象提取出来作为一个公用的原子对象;执行监控器,用于接收合并优化器处理后的原子对象,为每个原子对象分配独立的可执行组件,并由可执行组件的运行获取计算结果。2.根据权利要求1所述的SQL语句处理系统,其特征在于,还包括数据适配器,所述数据适配器包括数据输入适配器和数据输出适配器,其中:所述数据输入适配器用于从不同的数据源读取数据,并传递至编译解析器;所述数据输出适配器用于将执行监控器生成的计算结果写入至对应的数据源中。3.根据权利要求1所述的SQL语句处理系统,其特征在于,所述存储过程的文本为SQL语句文本。4.根据权利要求1所述的SQL语句处理系统,其特征在于,所述编译解析器包括:语法判断单元,用于判断对应的SQL语句是否符合语法规定;解析单元,用于将符合语法规定的SQL语句分割为对应字段表达式和/或条件表达式;语法分析对象单元,用于将字段表达式和/或条件表达式转换成语法树;原子对象单元,用于将语法树里面的对象进一步分解为最小粒度的原子对象,所述最小粒度的原子对象包括字段、表名、函数和分组对象。5.根据权利要求4所述的SQL语句处理系统,其特征在于,所述最小粒度的原子对象被保存至一个hashmap对象中,且不同的原子对象,都具有唯一的⑶ID编号。6.根据权利要求1所述的SQL语句处理系统,其特征在于,所述合并优化器在提取公用的原子对象时,若原子对象的父亲节点是一个表达式对象,且所有原子对象的表达式对象内容相同,则提取该表达式对象作为公用的表达式对象,所述提取的公用的原子对象、表达式对象均被存入至公共内存池中。7.根据权利要求1所述的SQL语句处理系统,其特征在于,所述执行监控器包括:执行器,用于为为每个原子对象分配独立的可执行组件,每个组件分别在执行器中独立执行;监控器,用于记录每个可执行组件的开始时间、结束时间、占用CPU和内存及耗费网络流量参数,以优化可执行组件的串行与并行,获取本次计算中的关键路径和最优模型。【文档编号】G06F17/30GK104391895SQ201410636239【公开日】2015年3月4日申请日期:2014年11月12日优先权日:2014年11月12日【发明者】别志铭,张健明,张勇鹏,王旭,王礼,吴楠申请人:珠海世纪鼎利通信科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1