欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種基于分組的全局多查詢優(yōu)化方法與流程

文檔序號:11386640閱讀:241來源:國知局
一種基于分組的全局多查詢優(yōu)化方法與流程

本發(fā)明涉及數(shù)據(jù)庫多查詢優(yōu)化技術(shù)領(lǐng)域,尤其涉及一種基于分組的全局多查詢優(yōu)化方法。



背景技術(shù):

數(shù)據(jù)庫查詢優(yōu)化(queryoptimization)已經(jīng)有很久的歷史,從幾十年前的單機數(shù)據(jù)庫到現(xiàn)在的分布式大數(shù)據(jù)平臺,衍生出了許多查詢優(yōu)化技術(shù)。早期的查詢優(yōu)化主要針對單條查詢。查詢優(yōu)化器將從所有可能的查詢計劃中選擇一個最有效的方式來執(zhí)行給定查詢。隨著使用場景的豐富,各類應(yīng)用需求的變化,系統(tǒng)需要應(yīng)付的高并發(fā)查詢場景急劇增加。面對場景中可能出現(xiàn)的大量相似性查詢,系統(tǒng)只能逐一處理,無法通過利用查詢間可共享的部分來加速整個過程。這些查詢可能出現(xiàn)在同一批輸入的查詢中,也可能出現(xiàn)在包含相似嵌套子查詢的查詢語句中。因此,為了適應(yīng)現(xiàn)代查詢場景越來越高的需求,向用戶提供更為快速、準(zhǔn)確、全面的查詢服務(wù),多查詢優(yōu)化(multi-queryoptimization)成為這類場景下加速查詢處理的重要方法之一。

多查詢優(yōu)化算法是以最大化重用相似查詢計劃間的可共享部分和快速求解為目標(biāo),通過特定的搜索策略來確定某一種查詢共享組合的過程。可以按照處理模型分為兩類:基于局部優(yōu)化處理模型的多查詢優(yōu)化和基于全局優(yōu)化處理模型的多查詢優(yōu)化。基于局部處理模型的多查詢優(yōu)化分兩個階段進行。第一階段充分利用本地查詢優(yōu)化器,為每條查詢生成各自的最優(yōu)執(zhí)行計劃。第二階段通過對各查詢執(zhí)行計劃的合并來構(gòu)建全局計劃。這類方法生成的查詢計劃數(shù)量少,只能通過本地查詢優(yōu)化器得到每個查詢的最優(yōu)執(zhí)行計劃。同時,由于生成查詢計劃的過程中未知其他查詢的可共享部分,無法通過控制本地查詢優(yōu)化器的處理過程來生成可共享的計劃。全局優(yōu)化處理模型的輸入是未經(jīng)優(yōu)化的查詢語句集合,通過全局查詢優(yōu)化器,在所有可能的搜索空間內(nèi)進行選擇,根據(jù)一定的搜索策略進行代價估算,直接生成全局執(zhí)行計劃。通過將整個多查詢優(yōu)化處理包含在同一個過程中,此類方法能獲得豐富的查詢計劃組合,更可能構(gòu)建最優(yōu)全局計劃。

近些年,隨著大數(shù)據(jù)時代的帶來,高并發(fā)查詢場景的急劇增加,分布式sql查詢系統(tǒng)需要在短時間內(nèi)處理大量查詢。如果能充分利用多查詢優(yōu)化技術(shù),快速高效地利用查詢間可共享部分,就能大幅提升系統(tǒng)吞吐量。但是傳統(tǒng)多查詢優(yōu)化只適用于強相似性多查詢輸入的場景,無法應(yīng)對查詢間相似性不確定的情況。因此,如何在這類場景中高效利用多查詢優(yōu)化技術(shù)成為亟待解決的問題。



技術(shù)實現(xiàn)要素:

