分布式数据库中聚合查询的方法及装置制造方法及图纸

技术编号:10577192 阅读:316 留言:0更新日期:2014-10-29 10:54
本发明专利技术公开了一种分布式数据库中聚合查询的方法及装置。所述方法包括:接收客户端发送来的原始SQL查询语句;获取所述原始SQL查询语句的查询列和条件子查询中的聚合函数;在所述聚合函数中,将针对多表计算的复杂聚合函数变换为简单聚合函数;根据所述简单聚合函数将所述原始SQL查询语句更新为新SQL查询语句;将所述新SQL查询语句分发至至少两个数据库进行查询,并接收返回的查询列的查询结果;根据所述查询结果和所述新SQL查询语句,计算获取所述原始SQL查询语句的查询结果。本发明专利技术实现了多机数据库中的聚合查询,而且不必在应用程序中编写聚合处理逻辑,减少了应用程序的开发时间。

【技术实现步骤摘要】
分布式数据库中聚合查询的方法及装置
本专利技术实施例涉及数据库查询技术,尤其涉及一种分布式数据库中聚合查询的方法及装置。
技术介绍
数据库一般通过数据表来存储数据,但数据量不一定是可控的,随着时间和业务的发展,数据库中的数据表会越来越多,数据表中的数据量也会越来越大。相应地,对数据表进行的增删改查等数据操作的开销也会越来越大。另外,一台服务器的硬件资源(CPU、磁盘、内存、IO等)是有限的,最终数据库所能承载的数据量、数据处理能力都将遭遇硬件资源的瓶颈,因此需要进行分库分表,即把原本存储于一个主机数据库中的数据分块存储到多个主机的数据库中,把原本存储于一个数据表中的数据分块存储到多个数据表中。多个主机的数据库,可称为多个数据节点。但是,进行分库分表将数据分布到多机数据库后,数据原本集中存储于一个数据表中的某一个或多个列将会转移到多个数据表,甚至多个数据库中,进行散列分布,则不再支持聚合查询。聚合查询,即通过包含一个聚合函数(如SUM或AVG等)来汇总来自多行信息的查询操作。
技术实现思路
有鉴于此,本专利技术实施例提供一种分布式数据库中聚合查询的方法及装置,以实现多机数据库中的聚合查询。第一方面,本专利技术实施例提供了一种分布式数据库中聚合查询的方法,所述方法包括:接收客户端发送来的原始SQL查询语句;获取所述原始SQL查询语句的查询列和条件子查询中的聚合函数;在所述聚合函数中,将针对多表计算的复杂聚合函数变换为简单聚合函数;根据所述简单聚合函数将所述原始SQL查询语句更新为新SQL查询语句;将所述新SQL查询语句分发至至少两个数据库进行查询,并接收返回的查询列的查询结果;根据所述查询结果和所述新SQL查询语句,计算获取所述原始SQL查询语句的查询结果。第二方面,本专利技术实施例还提供了一种分布式数据库中聚合查询的装置,所述装置包括:接收模块,用于接收客户端发送来的原始SQL查询语句;获取模块,用于获取所述原始SQL查询语句的查询列和条件子查询中的聚合函数;变换模块,用于在所述聚合函数中,将针对多表计算的复杂聚合函数变换为简单聚合函数;更新模块,用于根据所述简单聚合函数将所述原始SQL查询语句更新为新SQL查询语句;分发接收模块,用于将所述新SQL查询语句分发至至少两个数据库进行查询,并接收返回的查询列的查询结果;计算模块,用于根据所述查询结果和所述新SQL查询语句,计算获取所述原始SQL查询语句的查询结果。本专利技术实施例提供的分布式数据库中聚合查询的方法及装置,通过SQL节点获取原始SQL查询语句的查询列和条件子查询中的聚合函数,当存在复杂聚合函数时,将针对多表计算的复杂聚合函数变换为简单聚合函数,根据所述简单聚合函数将所述原始SQL查询语句更新为新SQL查询语句,将所述新SQL查询语句分发至至少两个数据库进行查询,并接收返回的查询列的查询结果,根据所述查询结果和所述新SQL查询语句,计算获取所述原始SQL查询语句的查询结果,以得到聚合查询的结果,实现了多机数据库中的聚合查询,而且不必在应用程序中编写聚合处理逻辑,减少了应用程序的开发时间。附图说明图1是本专利技术实施例一提供的一种分布式数据库中聚合查询的方法的流程图;图2是本专利技术实施例提供的分布式数据库中聚合查询的方法中的新SQL查询语句的形成流程图;图3是本专利技术实施例三提供的一种分布式数据库中聚合查询的装置的示意图。具体实施方式下面结合附图和实施例对本专利技术作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本专利技术,而非对本专利技术的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本专利技术相关的部分而非全部内容。实施例一图1是本专利技术实施例一提供的一种分布式数据库中聚合查询的方法的流程图,本实施例可适用于实现分布式数据库中的聚合查询。在分布式数据库中包括SQL(StructuredQueryLanguage,结构化查询语言)节点和至少一个数据节点,其中,SQL节点用于接收查询命令及根据查询命令进行计算,数据节点用于保存数据。该方法可以由SQL节点来执行,具体包括如下步骤:步骤110,接收客户端发送来的原始SQL查询语句。其中,原始SQL语句即在客户端人为输入的原始查询命令。客户端将该查询命令发送至SQL节点,SQL节点接收客户端发送来的原始SQL语句。原始SQL语句包含SELECT关键字、查询列、FROM关键字和表名,其中,查询列是SELECT关键字和FROM关键字之间的以逗号隔开的部分,查询列是该SQL语句需要查询获得的结果。查询列中可能包含聚合函数以实现聚合查询;FROM关键字和表名,表示从该表名所标识的数据表中获取查询列的数据作为查询结果;原始SQL语句还可能包含WHERE、GROUPBY和/或HAVING等关键字表示的子查询,例如,子查询可跟随FROM关键字和表名,表示从该数据表中有选择的获取查询列的数据。步骤120,获取所述原始SQL查询语句的查询列和条件子查询中的聚合函数。SQL节点对所述原始SQL查询语句进行语法解析,获取所述原始SQL查询语句的查询列中的聚合函数,如果所述原始SQL查询语句还包括条件子查询,同时,获取所述原始SQL查询语句的条件子查询中的聚合函数。步骤130,在所述聚合函数中,将针对多表计算的复杂聚合函数变换为简单聚合函数。其中,常用聚合函数为MAX(求最大值)、MIN(求最小值)、SUM(求和)、AVG(求平均值)、COUNT(求记录数)等,复杂聚合函数是可以表示成一个或者多个简单聚合函数的形式的聚合函数,在常用聚合函数中,AVG函数可以表示成SUM函数除以COUNT函数的形式,因此AVG函数为复杂聚合函数。在所述聚合函数中,当存在复杂聚合函数且复杂聚合函数针对多表计算时,SQL节点保存该复杂聚合函数,并根据关系代数等价变换将所述复杂聚合函数变换为简单聚合函数。步骤140,根据所述简单聚合函数将所述原始SQL查询语句更新为新SQL查询语句。在变换复杂聚合函数为简单聚合函数后,则相当于对原始SQL查询语句增加了包含变换后的简单聚合函数的查询列,而对于存在条件子查询的原始SQL语句,条件子查询中的复杂聚合函数也变换成了简单聚合函数,同时需要将变换后的条件子查询中的简单聚合函数添加到查询列中,同时保存条件子查询中的条件,去除条件子查询,则原始SQL查询语句更新为新SQL查询语句,所述新SQL查询语句不再包含条件子查询。步骤150,将所述新SQL查询语句分发至至少两个数据库进行查询,并接收返回的查询列的查询结果。由于数据进行分库分表后保存到了至少两个数据库中,SQL节点将所述新SQL查询语句分发至至少两个数据库(数据节点)中,所述至少两个数据库根据所述新SQL查询语句查询到自身保存的数据并对自身保存的数据进行计算,并将计算结果返回给SQL节点。步骤160,根据所述查询结果和所述新SQL查询语句,计算获取所述原始SQL查询语句的查询结果。由于所述新SQL查询语句还包含了原始SQL查询语句中的复杂聚合函数,而所述至少两个数据库也返回了该复杂聚合函数的查询结果,而该查询结果是不正确的,因此,需要根据该复杂聚合函数与变换后的简单聚合函数的关系来汇总来自至少两个数据库中的根据该复杂聚合函数变换后的简单聚合函数的查询结果,再根据汇本文档来自技高网...
分布式数据库中聚合查询的方法及装置

