一种用于Presto的SQL查询方法及系统的制作方法

文档序号:9667416阅读:724来源:国知局
一种用于Presto的SQL查询方法及系统的制作方法
【技术领域】
[0001]本发明属于交互式SQL查询领域,尤其涉及一种用于Presto的SQL查询方法及系统。
【背景技术】
[0002]Presto是一种纯内存的交互式SQL查询引擎,查询效率比Hive (基于Hadoop的一个数据仓库工具,提供简单的SQL查询功能)高出近10倍,能够跨越包括Hive、MySQL,Kafka在内的多种数据源进行查询,目前已成功应用在Facebook、Netflix、Dropbox、京东等知名互联网公司。
[0003]对于提交给Presto执行的SQL,Presto首先会对SQL进行解析并生成执行计划,然后再依据执行计划分配计算任务并执行,如图1所示。
[0004]在Presto使用过程中有时会遇到如下的问题:
[0005]1、SQL会频繁地执行;
[0006]2、执行时间较长但查询结果较小;
[0007]3、查询结果的实时性不高。
[0008]针对以上问题,目前Presto的解决方案为,针对每一个提交的SQL,分别生成执行计划,然后分配计算任务并执行。然而,由于每一个SQL执行的时间较长,对Presto计算的压力较大,对内存和CPU的消耗也较大,甚至可能导致内存溢出进而导致SQL执行失败。
[0009]缓存查询结果,加快查询速度并缓解Presto压力的方法。该方法针对实时性要求不高的SQL,能够缓存其查询结果,在一段时间内执行同样的SQL时,将不再执行Presto计算而是直接返回之前缓存的查询结果。该方法无需进行复杂的计算,能够有效减轻Presto的压力,对内存和CPU的消耗也不大。

【发明内容】

[0010](一)要解决的技术问题
[0011]本发明的目的在于,提供一种用于Presto的SQL查询方法及系统,能够为SQL查询缓存其查询结果,并在一定时间内再次执行同样的SQL查询时直接返回缓存的查询结果,提高SQL查询的效率,减少Presto的计算量,减少内存和CPU的消耗。
[0012](二)技术方案
[0013]本发明提供一种用于Presto的SQL查询方法,包括:
[0014]S1,配置数据库中需缓存的查询结果所在的表;
[0015]S2,接收SQL查询命令,并根据该SQL查询命令生成执行计划,判断该执行计划需查询的表是否为数据库中所配置的表,若是,则为该执行计划生成唯一标识;
[0016]S3,根据执行计划的唯一标识,查询缓存在分布式文件系统中的缓存表,并从该缓存表中得到查询结果。
[0017]本发明还提供一种用于Presto的SQL查询系统,包括:
[0018]配置模块,用于配置数据库中需缓存的查询结果所在的表;
[0019]标识生成模块,用于接收SQL查询命令,并根据该SQL查询命令生成执行计划,判断该执行计划需查询的表是否为数据库中所配置的表,若是,则为该执行计划生成唯一标识;
[0020]查询模块,用于根据执行计划的唯一标识,查询缓存在分布式文件系统中的缓存表,并从该缓存表中得到查询结果。
[0021](三)有益效果
[0022]本发明通过缓存查询结果,在一段时间内执行同样的SQL查询时,将不再执行Presto计算而是直接返回之前缓存的查询结果,加快查询速度,并缓解Presto压力,同时,也减少了对内存和CPU的消耗。
【附图说明】
[0023]图1是本发明实施例提供的用于Presto的SQL查询方法的流程图。
[0024]图2是本发明实施例提供的缓存表过期检查的流程图。
【具体实施方式】
[0025]本发明提供一种用于Presto的SQL查询方法及系统,方法首先配置数据库中需缓存的查询结果所在的表,然后根据SQL查询命令生成执行计划,并为该执行计划生成唯一标识,最后根据执行计划的唯一标识,查询缓存在分布式文件系统中的缓存表,并从该缓存表中得到查询结果。本发明在一段时间内执行同样的SQL查询时,将不再执行Presto计算而是直接返回之前缓存的查询结果,加快查询速度,并缓解Presto压力,同时,也减少了对内存和CPU的消耗。
[0026]根据本发明的一种实施方式,用于Presto的SQL查询方法包括:
[0027]S1,配置数据库中需缓存的查询结果所在的表;其中,表是数据在数据库中存储的载体,针对经常被查询的数据,可将其所在的表设定一个标签或添加一行数据,以表示该表需要被缓存。
[0028]S2,接收SQL查询命令,并根据该SQL查询命令生成执行计划,判断该执行计划需查询的表是否为数据库中所配置的表,若是,则为该执行计划生成唯一标识;其中,执行计划需要查询的表可能是一个表,也可能是多个表,只要有一个表是数据库中所配置的表,就为该执行计划生成唯一标识,该唯一标识可以是所配置的表的表名。
[0029]S3,根据执行计划的唯一标识,查询缓存在分布式文件系统中的缓存表,并从该缓存表中得到查询结果。其中,分布式文件系统可以是Hadoop分布式文件系统(HDFS),HDFS具有可靠性,即使有少量节点宕机,缓存表也不会丢失或遗漏数据。
[0030]根据本发明的一种实施方式,在步骤S3中,若唯一标识在分布式文件系统中不存在对应的缓存表,则根据执行计划在分布式文件系统中创建新的缓存表,并从新的缓存表中获取查询结果。其中,创建新的缓存表是指将数据库中对应的所配置的表存入分布式文件系统中。
[0031]根据本发明的一种实施方式,根据执行计划创建新的缓存表包括:根据执行计划将任务分配给至少一个节点,节点在数据库中执行任务以获取查询结果,根据该查询结果创建新的缓存表,并将该新的缓存表与所述唯一标识进行关联。
[0032]根据本发明的一种实施方式,在创建新的缓存表时,配置该缓存表在分布式文件系统中的缓存时间,通过开启一个后台线程,针对每一张缓存表,周期性检查其是否已经过期,当缓存表在分布式文件系统的存在时间大于所配置的缓存时间时,则确定该缓存表已过期,并将该缓存表在从分布式文件系统中删除。
[0033]根据本发明的一种实施方式,用于Presto的SQL查询系统包括:
[0034]配置模块,用于配置数据库中需缓存的查询结果所在的表;
[0035]标识生成模块,用于接收SQL查询命令,并根据该SQL查询命令生成执行计划,判断该执行计划需查询的表是否为数据库中所配置的表,若是,则为该执
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1