本發(fā)明為克服上述的不足之處,目的在于提供一種基于分組的全局多查詢優(yōu)化方法,本發(fā)明方法對傳統(tǒng)多查詢優(yōu)化方法的改進,結(jié)合簽名方法和分組策略來進行多查詢優(yōu)化,本發(fā)明方法首先通過對查詢語句進行簽名計算,得到每一個查詢的精簡化表示;其次,對集合中互相之間無法共享任務(wù)的查詢進行劃分,建立查詢組;最后,通過采用基于啟發(fā)式算法的多查詢優(yōu)化算法,為每一組進行計劃選擇,并將選擇的計劃進行合并得到多個全局計劃。本發(fā)明通過在多查詢建模時計算查詢簽名,充分抽象查詢語句中的關(guān)鍵信息;同時,結(jié)合分組思想,快速判別查詢間的可共享性,加速后續(xù)的計劃選擇過程。

本發(fā)明是通過以下技術(shù)方案達到上述目的:一種基于分組的全局多查詢優(yōu)化方法,包括多查詢建模階段和多查詢優(yōu)化階段,如下所示:

1)多查詢建模階段:對查詢語句進行簽名計算,建立簽名;

2)多查詢優(yōu)化階段:根據(jù)簽名對查詢語句進行分組,建立查詢組;并采用基于啟發(fā)式算法的多查詢優(yōu)化算法,對每一分組內(nèi)的查詢計劃進行代價估算來進行計劃選擇,并將每一分組選擇的計劃進行合并,得到多個全局計劃。

作為優(yōu)選,所述步驟1)對查詢語句建立簽名的步驟如下:

1.1)對查詢語句q={q1,q2,…,qn}進行解析,優(yōu)選采用jflex和cup對查詢語句q={q1,q2,…,qn}進行詞法解析和語法解析;

1.2)采用基于火山模型的查詢優(yōu)化器對查詢語句q={q1,q2,…,qn}進行計劃枚舉,得到其所有可能的計劃pi={pi1,pi2,…,pij};

1.3)遍歷計劃集合pi={pi1,pi2,…,pij}中的每一個計劃pij,并進行任務(wù)切分,得到每一個計劃pij對應(yīng)的所有可能的任務(wù)tij={tij1,tij2,…,tijk};

1.4)通過四元組簽名ge=[sign;de;se;be;torder]來表示任務(wù),得到任務(wù)簽名,進而通過任務(wù)與計劃、計劃與查詢之間的關(guān)系得到計劃簽名和查詢簽名。

作為優(yōu)選,所述的任務(wù)切分的切分規(guī)則如下:

(a)若遇到包含子節(jié)點的節(jié)點,則將其左子節(jié)點切分到單獨的任務(wù)中,父節(jié)點和右子節(jié)點切分到單獨的任務(wù)中,并添加exchange節(jié)點作為父節(jié)點的新左子節(jié)點;

(b)若遇到代表聚合操作的節(jié)點,將其切分到兩個任務(wù)中,分別進行本地聚合操作和最終聚合操作;

(c)在計劃樹的頂部添加一個只包含一個exchange節(jié)點的任務(wù)。

作為優(yōu)選,所述步驟1.4)的具體步驟如下:

1.4.1)輸入查詢計劃的集合,每個查詢計劃為一棵操作符樹,操作符樹將按照規(guī)則被劃分為若干子樹,每個子樹是一個任務(wù);

1.4.2)對操作符樹進行后續(xù)遍歷,為每一個任務(wù)計算對應(yīng)簽名,并判斷該任務(wù)是否在之前的計算過程中出現(xiàn)過;若出現(xiàn)過,則直接使用對應(yīng)的任務(wù)簽名,否則為該任務(wù)創(chuàng)建新的任務(wù)id,并計算任務(wù)簽名;

1.4.3)簽名是一個四元組ge=[sign;de;se;be;torder],其中sign代表標(biāo)識,包括該任務(wù)歸屬的查詢id、計劃id和該任務(wù)的id;de代表任務(wù)中的數(shù)據(jù)表集合;se代表任務(wù)中的選擇謂詞集合;be代表任務(wù)中的非選擇謂詞集合;torder代表在后續(xù)遍歷計劃時該任務(wù)的順序編號;

1.4.4)初始化sign和torder的值,sign根據(jù)當(dāng)前處理任務(wù)歸屬的查詢id、計劃id和該任務(wù)的id決定,所有id均是從0開始自增的整數(shù);torder是在后續(xù)遍歷計劃時該任務(wù)的順序編號,編號是從0開始自增的整數(shù);

