本發(fā)明屬于計(jì)算機(jī)的查詢優(yōu)化領(lǐng)域,尤其涉及一種函數(shù)式查詢方法及系統(tǒng)。
背景技術(shù):
::關(guān)系型數(shù)據(jù)庫(kù)的查詢計(jì)劃以二叉樹形式組織,從葉節(jié)點(diǎn)向上,通過各個(gè)節(jié)點(diǎn)的計(jì)算,最終匯總為查詢結(jié)果,當(dāng)涉及多表連接時(shí),單線程進(jìn)行數(shù)據(jù)掃描,在高性能的磁盤和cpu(中央處理器)配置下,無(wú)法充分利用硬件優(yōu)勢(shì)且執(zhí)行效率太低。技術(shù)實(shí)現(xiàn)要素:本發(fā)明要解決的技術(shù)問題是為了克服現(xiàn)有技術(shù)中在多表連接情況下,查詢語(yǔ)句的執(zhí)行效率較低的缺陷,提供一種函數(shù)式查詢方法及系統(tǒng)。本發(fā)明是通過下述技術(shù)方案來解決上述技術(shù)問題:一種函數(shù)式查詢方法,包括:s1、將sql(結(jié)構(gòu)化查詢語(yǔ)言)查詢語(yǔ)句轉(zhuǎn)換為函數(shù)式語(yǔ)言的表達(dá)語(yǔ)句;s2、將函數(shù)式語(yǔ)言的表達(dá)語(yǔ)句進(jìn)行編譯生成多個(gè)查詢指令和至少一個(gè)非查詢指令;s3、將所述多個(gè)查詢指令發(fā)送到多個(gè)線程上并行運(yùn)行,以分別對(duì)多個(gè)列表進(jìn)行查詢并生成查詢結(jié)果;s4、在線程上運(yùn)行所述非查詢指令,以對(duì)所述查詢結(jié)果進(jìn)行運(yùn)算。較佳地,步驟s1包括:s101、將sql查詢語(yǔ)句進(jìn)行語(yǔ)法處理生成語(yǔ)法樹,所述語(yǔ)法樹包括語(yǔ)法元素和執(zhí)行操作;s102、根據(jù)所述語(yǔ)法元素和所述執(zhí)行操作查詢數(shù)據(jù)字典獲取對(duì)應(yīng)的sql數(shù)據(jù)庫(kù)對(duì)象和sql執(zhí)行操作;s103、根據(jù)映射表將所述sql數(shù)據(jù)庫(kù)對(duì)象和所述sql執(zhí)行操作轉(zhuǎn)化為對(duì)應(yīng)的函數(shù)式語(yǔ)言的參數(shù)和函數(shù)式語(yǔ)言的執(zhí)行操作并生成函數(shù)式語(yǔ)言的表達(dá)語(yǔ)句。較佳地,所述函數(shù)式查詢方法還包括:s5、根據(jù)非查詢指令的運(yùn)算結(jié)果生成結(jié)果集。一種函數(shù)式查詢系統(tǒng),包括:表達(dá)轉(zhuǎn)換模塊,用于將sql查詢語(yǔ)句轉(zhuǎn)換為函數(shù)式語(yǔ)言的表達(dá)語(yǔ)句;指令生成模塊,用于將函數(shù)式語(yǔ)言的表達(dá)語(yǔ)句進(jìn)行編譯生成多個(gè)查詢指令和至少一個(gè)非查詢指令;查詢模塊,用于將所述多個(gè)查詢指令發(fā)送到多個(gè)線程上并行運(yùn)行,以分別對(duì)多個(gè)列表進(jìn)行查詢并生成查詢結(jié)果;執(zhí)行模塊,用于在線程上運(yùn)行所述非查詢指令,以對(duì)所述查詢結(jié)果進(jìn)行運(yùn)算。較佳地,表達(dá)轉(zhuǎn)換模塊包括:語(yǔ)法處理模塊,用于將sql查詢語(yǔ)句進(jìn)行語(yǔ)法處理生成語(yǔ)法樹,所述語(yǔ)法樹包括語(yǔ)法元素和執(zhí)行操作;解析模塊,用于根據(jù)所述語(yǔ)法元素和所述執(zhí)行操作查詢數(shù)據(jù)字典獲取對(duì)應(yīng)的sql數(shù)據(jù)庫(kù)對(duì)象和sql執(zhí)行操作;映射模塊,用于根據(jù)映射表將所述sql數(shù)據(jù)庫(kù)對(duì)象和所述sql執(zhí)行操作轉(zhuǎn)化為對(duì)應(yīng)的函數(shù)式語(yǔ)言的參數(shù)并生成函數(shù)式語(yǔ)言的表達(dá)語(yǔ)句。較佳地,所述函數(shù)式查詢系統(tǒng)還包括:結(jié)果生成模塊,用于根據(jù)非查詢指令的運(yùn)算結(jié)果生成結(jié)果集。本發(fā)明的積極進(jìn)步效果在于:將sql查詢語(yǔ)句轉(zhuǎn)換為函數(shù)式語(yǔ)言的表達(dá)語(yǔ)句來執(zhí)行查詢計(jì)劃,將函數(shù)式的表達(dá)語(yǔ)句進(jìn)行編譯生成多個(gè)查詢指令和至少一個(gè)非查詢指令,多表連接情況下,多個(gè)查詢指令在多個(gè)線程上并行運(yùn)行,以實(shí)現(xiàn)對(duì)多個(gè)列表進(jìn)行并發(fā)掃描和過濾,從而提高查詢語(yǔ)句的執(zhí)行效率。附圖說明圖1為本發(fā)明較佳實(shí)施例的函數(shù)式查詢方法的流程圖。圖2為本發(fā)明較佳實(shí)施例的函數(shù)式查詢系統(tǒng)的結(jié)構(gòu)框圖。具體實(shí)施方式下面通過實(shí)施例的方式進(jìn)一步說明本發(fā)明,但并不因此將本發(fā)明限制在所述的實(shí)施例范圍之中。一種函數(shù)式查詢方法,如圖1所示,包括:步驟101、將sql查詢語(yǔ)句轉(zhuǎn)換為函數(shù)式語(yǔ)言的表達(dá)語(yǔ)句,如將sql語(yǔ)句“sql:select*fromt1,t2,t3”轉(zhuǎn)換為“cross_jointable_scane(t1)table_scane(t2)table_scane(t3)”,t1、t2、t3均表示數(shù)據(jù)表。其中,步驟101具體包括:步驟1011、將sql查詢語(yǔ)句進(jìn)行語(yǔ)法處理生成語(yǔ)法樹,所述語(yǔ)法樹包括語(yǔ)法元素和執(zhí)行操作;步驟1012、根據(jù)所述語(yǔ)法元素和所述執(zhí)行操作查詢數(shù)據(jù)字典獲取對(duì)應(yīng)的sql數(shù)據(jù)庫(kù)對(duì)象和sql執(zhí)行操作,該步驟用于檢驗(yàn)數(shù)據(jù)庫(kù)中是否存儲(chǔ)該sql查詢語(yǔ)句中的語(yǔ)法元素和執(zhí)行操作;步驟1013、根據(jù)映射表將所述sql數(shù)據(jù)庫(kù)對(duì)象和所述sql執(zhí)行操作轉(zhuǎn)化為對(duì)應(yīng)的函數(shù)式語(yǔ)言的參數(shù)和函數(shù)式語(yǔ)言的執(zhí)行操作并生成函數(shù)式語(yǔ)言的表達(dá)語(yǔ)句,如將“select”轉(zhuǎn)化為“crossjoin”;“*fromt1”轉(zhuǎn)化為“table_scane(t1)”。步驟102、將函數(shù)式語(yǔ)言的表達(dá)語(yǔ)句進(jìn)行編譯生成多個(gè)查詢指令和至少一個(gè)非查詢指令;步驟103、將所述多個(gè)查詢指令發(fā)送到多個(gè)線程上并行運(yùn)行,以分別對(duì)多個(gè)列表進(jìn)行查詢并生成查詢結(jié)果;步驟104、在線程上運(yùn)行所述非查詢指令,以對(duì)所述查詢結(jié)果進(jìn)行運(yùn)算;步驟105、根據(jù)非查詢指令的運(yùn)算結(jié)果生成結(jié)果集。本實(shí)施例的函數(shù)式查詢系統(tǒng),如圖2所示,包括表達(dá)轉(zhuǎn)換模塊1、指令生成模塊2、查詢模塊3、執(zhí)行模塊4和結(jié)果生成模塊5。所述表達(dá)轉(zhuǎn)換模塊1,用于將sql查詢語(yǔ)句轉(zhuǎn)換為函數(shù)式語(yǔ)言的表達(dá)語(yǔ)句,其中,所述表達(dá)轉(zhuǎn)換模塊具體包括:語(yǔ)法處理模塊11,用于將sql查詢語(yǔ)句進(jìn)行語(yǔ)法處理生成語(yǔ)法樹,所述語(yǔ)法樹包括語(yǔ)法元素和執(zhí)行操作;解析模塊12,用于根據(jù)所述語(yǔ)法元素和所述執(zhí)行操作查詢數(shù)據(jù)字典獲取對(duì)應(yīng)的sql數(shù)據(jù)庫(kù)對(duì)象和sql執(zhí)行操作;映射模塊13,用于根據(jù)映射表將所述sql數(shù)據(jù)庫(kù)對(duì)象和所述sql執(zhí)行操作轉(zhuǎn)化為對(duì)應(yīng)的函數(shù)式語(yǔ)言的參數(shù)并生成函數(shù)式語(yǔ)言的表達(dá)語(yǔ)句。所述指令生成模塊2,用于將函數(shù)式語(yǔ)言的表達(dá)語(yǔ)句進(jìn)行編譯生成多個(gè)查詢指令和至少一個(gè)非查詢指令;所述查詢模塊3,用于將所述多個(gè)查詢指令發(fā)送到多個(gè)線程上并行運(yùn)行,以分別對(duì)多個(gè)列表進(jìn)行查詢并生成查詢結(jié)果;所述執(zhí)行模塊4,用于在線程上運(yùn)行所述非查詢指令,以對(duì)所述查詢結(jié)果進(jìn)行運(yùn)算。所述結(jié)果生成模塊5,用于根據(jù)非查詢指令的運(yùn)算結(jié)果生成結(jié)果集。本實(shí)施例將sql查詢語(yǔ)句轉(zhuǎn)換為函數(shù)式語(yǔ)言的表達(dá)語(yǔ)句來執(zhí)行查詢計(jì)劃,將函數(shù)式的表達(dá)語(yǔ)句進(jìn)行編譯生成多個(gè)查詢指令,多表連接情況下,多個(gè)查詢指令在多個(gè)線程上并行運(yùn)行,以實(shí)現(xiàn)對(duì)多個(gè)列表進(jìn)行并發(fā)掃描和過濾,從而提高查詢語(yǔ)句的執(zhí)行效率。雖然以上描述了本發(fā)明的具體實(shí)施方式,但是本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,這些僅是舉例說明,本發(fā)明的保護(hù)范圍是由所附權(quán)利要求書限定的。本領(lǐng)域的技術(shù)人員在不背離本發(fā)明的原理和實(shí)質(zhì)的前提下,可以對(duì)這些實(shí)施方式做出多種變更或修改,但這些變更和修改均落入本發(fā)明的保護(hù)范圍。技術(shù)特征:技術(shù)總結(jié)本發(fā)明公開了一種函數(shù)式查詢方法及系統(tǒng),所述函數(shù)式查詢方法包括:S1、將SQL查詢語(yǔ)句轉(zhuǎn)換為函數(shù)式語(yǔ)言的表達(dá)語(yǔ)句;S2、將函數(shù)式語(yǔ)言的表達(dá)語(yǔ)句進(jìn)行編譯生成多個(gè)查詢指令和至少一個(gè)非查詢指令;S3、將所述多個(gè)查詢指令發(fā)送到多個(gè)線程上并行運(yùn)行,以分別對(duì)多個(gè)列表進(jìn)行查詢并生成查詢結(jié)果;S4、在線程上運(yùn)行所述非查詢指令,以對(duì)所述查詢結(jié)果進(jìn)行運(yùn)算。本發(fā)明通過將SQL查詢語(yǔ)句轉(zhuǎn)換為函數(shù)式語(yǔ)言的表達(dá)語(yǔ)句來執(zhí)行查詢計(jì)劃,從而實(shí)現(xiàn)了在多表連接情況下,實(shí)現(xiàn)數(shù)據(jù)的并發(fā)掃描和過濾,從而提高查詢語(yǔ)句的執(zhí)行效率。技術(shù)研發(fā)人員:姜宇祥受保護(hù)的技術(shù)使用者:上海攜程商務(wù)有限公司技術(shù)研發(fā)日:2017.06.23技術(shù)公布日:2017.10.20