【技术保护点】
一种分布式数据库中聚合查询的方法,其特征在于,所述方法包括:接收客户端发送来的原始SQL查询语句;获取所述原始SQL查询语句的查询列和条件子查询中的聚合函数;在所述聚合函数中,将针对多表计算的复杂聚合函数变换为简单聚合函数;根据所述简单聚合函数将所述原始SQL查询语句更新为新SQL查询语句;将所述新SQL查询语句分发至至少两个数据库进行查询,并接收返回的查询列的查询结果;根据所述查询结果和所述新SQL查询语句,计算获取所述原始SQL查询语句的查询结果。

【技术特征摘要】
1.一种分布式数据库中聚合查询的方法,其特征在于,所述方法包括:接收客户端发送来的原始SQL查询语句;获取所述原始SQL查询语句的查询列和条件子查询中的聚合函数;在所述聚合函数中,将针对多表计算的复杂聚合函数变换为简单聚合函数;将所述简单聚合函数添加到原始SQL查询语句中,作为新查询列,以形成新SQL查询语句,并记录新查询列的位置以及简单聚合函数与复杂聚合函数的关联关系;记录所述条件子查询中的聚合函数的条件关系;将所述新SQL查询语句分发至至少两个数据库进行查询,并接收返回的查询列的查询结果;对所述至少两个数据库分别基于新查询列的查询结果进行综合计算,得到所述新查询列的查询结果;根据所述新查询列的查询结果和所述关联关系,计算复杂聚合函数的查询结果;根据所述条件关系和条件子查询的查询结果,计算所述原始SQL查询语句的查询结果。2.根据权利要求1所述的方法,其特征在于:所述复杂聚合函数为AVG函数,所述简单聚合函数为COUNT函数和SUM函数;所述条件子查询为HAVING条件。3.根据权利要求2所述的方法,其特征在于,所述新SQL查询语句的形成操作具体包括:通过解析器对所述原始SQL语句进行解析,以生成语法树,其中,所述语法树的节点对应于各查询列和条件子查询;对所述语法树的查询列节点和条件子查询节点进行扫描;如果存在条件子查询,则将所述条件子查询的条件关系添加到过滤列表中;如果所述查询列节点和条件子查询节点中存在聚合函数,则识别聚合函数类型;如果所述聚合函数为AVG函数,则将所述AVG函数替换为COUNT函数和SUM函数,并将COUNT函数和SUM函数添加为查询列,且将所述AVG函数、COUNT函数和SUM函数及其查询列位置记录到函数列表中,并记录所述AVG函数与COUNT函数和SUM函数的关联关系;如果所述聚合函数为非AVG函数,则将所述非AVG函数及其查询列位置记录到函数列表中。4.一种分布式数据库中聚合查询的装置,其特征在于,所述装置包括:接收模块,用于接收客户端发送来的...

【专利技术属性】
技术研发人员:唐超马丽伟秦波王锋赵晓平
申请(专利权)人:北京京东尚科信息技术有限公司北京京东世纪贸易有限公司
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1