1.4.5)根據(jù)任務(wù)內(nèi)的不同操作符計算對應(yīng)簽名:若節(jié)點類型為掃描節(jié)點時,將其對應(yīng)的數(shù)據(jù)表添加到de中,將其對應(yīng)的選擇謂詞添加到se中;若節(jié)點類型為連接節(jié)點、聚合節(jié)點或者排序節(jié)點時,將其對應(yīng)的謂詞添加到be中;若節(jié)點類型為數(shù)據(jù)傳輸節(jié)點,跳過并繼續(xù);

1.4.6)依次構(gòu)建計劃簽名和查詢簽名:通過計劃與任務(wù)的一對多關(guān)系,將歸屬于同一計劃的任務(wù)簽名進行組合,得到計劃簽名pije={tij1e,tij2e,…,tijke};通過查詢與計劃的一對多關(guān)系,將歸屬于同一查詢的計劃簽名進行組合,得到查詢簽名qie=(pi1e,pi2e,…,pije}。

作為優(yōu)選,所述步驟2)的多查詢優(yōu)化階段的步驟如下:

2.1)初始化查詢所在的分組:初始化n個查詢q={q1,q2,...,qn},將每個查詢分為一組,得到n個分組g1,g2,...,gn;

2.2)建立任務(wù)到查詢的映射關(guān)系,為任務(wù)ti所包含的所有mi個查詢建立集合并可得到k個不同的查詢集合構(gòu)成的集合qg={q1,q2,...,qk};

2.3)根據(jù)映射關(guān)系,利用基于路徑壓縮的并查集算法進行分組,對n個查詢q={q1,q2,...,qn}所代表的n個分組g1,g2,…,gn進行合并;

2.4)為步驟2.3)合并得到的每一個分組創(chuàng)建查詢集合容器,并將同組的多個查詢逐一加入,得到d個查詢分組g={g1,g2,…,gd};

2.5)根據(jù)分組結(jié)果,利用ha算法為每一組查詢進行計劃選擇:對于每一個分組g1,g2,...,gd,輸入所有查詢,通過對搜索空間內(nèi)的計劃進行代價估算來選擇計劃,并引入上界函數(shù)h對搜索空間進行剪枝;

2.6)根據(jù)步驟2.5)的結(jié)果,對每一分組選擇的計劃進行自底向上的任務(wù)合并:將計劃按照其包含的公共任務(wù)標(biāo)簽中的torder進行升序排列,并依次將各計劃與全局計劃合并。

作為優(yōu)選,所述步驟2.3)的具體步驟如下:

2.3.1)對qg中的k個查詢集合q1,q2,...,qk進行順序遍歷,并判斷集合中的查詢數(shù)量mi與1的關(guān)系;

2.3.2)若mi小于1,則不進行合并,繼續(xù)下一個集合;若mi大于1,則初始化第一個查詢qs為新分組的代表,并從第二個查詢開始,依次查找查詢所在的分組,并與代表所在的分組進行合并;

2.3.3)依次將集合內(nèi)的其他查詢qi所在的分組gi與代表的分組gs合并,即設(shè)置qi的分組為gs;

2.3.4)在遞歸查找查詢所在分組的過程中,采用路徑壓縮算法進行優(yōu)化,即對于查詢qi,判斷其的分組是否為gi;如果是,則返回該查詢分組gi;否則,遞歸查找qi的代表所在的分組。

作為優(yōu)選,所述步驟2.5)利用ha算法進行計劃選擇的方法如下:

2.5.1)初始化用于代價估算的信息:通過讀取配置文件中的各項參數(shù),包括磁盤速率、內(nèi)存大??;

2.5.2)在輸入查詢包含的所有任務(wù)中查找等價任務(wù)集合,等價任務(wù)的簽名中包含相同id;

2.5.3)初始化代價上界:通過計算每一個任務(wù)的代價,可以累加獲得每一個計劃的代價,通過對每一個查詢所有計劃中代價最小的計劃,即“最優(yōu)計劃”的代價進行累和,得到初始上界upperbound;

2.5.4)遞歸搜索,通過啟發(fā)式代價估算來為每一個查詢選擇計劃:為了讓ha算法算法快速收斂,引入一個上界函數(shù)h對搜索空間進行剪枝,公式如下:

