一種用于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查詢命令生成執行計劃,判斷該執行計劃需查詢的表是否為數據庫中所配置的表,若是,則為該執