其中,nq表示包含任務(wù)t的查詢數(shù)量;next是一個函數(shù),可以求得在狀態(tài)s下需要進行計劃選擇的查詢編號;cost是一個代價函數(shù),通過磁盤讀取頁數(shù)來對任務(wù)進行代價估算,通過對任務(wù)代價求和來對計劃進行代價估算;est_cost函數(shù)用于計算未選計劃的估計代價;函數(shù)通過將任務(wù)的代價cost(t)平分到每一個包含該任務(wù)的查詢,獲得該任務(wù)的估計代價,進而通過求和獲得計劃的估計代價;

2.5.5)得到為每一個分組內(nèi)所有查詢選擇的計劃集合,

作為優(yōu)選,所述步驟2.6)對計劃內(nèi)的計劃進行合并的具體步驟如下:

2.6.1)初始化該分組對應(yīng)的全局計劃

2.6.2)將按照其包含的公共任務(wù)標(biāo)簽中的torder進行升序排列;

2.6.3)依次將各計劃與全局計劃合并,得到由d個全局計劃組成的集合

本發(fā)明的有益效果在于:(1)通過簽名計算充分抽象查詢語句,能更好支撐多查詢優(yōu)化過程中的查詢分組和計劃合并;(2)將計劃選擇中較大的搜索空間通過查詢間的共享性劃分為多個子空間,避免重復(fù)的代價估算操作,從而降低響應(yīng)時間,提升多查詢優(yōu)化性能。

附圖說明

圖1是本發(fā)明方法的整體流程圖;

圖2是本發(fā)明實施例的多查詢建模方法流程圖;

圖3是本發(fā)明實施例的一條查詢生成計劃的結(jié)果示意圖;

圖4是本發(fā)明實施例的一個計劃進行任務(wù)切分的結(jié)果示意圖;

圖5是本發(fā)明實施例的多查詢優(yōu)化方法流程圖。

具體實施方式

下面結(jié)合具體實施例對本發(fā)明進行進一步描述,但本發(fā)明的保護范圍并不僅限于此:

實施例:如圖1所示,一種基于分組的全局多查詢優(yōu)化方法,包括多查詢建模、多查詢優(yōu)化兩個階段,具體步驟如下:

多查詢建模階段:

多查詢建模的流程圖如圖2所示,主要步驟包括:

步驟1,對查詢語句進行解析,包括詞法解析、語法解析。

使用成熟的詞法解析和語法解析工具jflex和cup對輸入的查詢語句q={q1,q2,...,qn}進行詞法解析和語法解析。

步驟2,對查詢語句進行計劃枚舉。根據(jù)輸入的查詢語句q={q1,q2,...,qn},得到其所有可能的計劃pi={pi1,pi2,...,pij}。

對查詢進行計劃枚舉,用基于火山模型的查詢優(yōu)化器為每一個查詢qi枚舉出其所有可能的計劃pi={pi1,pi2,...,pij}。如圖3所示,對于sql語句“select*fromr1,r2,r3wherer1.a=r2.aandr2.c=r3.c;”,可以得到6種不同的查詢計劃。

步驟3,對查詢計劃進行任務(wù)切分。根據(jù)步驟2得到的計劃集合pi={pi1,pi2,...,pij}。得到每一個計劃pij對應(yīng)的所有可能的任務(wù)tij={tij1,tij2,…,tijk}。

后序遍歷每一個計劃pij,并進行任務(wù)切分,最終得到tij={tij1,tij2,...,tijk}。如圖4所示,對于圖3的sql語句,可以通過切分得到4個任務(wù)。切分規(guī)則包括:

a)若遇到包含子節(jié)點的節(jié)點,則將其左子節(jié)點切分到單獨的任務(wù)中,父節(jié)點和右子節(jié)點切分到單獨的任務(wù)中,并添加exchange節(jié)點作為父節(jié)點的新左子節(jié)點;

b)若遇到代表聚合操作的節(jié)點,將其切分到兩個任務(wù)中,分別進行本地聚合操作和最終聚合操作;

c)在計劃樹的頂部添加一個只包含一個exchange節(jié)點的任務(wù)。

步驟4,為查詢計算簽名。通過一種四元組簽名ge=[sign;de;se;be;torder]來表示任務(wù),得到任務(wù)簽名。進而通過任務(wù)與計劃、計劃與查詢之間的關(guān)系得到計劃簽名和查詢簽名。

a)輸入是查詢計劃的集合。每個查詢計劃都是一棵操作符樹,操作符樹將按照一定規(guī)則被劃分為若干子樹,每個子樹是一個任務(wù)。

b)對操作符樹進行后續(xù)遍歷,為每一個任務(wù)計算對應(yīng)簽名。判斷該任務(wù)是否在之前的計算過程中出現(xiàn)過。若出現(xiàn)過,則直接使用對應(yīng)的任務(wù)簽名。否則為該任務(wù)創(chuàng)建新的任務(wù)id,并計算任務(wù)簽名。

c)簽名是一個四元組ge=[sign;de;se;be;torder],其中sign代表標(biāo)識,包括該任務(wù)歸屬的查詢id、計劃id和該任務(wù)的id;de代表任務(wù)中的數(shù)據(jù)表集合;se代表任務(wù)中的選擇謂詞集合;be代表任務(wù)中的非選擇謂詞集合;torder代表在后續(xù)遍歷計劃時該任務(wù)的順序編號。

d)初始化sign和torder的值。sign根據(jù)當(dāng)前處理任務(wù)歸屬的查詢id、計劃id和該任務(wù)的id決定,所有id均是從0開始自增的整數(shù);torder是在后續(xù)遍歷計劃時該任務(wù)的順序編號,編號是從0開始自增的整數(shù)。

e)根據(jù)任務(wù)內(nèi)的不同操作符計算對應(yīng)簽名。若節(jié)點類型為掃描節(jié)點時,將其對應(yīng)的數(shù)據(jù)表添加到de中,將其對應(yīng)的選擇謂詞添加到se中;若節(jié)點類型為連接節(jié)點、聚合節(jié)點或者排序節(jié)點時,將其對應(yīng)的謂詞添加到be中;若節(jié)點類型為數(shù)據(jù)傳輸節(jié)點,跳過并繼續(xù)。

f)依次構(gòu)建計劃簽名和查詢簽名。通過計劃與任務(wù)的一對多關(guān)系,將歸屬于同一計劃的任務(wù)簽名進行組合,得到計劃簽名pije={tij1e,tij2e,...,tijke}。通過查詢與計劃的一對多關(guān)系,將歸屬于同一查詢的計劃簽名進行組合,得到查詢簽名qie={pi1e,pi2e,...,pije}。

多查詢優(yōu)化階段:

多查詢優(yōu)化流程如圖5所示,主要包括以下步驟:

步驟1,初始化查詢所在的分組。

初始化所有輸入的n個查詢q={q1,q2,...,qn},將每個查詢分為一組,得到n個分組g1,g2,...,gn。

步驟2,建立任務(wù)(指包含原始數(shù)據(jù)表的任務(wù))到查詢的映射關(guān)系。為任務(wù)ti所包含的所有mi個查詢建立集合

為任務(wù)ti所包含的所有mi個查詢建立集合,即查詢集合由此,最終可以得到k個不同的查詢集合構(gòu)成的集合qg={q1,q2,...,qk}。

步驟3,根據(jù)步驟2得到的映射關(guān)系,利用基于路徑壓縮的并查集算法進行分組。通過不斷對n個查詢q={q1,q2,...,qn}所代表的n個分組g1,g2,...,gn進行合并。具體步驟包括:

a)順序遍歷qg中的每一個查詢集合qi,并判斷集合中的查詢數(shù)量是否大于1。即對qg中的k個查詢集合q1,q2,...,qk進行順序遍歷。

b)判斷中mi與1的關(guān)系。若mi小于1,則不進行合并,繼續(xù)下一個集合;若mi大于1,則初始化第一個查詢qs為新分組的代表。并從第二個查詢開始,依次查找查詢所在的分組,并與代表所在的分組進行合并。遞歸查找的過程采用路徑壓縮算法進行優(yōu)化。

c)依次將集合內(nèi)的其他查詢qi所在的分組gi與代表的分組gs合并,即設(shè)置qi的分組為gs。

d)在遞歸查找查詢所在分組的過程中,采用路徑壓縮算法進行優(yōu)化,即對于查詢qi,判斷其的分組是否為gi。如果是,則返回該查詢分組gi;否則,遞歸查找qi的代表所在的分組。

步驟4,為步驟3得到的每一個分組的查詢建立新的集合容器。

為每一個分組gi創(chuàng)建查詢集合容器,并將同組的ci個查詢逐一加入,由此可得最終可得d個查詢分組g={g1,g2,…,gd}。

步驟5,根據(jù)分組結(jié)果,利用ha算法為每一組查詢進行計劃選擇。對每一個分組g1,g2,...,gd,輸入所有查詢,通過對搜索空間內(nèi)的計劃進行代價估算來選擇計劃,同時引入上界函數(shù)h對搜索空間進行剪枝。

依次將每一分組g1,g2,...,gd作為輸入,然后進行計劃選擇。具體執(zhí)行步驟如下:

a)初始化用于代價估算的信息。通過讀取配置文件中的各項參數(shù),包括磁盤速率、內(nèi)存大小等。

b)在輸入查詢包含的所有任務(wù)中查找等價任務(wù)集合。在簽名計算時已經(jīng)發(fā)現(xiàn)了所有等價任務(wù),等價任務(wù)的簽名中包含相同id。

c)初始化代價上界。通過計算每一個任務(wù)的代價,可以累加獲得每一個計劃的代價。通過對每一個查詢所有計劃中代價最小的計劃,即“最優(yōu)計劃”的代價進行累和,得到初始上界upperbound。

d)遞歸搜索,通過啟發(fā)式代價估算來為每一個查詢選擇計劃。為了讓ha算法快速收斂,需要引入一個上界函數(shù)h對搜索空間進行剪枝,公式如下:

其中,nq表示包含任務(wù)t的查詢數(shù)量;next是一個函數(shù),可以求得在狀態(tài)s下需要進行計劃選擇的查詢編號;cost是一個代價函數(shù),通過磁盤讀取頁數(shù)來對任務(wù)進行代價估算,通過對任務(wù)代價求和來對計劃進行代價估算;est_cost函數(shù)用于計算未選計劃的估計代價。函數(shù)通過將任務(wù)的代價cost(t)平分到每一個包含該任務(wù)的查詢,獲得該任務(wù)的估計代價,進而通過求和獲得計劃的估計代價。

e)最終得到為每一個分組內(nèi)所有查詢選擇的計劃集合,

步驟6,根據(jù)步驟5的結(jié)果,對每一分組選擇的計劃進行自底向上的任務(wù)合并。將計劃按照其包含的公共任務(wù)標(biāo)簽中的torder進行升序排列,并依次將各計劃與全局計劃合并。

內(nèi)的每一個計劃進行合并,具體包括的步驟如下:

a)初始化該分組對應(yīng)的全局計劃

b)將按照其包含的公共任務(wù)標(biāo)簽中的torder進行升序排列。

c)依次將各計劃與全局計劃合并,最終得到由d個全局計劃組成的集合

以上的所述乃是本發(fā)明的具體實施例及所運用的技術(shù)原理,若依本發(fā)明的構(gòu)想所作的改變,其所產(chǎn)生的功能作用仍未超出說明書及附圖所涵蓋的精神時,仍應(yīng)屬本發(fā)明的保護范圍。

當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
修文县| 西宁市| 乌拉特后旗| 高平市| 乌鲁木齐县| 开鲁县| 绥中县| 浮山县| 武乡县| 密云县| 金沙县| 奉新县| 襄汾县| 津市市| 新乐市| 新绛县| 中江县| 和龙市| 神农架林区| 顺义区| 贵南县| 苍山县| 剑川县| 镶黄旗| 临澧县| 德兴市| 高阳县| 永平县| 弥渡县| 东丰县| 浪卡子县| 垣曲县| 芜湖市| 金昌市| 鹤岗市| 邓州市| 介休市| 柳江县| 瑞安市| 西乌| 龙口市|