本發(fā)明實(shí)施例涉及計(jì)算機(jī)技術(shù)領(lǐng)域,尤其涉及一種批量數(shù)據(jù)查詢方法和裝置。
背景技術(shù):
目前代表性的大數(shù)據(jù)查詢系統(tǒng)(如:Hive,Shark,Impala)均以單條查詢語(yǔ)句作為解析和優(yōu)化的基本單位。大數(shù)據(jù)查詢系統(tǒng)的一個(gè)關(guān)鍵性能是查詢效率。然而,在數(shù)據(jù)倉(cāng)庫(kù)(Data Warehouse)的批量查詢場(chǎng)景下,傳統(tǒng)的以單條查詢語(yǔ)句為解析和優(yōu)化基本單位的處理模式存在優(yōu)化機(jī)會(huì)不足的問題。與查詢內(nèi)優(yōu)化機(jī)會(huì)不足構(gòu)成強(qiáng)烈對(duì)比的是數(shù)據(jù)倉(cāng)庫(kù)批量查詢應(yīng)用場(chǎng)景中所呈現(xiàn)出的豐富的查詢間優(yōu)化機(jī)會(huì),查詢間優(yōu)化機(jī)會(huì)即多條查詢語(yǔ)句之間存在的優(yōu)化機(jī)會(huì)。
在批量查詢應(yīng)用場(chǎng)景下,現(xiàn)有技術(shù)中,通過(guò)在查詢語(yǔ)句執(zhí)行過(guò)程中對(duì)數(shù)據(jù)記錄的更新情況進(jìn)行實(shí)時(shí)監(jiān)控與反饋,以及通過(guò)預(yù)先執(zhí)行查詢語(yǔ)句中的一部分功能等方式,動(dòng)態(tài)地獲取各個(gè)查詢具體需要訪問的數(shù)據(jù)記錄,以此確定多個(gè)查詢所操作的數(shù)據(jù)記錄之間是否存在沖突或交集,并基于上述分析執(zhí)行一些動(dòng)態(tài)優(yōu)化。但通過(guò)監(jiān)控?cái)?shù)據(jù)記錄或執(zhí)行部分查詢功能只能收集到與某一組輸入相關(guān)的動(dòng)態(tài)數(shù)據(jù)依賴關(guān)系,基于這些動(dòng)態(tài)數(shù)據(jù)依賴所執(zhí)行的優(yōu)化只能適應(yīng)于某一組特定的輸入,一旦輸入發(fā)生變化,就需要重新執(zhí)行分析和優(yōu)化。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明實(shí)施例提供一種批量數(shù)據(jù)查詢方法和裝置,提高了查詢間優(yōu)化的效率,并且降低了查詢間優(yōu)化的系統(tǒng)開銷。
本發(fā)明第一方面提供一種批量數(shù)據(jù)查詢方法,包括:
接收待執(zhí)行的N條查詢語(yǔ)句,其中,所述N為不小于2的正整數(shù);
根據(jù)所述N條查詢語(yǔ)句中的操作符和操作數(shù)確定所述N條查詢語(yǔ)句的操 作數(shù)的符號(hào)標(biāo)識(shí),其中,所述操作符用于指示要執(zhí)行的操作,所述操作數(shù)用于指示所述N條查詢語(yǔ)句中的操作符待操作的數(shù)據(jù)的存儲(chǔ)位置,所述符號(hào)標(biāo)識(shí)包括操作數(shù)的版本號(hào),并且,指代相同數(shù)據(jù)的操作數(shù)具有相同的版本號(hào),指代不同數(shù)據(jù)的操作數(shù)具有不同的版本號(hào),所述操作符至少包括:創(chuàng)建操作符、銷毀操作符、掃描操作符和文件定值操作符;
根據(jù)確定的所述N條查詢語(yǔ)句的操作數(shù)的版本號(hào)確定所述N條查詢語(yǔ)句之間的依賴關(guān)系;
根據(jù)所述N條查詢語(yǔ)句之間的依賴關(guān)系以及預(yù)設(shè)的優(yōu)化規(guī)則對(duì)所述N條查詢語(yǔ)句進(jìn)行查詢間優(yōu)化;
執(zhí)行優(yōu)化后的查詢語(yǔ)句以得到所述N條查詢語(yǔ)句的查詢結(jié)果。
結(jié)合第一方面,在第一方面的第一種可能的實(shí)現(xiàn)方式中,所述根據(jù)所述N條查詢語(yǔ)句中的操作符和操作數(shù)確定所述N條查詢語(yǔ)句的操作數(shù)的符號(hào)標(biāo)識(shí)包括:
獲取所述N條查詢語(yǔ)句對(duì)應(yīng)的N棵邏輯查詢計(jì)劃樹,其中,一條查詢語(yǔ)句對(duì)應(yīng)一棵邏輯查詢計(jì)劃樹;
為所述N棵邏輯查詢計(jì)劃樹中的第一類操作符的操作數(shù)添加符號(hào)標(biāo)識(shí),其中,所述第一類操作符包括:創(chuàng)建操作符、銷毀操作符、掃描操作符和文件定值操作符;
對(duì)于所述N棵邏輯查詢計(jì)劃樹中的每一棵查詢計(jì)劃樹分別執(zhí)行如下操作:
根據(jù)第一邏輯查詢計(jì)劃樹的拓?fù)漤樞?、所述第一邏輯查詢?jì)劃樹中的第一類操作符的操作數(shù)的符號(hào)標(biāo)識(shí)以及預(yù)設(shè)的添加規(guī)則為所述第一邏輯查詢計(jì)劃樹中的第二類操作符的操作數(shù)添加符號(hào)標(biāo)識(shí),其中,所述第一邏輯查詢計(jì)劃樹為所述N棵邏輯查詢計(jì)劃樹中的任意一棵邏輯查詢計(jì)劃樹,所述第二類操作符為除所述第一類操作符之外的其他操作符。
結(jié)合第一方面的第一種可能的實(shí)現(xiàn)方式,在第一方面的第二種可能的實(shí)現(xiàn)方式中,所述第一邏輯查詢計(jì)劃樹的根節(jié)點(diǎn)包括文件定值操作符,所述第一邏輯查詢計(jì)劃樹的葉子節(jié)點(diǎn)包括文件掃描操作符,所述第一邏輯查詢計(jì)劃樹的內(nèi)部節(jié)點(diǎn)包括第二類操作符、創(chuàng)建操作符和銷毀操作符,其中,所述內(nèi)部節(jié)點(diǎn)為除葉子節(jié)點(diǎn)和根節(jié)點(diǎn)之外的其他節(jié)點(diǎn);所述添加規(guī)則包括:對(duì)于所 述第一邏輯查詢計(jì)劃樹中的每一個(gè)第二類操作符,執(zhí)行如下操作:
若第一操作符的操作數(shù)與所述第一操作符的左孩子節(jié)點(diǎn)的操作數(shù)相同,則為所述第一操作符的操作數(shù)添加與所述第一操作符的左孩子節(jié)點(diǎn)的操作數(shù)的符號(hào)標(biāo)識(shí)相同的符號(hào)標(biāo)識(shí),所述第一操作符為所述第二類操作符中的任意一個(gè)操作符;
若所述第一操作符的操作數(shù)與所述第一操作符的右孩子節(jié)點(diǎn)的操作數(shù)相同,則為所述第一操作符的操作數(shù)添加與所述第一操作符的右孩子節(jié)點(diǎn)的操作數(shù)的符號(hào)標(biāo)識(shí)相同的符號(hào)標(biāo)識(shí)。
結(jié)合第一方面、第一方面的第一種至第二種可能的實(shí)現(xiàn)方式中的任一種,在第一方面的第三種可能的實(shí)現(xiàn)方式中,所述優(yōu)化規(guī)則包括下述規(guī)則中的至少一個(gè)規(guī)則:
刪除與第一查詢語(yǔ)句具有相同操作數(shù)版本號(hào)和相同操作符的查詢語(yǔ)句,其中,所述第一查詢語(yǔ)句為所述N條查詢語(yǔ)句中的任意一條查詢語(yǔ)句;
保持具有流依賴關(guān)系的查詢語(yǔ)句之間的查詢順序,并將具有流依賴關(guān)系的多個(gè)查詢語(yǔ)句優(yōu)化為一個(gè)新的查詢語(yǔ)句,其中,所述流依賴關(guān)系是指在前執(zhí)行的一條查詢語(yǔ)句的文件定值操作符的操作數(shù)的版本號(hào)與在后執(zhí)行的另一條查詢語(yǔ)句的的操作數(shù)的版本號(hào)相同;和
合并具有相同操作符且操作數(shù)有重疊的查詢語(yǔ)句。
結(jié)合第一方面的第一種可能的實(shí)現(xiàn)方式,在第一方面的第四種可能的實(shí)現(xiàn)方式中,所述N條查詢語(yǔ)句中的操作數(shù)的符號(hào)標(biāo)識(shí)還包括:熱數(shù)據(jù)標(biāo)識(shí);
所述根據(jù)所述N條查詢語(yǔ)句中的操作符和操作數(shù)確定所述N條查詢語(yǔ)句的操作數(shù)的符號(hào)標(biāo)識(shí)還包括:
統(tǒng)計(jì)所述N棵邏輯查詢計(jì)劃樹中的每個(gè)掃描操作符的操作數(shù)被引用的次數(shù);
判斷所述N棵邏輯查詢計(jì)劃樹中的每個(gè)掃描操作符的操作數(shù)被引用的次數(shù)是否大于熱數(shù)據(jù)閾值;
為所述N棵邏輯查詢計(jì)劃樹中掃描操作符的操作數(shù)被引用的次數(shù)大于所述熱數(shù)據(jù)閾值的操作數(shù)添加熱數(shù)據(jù)標(biāo)識(shí),所述熱數(shù)據(jù)標(biāo)識(shí)用于表示具有熱數(shù)據(jù)標(biāo)識(shí)的操作數(shù)所指向的數(shù)據(jù)為熱數(shù)據(jù);
所述方法還包括:
在執(zhí)行所述優(yōu)化后的查詢語(yǔ)句過(guò)程中,并發(fā)執(zhí)行包含所述熱數(shù)據(jù)標(biāo)識(shí)且不存在流依賴關(guān)系和輸出依賴關(guān)系的優(yōu)化后的查詢語(yǔ)句。
結(jié)合第一方面的第一種或第四種可能的實(shí)現(xiàn)方式,在第一方面的第五種可能的實(shí)現(xiàn)方式中,所述N條查詢語(yǔ)句中的操作數(shù)的符號(hào)標(biāo)識(shí)還包括:起始活躍位置和終止活躍位置,所述根據(jù)所述N條查詢語(yǔ)句中的操作符和操作數(shù)確定所述N條查詢語(yǔ)句的操作數(shù)的符號(hào)標(biāo)識(shí)還包括:
針對(duì)第一操作數(shù),根據(jù)第一次引用所述第一操作數(shù)的掃描操作符的標(biāo)識(shí)和所述掃描操作符所在的邏輯查詢計(jì)劃樹的序號(hào)確定所述第一操作數(shù)的起始活躍位置,其中,所述第一操作數(shù)為所述N條查詢語(yǔ)句中的操作數(shù)中的任意一個(gè)操作數(shù);
根據(jù)用于銷毀所述第一操作數(shù)的銷毀操作符的標(biāo)識(shí)和所述銷毀操作符所在的邏輯查詢計(jì)劃樹的序號(hào)確定所述第一操作數(shù)的終止活躍位置;
所述方法還包括:
在執(zhí)行所述優(yōu)化后的查詢語(yǔ)句過(guò)程中,根據(jù)所述第一操作數(shù)的終止活躍位置釋放所述第一操作數(shù)指示的數(shù)據(jù)的存儲(chǔ)空間。
結(jié)合第一方面的第五種可能的實(shí)現(xiàn)方式,在第一方面的第六種可能的實(shí)現(xiàn)方式中,所述根據(jù)所述N條查詢語(yǔ)句中的操作符和操作數(shù)確定所述N條查詢語(yǔ)句的操作數(shù)的符號(hào)標(biāo)識(shí)還包括:
針對(duì)第二操作數(shù),根據(jù)第一次引用所述第二操作數(shù)的第一文件定值操作符的標(biāo)識(shí)和所述第一文件定值操作符所在的邏輯查詢計(jì)劃樹的序號(hào)確定所述第二操作數(shù)的起始活躍位置,其中,所述第一文件定值操作符用于向所述第二操作數(shù)指代的存儲(chǔ)位置寫數(shù)據(jù),所述第二操作數(shù)為所述N條查詢語(yǔ)句中的操作數(shù)中的任意一個(gè)操作數(shù);
根據(jù)引用所述第二操作數(shù)的第二文件定值操作符的標(biāo)識(shí)和所述第二文件定值操作符所在的邏輯查詢計(jì)劃樹的序號(hào)確定所述第二操作數(shù)的終止活躍位置,其中,所述第二文件定值操作符用于改寫所述第一文件定值操作符操作的所述第二操作數(shù)指向的數(shù)據(jù);
所述方法還包括:
在執(zhí)行所述優(yōu)化后的查詢語(yǔ)句過(guò)程中,根據(jù)所述第二操作數(shù)的終止活躍位置釋放所述第二操作數(shù)指示的數(shù)據(jù)的存儲(chǔ)空間。
本發(fā)明第二方面提供一種數(shù)據(jù)查詢服務(wù)器,包括:
接收模塊,用于接收待執(zhí)行的N條查詢語(yǔ)句,其中,所述N為不小于2的正整數(shù);
標(biāo)識(shí)確定模塊,用于根據(jù)所述N條查詢語(yǔ)句中的操作符和操作數(shù)確定所述N條查詢語(yǔ)句的操作數(shù)的符號(hào)標(biāo)識(shí),其中,所述操作符用于指示要執(zhí)行的操作,所述操作數(shù)用于指示所述N條查詢語(yǔ)句中的操作符待操作的數(shù)據(jù)的存儲(chǔ)位置,所述符號(hào)標(biāo)識(shí)包括操作數(shù)的版本號(hào),并且,指代相同數(shù)據(jù)的操作數(shù)具有相同的版本號(hào),指代不同數(shù)據(jù)的操作數(shù)具有不同的版本號(hào),所述操作符至少包括:創(chuàng)建操作符、銷毀操作符、掃描操作符和文件定值操作符;
關(guān)系確定模塊,用于根據(jù)所述標(biāo)識(shí)確定模塊確定的所述N條查詢語(yǔ)句的操作數(shù)的版本號(hào)確定所述N條查詢語(yǔ)句之間的依賴關(guān)系;
優(yōu)化模塊,用于根據(jù)所述N條查詢語(yǔ)句之間的依賴關(guān)系以及預(yù)設(shè)的優(yōu)化規(guī)則對(duì)所述N條查詢語(yǔ)句進(jìn)行查詢間優(yōu)化;
查詢模塊,用于執(zhí)行優(yōu)化后的查詢語(yǔ)句以得到所述N條查詢語(yǔ)句的查詢結(jié)果。
結(jié)合第二方面,在第二方面的第一種可能的實(shí)現(xiàn)方式中,所述標(biāo)識(shí)確定模塊具體用于:
獲取所述N條查詢語(yǔ)句對(duì)應(yīng)的N棵邏輯查詢計(jì)劃樹,其中,一條查詢語(yǔ)句對(duì)應(yīng)一棵邏輯查詢計(jì)劃樹;
為所述N棵邏輯查詢計(jì)劃樹中的第一類操作符的操作數(shù)添加符號(hào)標(biāo)識(shí),其中,所述第一類操作符包括:創(chuàng)建操作符、銷毀操作符、掃描操作符和文件定值操作符;
對(duì)于所述N棵邏輯查詢計(jì)劃樹中的每一棵查詢計(jì)劃樹分別執(zhí)行如下操作:
根據(jù)第一邏輯查詢計(jì)劃樹的拓?fù)漤樞?、所述第一邏輯查詢?jì)劃樹中的第一類操作符的操作數(shù)的符號(hào)標(biāo)識(shí)以及預(yù)設(shè)的添加規(guī)則為所述第一邏輯查詢計(jì)劃樹中的第二類操作符的操作數(shù)添加符號(hào)標(biāo)識(shí),其中,所述第一邏輯查詢計(jì)劃樹為所述N棵邏輯查詢計(jì)劃樹中的任意一棵邏輯查詢計(jì)劃樹,所述第二類操作符為除所述第一類操作符之外的其他操作符。
結(jié)合第二方面的第一種可能的實(shí)現(xiàn)方式,在第二方面的第二種可能的實(shí) 現(xiàn)方式中,所述第一邏輯查詢計(jì)劃樹的根節(jié)點(diǎn)包括文件定值操作符,所述第一邏輯查詢計(jì)劃樹的葉子節(jié)點(diǎn)包括文件掃描操作符,所述第一邏輯查詢計(jì)劃樹的內(nèi)部節(jié)點(diǎn)包括第二類操作符、創(chuàng)建操作符和銷毀操作符,其中,所述內(nèi)部節(jié)點(diǎn)為除葉子節(jié)點(diǎn)和根節(jié)點(diǎn)之外的其他節(jié)點(diǎn);所述添加規(guī)則包括:對(duì)于所述第一邏輯查詢計(jì)劃樹中的每一個(gè)第二類操作符,執(zhí)行如下操作:
若第一操作符的操作數(shù)與所述第一操作符的左孩子節(jié)點(diǎn)的操作數(shù)相同,則為所述第一操作符的操作數(shù)添加與所述第一操作符的左孩子節(jié)點(diǎn)的操作數(shù)的符號(hào)標(biāo)識(shí)相同的符號(hào)標(biāo)識(shí),所述第一操作符為所述第二類操作符中的任意一個(gè)操作符;
若所述第一操作符的操作數(shù)與所述第一操作符的右孩子節(jié)點(diǎn)的操作數(shù)相同,則為所述第一操作符的操作數(shù)添加與所述第一操作符的右孩子節(jié)點(diǎn)的操作數(shù)的符號(hào)標(biāo)識(shí)相同的符號(hào)標(biāo)識(shí)。
結(jié)合第二方面、第二方面的第一種至第二種可能的實(shí)現(xiàn)方式中的任一種,在第二方面的第三種可能的實(shí)現(xiàn)方式中,所述優(yōu)化規(guī)則包括下述規(guī)則中的至少一個(gè)規(guī)則:
刪除與第一查詢語(yǔ)句具有相同操作數(shù)版本號(hào)和相同操作符的查詢語(yǔ)句,其中,所述第一查詢語(yǔ)句為所述N條查詢語(yǔ)句中的任意一條查詢語(yǔ)句;
保持具有流依賴關(guān)系的查詢語(yǔ)句之間的查詢順序,并將具有流依賴關(guān)系的多個(gè)查詢語(yǔ)句優(yōu)化為一個(gè)新的查詢語(yǔ)句,其中,所述流依賴關(guān)系是指在前執(zhí)行的一條查詢語(yǔ)句的文件定值操作符的操作數(shù)的版本號(hào)與在后執(zhí)行的另一條查詢語(yǔ)句的的操作數(shù)的版本號(hào)相同;和
合并具有相同操作符且操作數(shù)有重疊的查詢語(yǔ)句。
結(jié)合第二方面的第一種可能的實(shí)現(xiàn)方式,在第二方面的第四種可能的實(shí)現(xiàn)方式中,所述N條查詢語(yǔ)句中的操作數(shù)的符號(hào)標(biāo)識(shí)還包括:熱數(shù)據(jù)標(biāo)識(shí),所述標(biāo)識(shí)確定模塊還用于:
統(tǒng)計(jì)所述N棵邏輯查詢計(jì)劃樹中的每個(gè)掃描操作符的操作數(shù)被引用的次數(shù);
判斷所述N棵邏輯查詢計(jì)劃樹中的每個(gè)掃描操作符的操作數(shù)被引用的次數(shù)是否大于熱數(shù)據(jù)閾值;
為所述N棵邏輯查詢計(jì)劃樹中掃描操作符的操作數(shù)被引用的次數(shù)大于所 述熱數(shù)據(jù)閾值的操作數(shù)添加熱數(shù)據(jù)標(biāo)識(shí),所述熱數(shù)據(jù)標(biāo)識(shí)用于表示具有熱數(shù)據(jù)標(biāo)識(shí)的操作數(shù)所指向的數(shù)據(jù)為熱數(shù)據(jù);
所述查詢模塊還用于:
在執(zhí)行所述優(yōu)化后的查詢語(yǔ)句過(guò)程中,并發(fā)執(zhí)行包含所述熱數(shù)據(jù)標(biāo)識(shí)且不存在流依賴關(guān)系和輸出依賴關(guān)系的優(yōu)化后的查詢語(yǔ)句。
結(jié)合第二方面的第一種或第四種可能的實(shí)現(xiàn)方式,在第二方面的第五種可能的實(shí)現(xiàn)方式中,所述N條查詢語(yǔ)句中的操作數(shù)的符號(hào)標(biāo)識(shí)還包括:起始活躍位置和終止活躍位置,所述標(biāo)識(shí)確定模塊還用于:
針對(duì)第一操作數(shù),根據(jù)第一次引用所述第一操作數(shù)的掃描操作符的標(biāo)識(shí)和所述掃描操作符所在的邏輯查詢計(jì)劃樹的序號(hào)確定所述第一操作數(shù)的起始活躍位置,其中,所述第一操作數(shù)為所述N條查詢語(yǔ)句中的操作數(shù)中的任意一個(gè)操作數(shù);
根據(jù)用于銷毀所述第一操作數(shù)的銷毀操作符的標(biāo)識(shí)和所述銷毀操作符所在的邏輯查詢計(jì)劃樹的序號(hào)確定所述第一操作數(shù)的終止活躍位置;
所述查詢模塊還用于:
在執(zhí)行所述優(yōu)化后的查詢語(yǔ)句過(guò)程中,根據(jù)所述第一操作數(shù)的終止活躍位置釋放所述第一操作數(shù)指示的數(shù)據(jù)的存儲(chǔ)空間。
結(jié)合第二方面的第五種可能的實(shí)現(xiàn)方式,在第二方面的第六種可能的實(shí)現(xiàn)方式中,所述標(biāo)識(shí)確定模塊還用于:
針對(duì)第二操作數(shù),根據(jù)第一次引用所述第二操作數(shù)的第一文件定值操作符的標(biāo)識(shí)和所述第一文件定值操作符所在的邏輯查詢計(jì)劃樹的序號(hào)確定所述第二操作數(shù)的起始活躍位置,其中,所述第一文件定值操作符用于向所述第二操作數(shù)指代的存儲(chǔ)位置寫數(shù)據(jù),所述第二操作數(shù)為所述N條查詢語(yǔ)句中的操作數(shù)中的任意一個(gè)操作數(shù);
根據(jù)引用所述第二操作數(shù)的第二文件定值操作符的標(biāo)識(shí)和所述第二文件定值操作符所在的邏輯查詢計(jì)劃樹的序號(hào)確定所述第二操作數(shù)的終止活躍位置,其中,所述第二文件定值操作符用于改寫所述第一文件定值操作符操作的所述第二操作數(shù)指向的數(shù)據(jù);
所述查詢模塊還用于:
在執(zhí)行所述優(yōu)化后的查詢語(yǔ)句過(guò)程中,根據(jù)所述第二操作數(shù)的終止活躍 位置釋放所述第二操作數(shù)指示的數(shù)據(jù)的存儲(chǔ)空間。
本發(fā)明實(shí)施例提供的批量數(shù)據(jù)查詢方法和裝置,數(shù)據(jù)查詢服務(wù)器接通過(guò)根據(jù)N條查詢語(yǔ)句中的操作符和操作數(shù)確定N條查詢語(yǔ)句的操作數(shù)的符號(hào)標(biāo)識(shí),符號(hào)標(biāo)識(shí)包括操作數(shù)的版本號(hào),然后根據(jù)N條查詢語(yǔ)句的操作數(shù)的版本號(hào)確定N條查詢語(yǔ)句之間的依賴關(guān)系,進(jìn)而根據(jù)N條查詢語(yǔ)句之間的依賴關(guān)系以及預(yù)設(shè)的優(yōu)化規(guī)則對(duì)N條查詢語(yǔ)句進(jìn)行查詢間優(yōu)化。由于N條查詢語(yǔ)句的操作數(shù)的符號(hào)標(biāo)識(shí)是固定的,不會(huì)隨著輸入的查詢語(yǔ)句的不同而變化,因此,本實(shí)施例所提出的是一種對(duì)查詢間數(shù)據(jù)流關(guān)系的靜態(tài)分析和維護(hù)技術(shù),即一種與輸入數(shù)據(jù)無(wú)關(guān)的,不需要執(zhí)行任何查詢語(yǔ)句的任何部分、且無(wú)需監(jiān)控查詢語(yǔ)句執(zhí)行過(guò)程中的數(shù)據(jù)訪問和更新情況,提高了查詢間優(yōu)化的效率,并且降低了查詢間優(yōu)化的開銷。
附圖說(shuō)明
為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作一簡(jiǎn)單地介紹。
圖1為本發(fā)明實(shí)施例一提供的批量數(shù)據(jù)查詢方法的流程圖;
圖2為本發(fā)明實(shí)施例二提供的確定N條查詢語(yǔ)句的操作數(shù)的符號(hào)標(biāo)識(shí)的流程圖;
圖3為本發(fā)明實(shí)施例三提供的數(shù)據(jù)查詢服務(wù)器的結(jié)構(gòu)示意圖;
圖4為本發(fā)明實(shí)施例四提供的數(shù)據(jù)查詢服務(wù)器的結(jié)構(gòu)示意圖。
具體實(shí)施方式
為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。
本發(fā)明各實(shí)施例的方法主要應(yīng)用在批量數(shù)據(jù)查詢的場(chǎng)景下。批量數(shù)據(jù)查詢通常采用客戶端/服務(wù)器模式,數(shù)據(jù)庫(kù)中通常包括多個(gè)數(shù)據(jù)查詢服務(wù)器、存儲(chǔ)系統(tǒng)和大量的客戶端,存儲(chǔ)系統(tǒng)可以包括一臺(tái)或多臺(tái)存儲(chǔ)設(shè)備。在一次批量查詢過(guò)程中,多個(gè)客戶端都可能向數(shù)據(jù)查詢服務(wù)器發(fā)送查詢語(yǔ)句,當(dāng)數(shù)據(jù)查詢服務(wù)器確定接收到的查詢語(yǔ)句的數(shù)量達(dá)到預(yù)設(shè)的數(shù)量,則對(duì)多條查詢 語(yǔ)句進(jìn)行批量查詢,或者,數(shù)據(jù)查詢服務(wù)器對(duì)預(yù)設(shè)時(shí)間段內(nèi)接收到的所有查詢語(yǔ)句進(jìn)行批量查詢。批量數(shù)據(jù)查詢的一個(gè)常用場(chǎng)景是數(shù)據(jù)倉(cāng)庫(kù)。數(shù)據(jù)倉(cāng)庫(kù)是決策支持系統(tǒng)和聯(lián)機(jī)分析應(yīng)用數(shù)據(jù)源的結(jié)構(gòu)化數(shù)據(jù)環(huán)境。數(shù)據(jù)倉(cāng)庫(kù)主要研究和解決從數(shù)據(jù)庫(kù)中獲取信息的問題。數(shù)據(jù)倉(cāng)庫(kù)的特征在于面向主題、集成性、穩(wěn)定性和時(shí)變性,在數(shù)據(jù)倉(cāng)庫(kù)中存在大量的批量數(shù)據(jù)查詢機(jī)會(huì),數(shù)據(jù)倉(cāng)庫(kù)中存在大量的數(shù)據(jù),這些數(shù)據(jù)通常存儲(chǔ)在分布式存儲(chǔ)系統(tǒng)中。
圖1為本發(fā)明實(shí)施例一提供的批量數(shù)據(jù)查詢方法的流程圖,本實(shí)施例提供的方法可以由數(shù)據(jù)查詢服務(wù)器執(zhí)行,如圖1所示,本實(shí)施例提供的方法可以包括以下步驟:
步驟101、接收待執(zhí)行的N條查詢語(yǔ)句,N為大于等于2的正整數(shù)。
步驟102、根據(jù)N條查詢語(yǔ)句中的操作符和操作數(shù)確定N條查詢語(yǔ)句的操作數(shù)的符號(hào)標(biāo)識(shí)。
每條查詢語(yǔ)句中包括多個(gè)操作符,每個(gè)操作符引用一個(gè)或多個(gè)操作數(shù),其中,操作符用于指示要執(zhí)行的操作,常用的操作符包括:掃描操作符(Scan Operator)、文件定值操作符(Filesink Operator)、創(chuàng)建操作符、銷毀操作符、排序操作符(Sort Operator)、選擇操作符(Select Operator)、聚集操作符(Aggregate Operator)、乘積操作符(Product Operator)和連接操作符(Join Operator)等。
本實(shí)施例中,操作數(shù)并不是指具體的一條數(shù)據(jù)記錄,而是用于指示操作符待操作的數(shù)據(jù)的存儲(chǔ)位置,即操作數(shù)與存儲(chǔ)位置對(duì)應(yīng)。操作數(shù)可以是一個(gè)變量或表達(dá)式,操作數(shù)所指示的存儲(chǔ)位置可以為一張數(shù)據(jù)表、數(shù)據(jù)表中的一個(gè)分區(qū)或數(shù)據(jù)表中的一個(gè)字段等。本實(shí)施例中,操作數(shù)的符號(hào)標(biāo)識(shí)包括操作數(shù)的版本號(hào),并且,指代相同數(shù)據(jù)的操作數(shù)具有相同的版本號(hào),指代不同數(shù)據(jù)的操作數(shù)具有不同的版本號(hào)。在數(shù)據(jù)庫(kù)中,兩個(gè)操作符擁有同名的操作數(shù)(如:a),并不代表二者一定操作相同的數(shù)據(jù);同理,兩個(gè)操作符擁有不同名的操作數(shù)(如:a和b),也并不代表二者所操作的數(shù)據(jù)是不同的。因此,在確定N條查詢語(yǔ)句的操作數(shù)的符號(hào)標(biāo)識(shí)時(shí),不能只根據(jù)兩個(gè)操作數(shù)的名稱確定兩個(gè)操作數(shù)是否相同,而應(yīng)該根據(jù)兩個(gè)操作數(shù)指代的數(shù)據(jù)是否相同確定兩個(gè)操作數(shù)是否相同,其中,操作數(shù)指代的數(shù)據(jù)即操作數(shù)所指示的存儲(chǔ)位置中存儲(chǔ)的數(shù)據(jù)。
數(shù)據(jù)查詢服務(wù)器在確定N條查詢語(yǔ)句的操作數(shù)的符號(hào)標(biāo)識(shí)時(shí),可以根據(jù)N條查詢語(yǔ)句之間的順序,以及每條查詢語(yǔ)句內(nèi)部操作符執(zhí)行的先后順序確定N條查詢語(yǔ)句的所有操作數(shù)的符號(hào)標(biāo)識(shí)。一種實(shí)現(xiàn)方式中,數(shù)據(jù)查詢服務(wù)器先獲取N條查詢語(yǔ)句對(duì)應(yīng)的N棵邏輯查詢計(jì)劃樹,其中,一條查詢語(yǔ)句對(duì)應(yīng)一棵邏輯查詢計(jì)劃樹,每棵邏輯查詢計(jì)劃樹的每個(gè)節(jié)點(diǎn)為一個(gè)操作符。然后,為N棵邏輯查詢計(jì)劃樹中的第一類操作符的操作數(shù)添加符號(hào)標(biāo)識(shí),其中,第一類操作符包括:創(chuàng)建操作符、銷毀操作符、掃描操作符和文件定值操作符。在為N棵邏輯查詢計(jì)劃樹中的第一類操作符的操作數(shù)添加符號(hào)標(biāo)識(shí)之前,還要為N棵邏輯查詢計(jì)劃樹的第一類操作符的操作數(shù)生成符號(hào)標(biāo)識(shí),生成的符號(hào)標(biāo)識(shí)包括操作數(shù)的版本號(hào)。
在為N棵邏輯查詢計(jì)劃樹的第一類操作符的操作數(shù)添加符號(hào)標(biāo)識(shí)之后,還要根據(jù)第一類操作符的操作數(shù)的符號(hào)標(biāo)識(shí)為第二類操作符的操作數(shù)添加符號(hào)標(biāo)識(shí)。具體的,對(duì)于N棵邏輯查詢計(jì)劃樹中的每一棵查詢計(jì)劃樹分別執(zhí)行如下操作:
根據(jù)第一邏輯查詢計(jì)劃樹的拓?fù)漤樞颉⒌谝贿壿嫴樵冇?jì)劃樹中的第一類操作符的操作數(shù)的符號(hào)標(biāo)識(shí)以及預(yù)設(shè)的添加規(guī)則為第一邏輯查詢計(jì)劃樹中的第二類操作符的操作數(shù)添加符號(hào)標(biāo)識(shí)。其中,第一邏輯查詢計(jì)劃樹為N棵邏輯查詢計(jì)劃樹中的任意一棵邏輯查詢計(jì)劃樹,第二類操作符為除所述第一類操作符之外的其他操作符。本實(shí)施例中,第一邏輯查詢計(jì)劃樹的節(jié)點(diǎn)包括:根節(jié)點(diǎn)、葉子節(jié)點(diǎn)和內(nèi)部節(jié)點(diǎn),處在邏輯查詢計(jì)劃樹的最頂端(沒有雙親)的節(jié)點(diǎn)為根節(jié)點(diǎn),處在邏輯查詢計(jì)劃樹的最底端(沒有孩子)的節(jié)點(diǎn)為葉子節(jié)點(diǎn),內(nèi)部節(jié)點(diǎn)為既有雙親也有孩子的節(jié)點(diǎn)。第一邏輯查詢計(jì)劃樹的拓?fù)漤樞蚴侵笍娜~子節(jié)點(diǎn)到根節(jié)點(diǎn)的順序。
本實(shí)施例中,第一邏輯查詢計(jì)劃樹的根節(jié)點(diǎn)包括文件定值操作符,第一邏輯查詢計(jì)劃樹的葉子節(jié)點(diǎn)包括文件掃描操作符,第一邏輯查詢計(jì)劃樹的內(nèi)部節(jié)點(diǎn)包括第二類操作符、創(chuàng)建操作符和銷毀操作符。其中,內(nèi)部節(jié)點(diǎn)為除葉子節(jié)點(diǎn)和根節(jié)點(diǎn)之外的其他節(jié)點(diǎn)。若第一邏輯查詢計(jì)劃樹為二叉樹,則第一邏輯查詢計(jì)劃樹的內(nèi)部節(jié)點(diǎn)具有一個(gè)左孩子節(jié)點(diǎn)和一個(gè)右孩子節(jié)點(diǎn)。上述添加規(guī)則包括:對(duì)于第一邏輯查詢計(jì)劃樹中的每一個(gè)第二類操作符,執(zhí)行如下操作:若第一操作符的操作數(shù)與第一操作符的左孩子節(jié)點(diǎn)的操作數(shù)相同, 則為第一操作符的操作數(shù)添加與第一操作符的左孩子節(jié)點(diǎn)的操作數(shù)的符號(hào)標(biāo)識(shí)相同的符號(hào)標(biāo)識(shí),;若第一操作符的操作數(shù)與第一操作符的右孩子節(jié)點(diǎn)的操作數(shù)相同,則為第一操作符的操作數(shù)添加與第一操作符的右孩子節(jié)點(diǎn)的操作數(shù)的符號(hào)標(biāo)識(shí)相同的符號(hào)標(biāo)識(shí)。其中,第一操作符為第二類操作符中的任意一個(gè)操作符。
本實(shí)施例中,第一操作符的左孩子節(jié)點(diǎn)和右孩子節(jié)點(diǎn)可能是第一類操作符,也可能是第二類操作符,具體的,當(dāng)?shù)谝徊僮鞣淖蠛⒆庸?jié)點(diǎn)和右孩子節(jié)點(diǎn)為葉子節(jié)點(diǎn)時(shí),第一操作符的左孩子節(jié)點(diǎn)和右孩子節(jié)點(diǎn)是第一類操作符。當(dāng)?shù)谝徊僮鞣淖蠛⒆庸?jié)點(diǎn)和右孩子節(jié)點(diǎn)為內(nèi)部節(jié)點(diǎn)時(shí),第一操作符的左孩子節(jié)點(diǎn)和右孩子節(jié)點(diǎn)是第二類操作符。例如,假設(shè)第一邏輯查詢計(jì)劃樹共有4層,第一層包括的節(jié)點(diǎn)為根節(jié)點(diǎn),第二層和第三層包括的節(jié)點(diǎn)為內(nèi)部節(jié)點(diǎn),第四層包括的節(jié)點(diǎn)為葉子節(jié)點(diǎn)。在為該第一邏輯查詢計(jì)劃樹的第二類操作符的操作數(shù)添加符號(hào)標(biāo)識(shí)時(shí),先根據(jù)第四層的葉子節(jié)點(diǎn)上的操作數(shù)為第三層的內(nèi)部節(jié)點(diǎn)上的操作數(shù)添加符號(hào)標(biāo)識(shí),第四層的葉子節(jié)點(diǎn)為第一類操作符,第三層的內(nèi)部節(jié)點(diǎn)為第二類操作符,即根據(jù)第一類操作符的操作數(shù)為第二類操作符的操作數(shù)添加符號(hào)標(biāo)識(shí)。在為第三層的所有內(nèi)部節(jié)點(diǎn)的操作數(shù)都添加完符號(hào)標(biāo)識(shí)之后,根據(jù)第三的所有內(nèi)部節(jié)點(diǎn)的操作數(shù)為第二層的所有內(nèi)部節(jié)點(diǎn)添加符號(hào)標(biāo)識(shí),第二層內(nèi)部節(jié)點(diǎn)為第二類操作符,這時(shí)可以根據(jù)第三層的第二類操作符的操作數(shù)的符號(hào)標(biāo)識(shí)為第二層的第二類操作符的操作數(shù)添加符號(hào)標(biāo)識(shí)。
步驟103、根據(jù)確定的N條查詢語(yǔ)句的操作數(shù)的版本號(hào)確定N條查詢語(yǔ)句之間的依賴關(guān)系。
N條語(yǔ)句之間的依賴關(guān)系可以包括:流依賴關(guān)系、輸出依賴關(guān)系、操作符重疊關(guān)系、操作數(shù)重疊關(guān)系。其中,流依賴關(guān)系是指在前執(zhí)行的一條查詢語(yǔ)句的文件定值操作符的操作數(shù)的版本號(hào)與在后執(zhí)行的另一條查詢語(yǔ)句的掃描操作符的操作數(shù)的版本號(hào)相同。輸出依賴關(guān)系是指在前執(zhí)行的一條查詢語(yǔ)句的文件定值操作符的操作數(shù)的版本號(hào)被在后執(zhí)行的另一條查詢語(yǔ)句的文件定值所定值,即在后執(zhí)行的文件定值操作符對(duì)在前執(zhí)行的文件定值操作符的操作數(shù)進(jìn)行了改寫。操作符重疊關(guān)系是指兩條查詢語(yǔ)句的各類操作符的數(shù)量均相同,操作數(shù)重疊關(guān)系是指兩條查詢語(yǔ)句的全部或者部分操作數(shù)的版本號(hào) 相同。
步驟104、根據(jù)N條查詢語(yǔ)句之間的依賴關(guān)系以及預(yù)設(shè)的優(yōu)化規(guī)則對(duì)N條查詢語(yǔ)句進(jìn)行查詢間優(yōu)化。
查詢間優(yōu)化是針對(duì)多棵邏輯查詢計(jì)劃樹整體進(jìn)行優(yōu)化,也就是優(yōu)化機(jī)會(huì)存在邏輯查詢計(jì)劃樹之間,而不是針對(duì)單棵邏輯查詢計(jì)劃樹進(jìn)行優(yōu)化。優(yōu)化規(guī)則包括下述規(guī)則中的至少一個(gè)規(guī)則:(1)刪除與第一查詢語(yǔ)句具有相同操作數(shù)版本號(hào)和相同操作符的查詢語(yǔ)句,其中,第一查詢語(yǔ)句為N條查詢語(yǔ)句中的任意一條查詢語(yǔ)句;(2)保持具有流依賴關(guān)系的查詢語(yǔ)句之間的查詢順序,并將具有流依賴關(guān)系的多個(gè)查詢語(yǔ)句優(yōu)化為一個(gè)新的查詢語(yǔ)句;(3)合并具有相同操作符且操作數(shù)有重疊的查詢語(yǔ)句。
優(yōu)化規(guī)則(1)針對(duì)的是具有操作符重疊關(guān)系的查詢語(yǔ)句的查詢間優(yōu)化,將與第一查詢語(yǔ)句具有相同操作數(shù)版本號(hào)和相同操作符的查詢語(yǔ)句稱為第二查詢語(yǔ)句,由于第一查詢語(yǔ)句和第二查詢語(yǔ)句具有相同操作數(shù)版本號(hào)和相同操作符,因此,第一查詢語(yǔ)句和第二查詢語(yǔ)句的查詢結(jié)果相同,可以刪除第二查詢語(yǔ)句。若將第一查詢語(yǔ)句和第二查詢語(yǔ)句都解析成邏輯查詢計(jì)劃子樹,則第一查詢語(yǔ)句對(duì)應(yīng)的第一邏輯查詢樹和第二查詢語(yǔ)句對(duì)應(yīng)的第二邏輯查詢計(jì)劃樹具有公共查詢子樹,即第一邏輯查詢計(jì)劃樹的第一查詢子樹與第二邏輯查詢計(jì)劃樹的第二查詢子樹的樹結(jié)構(gòu)相同,并且第一查詢子樹的每個(gè)操作符的操作數(shù)的數(shù)據(jù)標(biāo)識(shí)與第二查詢子樹的每個(gè)操作符的操作數(shù)的版本號(hào)均相同。通過(guò)對(duì)公共查詢子樹的優(yōu)化機(jī)會(huì)進(jìn)行優(yōu)化,避免重復(fù)的對(duì)同一查詢結(jié)果反復(fù)的進(jìn)行查詢,降低了數(shù)據(jù)庫(kù)查詢的開銷,提高了數(shù)據(jù)庫(kù)查詢的效率。
優(yōu)化規(guī)則(2)針對(duì)的是具有流依賴關(guān)系的查詢語(yǔ)句的查詢間優(yōu)化,可以將在前執(zhí)行的文件定值操作符的前驅(qū)與在后執(zhí)行的掃描操作符的后繼直接連接,并刪除在后執(zhí)行的掃描操作符,這樣在前執(zhí)行文件定值操作符在執(zhí)行完后,直接將文件定值操作符的輸出結(jié)果作為掃描操作符的輸入進(jìn)行處理,不需要先將文件定值操作符的輸出結(jié)果寫入分布式存儲(chǔ)系統(tǒng)然后再讀出來(lái),從而降低了對(duì)分布式存儲(chǔ)系統(tǒng)的讀寫開銷,提高了查詢效率。
優(yōu)化規(guī)則(3)針對(duì)的是具有操作數(shù)重疊關(guān)系的查詢語(yǔ)句的查詢間優(yōu)化,若第一查詢語(yǔ)句的第一操作符與第二查詢語(yǔ)句的第二操作符相同,并且第一操作符的部分操作數(shù)的版本號(hào)與第二操作符的部分操作數(shù)的版本號(hào)相同,則 在后續(xù)在查詢過(guò)程中,在為第一查詢語(yǔ)句和第二查詢語(yǔ)句生成物理查詢樹時(shí)將該第一操作符和該第二操作符合并為同一個(gè)任務(wù),對(duì)重疊的操作數(shù)和不重疊的操作樹分別進(jìn)行查詢,由于合并為了同一個(gè)任務(wù),只對(duì)重疊的操作數(shù)進(jìn)行一次查詢,從而減少了對(duì)重疊數(shù)據(jù)的掃描操作開銷。
步驟105、執(zhí)行優(yōu)化后的查詢語(yǔ)句以得到N條查詢語(yǔ)句的查詢結(jié)果。
本實(shí)施例中,數(shù)據(jù)查詢服務(wù)器接通過(guò)根據(jù)N條查詢語(yǔ)句中的操作符和操作數(shù)確定N條查詢語(yǔ)句的操作數(shù)的符號(hào)標(biāo)識(shí),符號(hào)標(biāo)識(shí)包括操作數(shù)的版本號(hào),然后根據(jù)N條查詢語(yǔ)句的操作數(shù)的版本號(hào)確定N條查詢語(yǔ)句之間的依賴關(guān)系,進(jìn)而根據(jù)N條查詢語(yǔ)句之間的依賴關(guān)系以及預(yù)設(shè)的優(yōu)化規(guī)則對(duì)N條查詢語(yǔ)句進(jìn)行查詢間優(yōu)化。由于N條查詢語(yǔ)句的操作數(shù)的符號(hào)標(biāo)識(shí)是固定的,不會(huì)隨著輸入的查詢語(yǔ)句的不同而變化,因此,本實(shí)施例所提出的是一種對(duì)查詢間數(shù)據(jù)流關(guān)系的靜態(tài)分析和維護(hù)技術(shù),即一種與輸入數(shù)據(jù)無(wú)關(guān)的,不需要執(zhí)行任何查詢語(yǔ)句的任何部分、且無(wú)需監(jiān)控查詢語(yǔ)句執(zhí)行過(guò)程中的數(shù)據(jù)訪問和更新情況,提高了查詢間優(yōu)化的效率,并且降低了查詢間優(yōu)化的開銷。
在實(shí)施例一的基礎(chǔ)上,可選的,N條查詢語(yǔ)句中的操作數(shù)的符號(hào)標(biāo)識(shí)還可以包括:熱數(shù)據(jù)標(biāo)識(shí),則根據(jù)N條查詢語(yǔ)句中的操作符和操作數(shù)確定N條查詢語(yǔ)句的操作數(shù)的符號(hào)標(biāo)識(shí)還包括:統(tǒng)計(jì)N棵邏輯查詢計(jì)劃樹中的每個(gè)掃描操作符的操作數(shù)被引用的次數(shù);判斷N棵邏輯查詢計(jì)劃樹中的每個(gè)掃描操作符的操作數(shù)被引用的次數(shù)是否大于熱數(shù)據(jù)閾值;為N棵邏輯查詢計(jì)劃樹中掃描操作符的操作數(shù)被引用的次數(shù)大于熱數(shù)據(jù)閾值的操作數(shù)添加熱數(shù)據(jù)標(biāo)識(shí),熱數(shù)據(jù)標(biāo)識(shí)用于表示具有熱數(shù)據(jù)標(biāo)識(shí)的操作數(shù)所指向的數(shù)據(jù)為熱數(shù)據(jù)。相應(yīng)的,后續(xù)在執(zhí)行優(yōu)化后的查詢語(yǔ)句過(guò)程中,可以并發(fā)執(zhí)行包含熱數(shù)據(jù)標(biāo)識(shí)且不存在流依賴關(guān)系和輸出依賴關(guān)系的優(yōu)化后的查詢語(yǔ)句。或者,在不改變查詢間流依賴和輸出依賴的前提下,對(duì)包含熱數(shù)據(jù)標(biāo)識(shí)的操作數(shù)對(duì)應(yīng)的操作符進(jìn)行重排序,使它們連續(xù)執(zhí)行,以提高對(duì)熱數(shù)據(jù)的訪問效率。
可選的,N條查詢語(yǔ)句中的操作數(shù)的符號(hào)標(biāo)識(shí)還可以包括:起始活躍位置和終止活躍位置,則根據(jù)N條查詢語(yǔ)句中的操作符和操作數(shù)確定N條查詢語(yǔ)句的操作數(shù)的符號(hào)標(biāo)識(shí)還包括:針對(duì)第一操作數(shù),根據(jù)第一次引用第一操作數(shù)的掃描操作符的標(biāo)識(shí)和掃描操作符所在的邏輯查詢計(jì)劃樹的序號(hào)確定第一操作數(shù)的起始活躍位置。其中,第一操作數(shù)為N條查詢語(yǔ)句中的操作數(shù)中 的任意一個(gè)操作數(shù)。根據(jù)用于銷毀第一操作數(shù)的銷毀操作符的標(biāo)識(shí)和銷毀操作符所在的邏輯查詢計(jì)劃樹的序號(hào)確定第一操作數(shù)的終止活躍位置。相應(yīng)的,后續(xù)在執(zhí)行優(yōu)化后的查詢語(yǔ)句過(guò)程中,可以根據(jù)第一操作數(shù)的終止活躍位置釋放第一操作數(shù)指示的數(shù)據(jù)的存儲(chǔ)空間。具體的,數(shù)據(jù)查詢服務(wù)器根據(jù)第一操作數(shù)的終止活躍位置可以確定第一操作數(shù)在終止活躍位置之后已經(jīng)不活躍了,對(duì)于已經(jīng)不活躍操作數(shù),應(yīng)盡快將其所占用的存儲(chǔ)空間予以釋放,以供其他操作數(shù)占用,從而能夠提高存儲(chǔ)空間的利用率。數(shù)據(jù)查詢服務(wù)器也可以根據(jù)第一操作數(shù)的起始活躍位置和終止活躍位置確定第一操作數(shù)的活躍區(qū)間,對(duì)于活躍區(qū)間較短(例如,僅在某一個(gè)查詢內(nèi)活躍)的操作數(shù),若該操作數(shù)的存儲(chǔ)在分布式存儲(chǔ)系統(tǒng)中,則通過(guò)優(yōu)化,可以將該操作數(shù)的存儲(chǔ)位置由分布式存儲(chǔ)系統(tǒng)改為數(shù)據(jù)查詢服務(wù)器的本地磁盤或內(nèi)存,以降低固化和訪問開銷。
另外,對(duì)于N條查詢語(yǔ)句中的操作數(shù)中的任意一個(gè)操作數(shù),在本發(fā)明實(shí)施例中可以稱為第二操作數(shù)。針對(duì)第二操作數(shù),根據(jù)第一次引用第二操作數(shù)的第一文件定值操作符的標(biāo)識(shí)和第一文件定值操作符所在的邏輯查詢計(jì)劃樹的序號(hào)確定第二操作數(shù)的起始活躍位置。其中,第一文件定值操作符用于向第二操作數(shù)指代的存儲(chǔ)位置寫數(shù)據(jù)。根據(jù)引用第二操作數(shù)的第二文件定值操作符的標(biāo)識(shí)和第二文件定值操作符所在的邏輯查詢計(jì)劃樹的序號(hào)確定第二操作數(shù)的終止活躍位置,其中,第二文件定值操作符用于改寫第一文件定值操作符操作的第二操作數(shù)指向的數(shù)據(jù)。相應(yīng)的,后續(xù)在執(zhí)行優(yōu)化后的查詢語(yǔ)句過(guò)程中,根據(jù)第二操作數(shù)的終止活躍位置釋放第二操作數(shù)指示的數(shù)據(jù)的存儲(chǔ)空間。需說(shuō)明的是,本實(shí)施例中提到的各操作符的標(biāo)識(shí)用于標(biāo)識(shí)操作符的順序,具體可以為操作符的身份標(biāo)識(shí)號(hào)(Identity,簡(jiǎn)稱ID)。
在上述實(shí)施例一的基礎(chǔ)上,本發(fā)明實(shí)施例二將通過(guò)一個(gè)具體的例如說(shuō)明如何確定N條查詢語(yǔ)句的操作數(shù)的符號(hào)標(biāo)識(shí),圖2為本發(fā)明實(shí)施例二提供的確定N條查詢語(yǔ)句的操作數(shù)的符號(hào)標(biāo)識(shí)的流程圖,如圖2所示,本實(shí)施例提供的方法可以包括以下步驟:
步驟201、創(chuàng)建符號(hào)標(biāo)識(shí)表,該符號(hào)標(biāo)識(shí)表中的每條數(shù)據(jù)記錄包括如下字段:版本號(hào)、引用、定值、活躍、不活躍和路徑。
本實(shí)施例中,首先創(chuàng)建一個(gè)符號(hào)標(biāo)識(shí)表,該符號(hào)標(biāo)識(shí)表用于維護(hù)N條查 詢語(yǔ)句的操作數(shù)的符號(hào)標(biāo)識(shí)。表狀結(jié)構(gòu)并非為存儲(chǔ)符號(hào)標(biāo)識(shí)的唯一形式,也可以采用鏈表、散列表等存儲(chǔ)形式存儲(chǔ)符號(hào)標(biāo)識(shí)。
該符號(hào)標(biāo)識(shí)表中每條數(shù)據(jù)記錄包括如下字段:版本號(hào)、引用、定值、活躍、不活躍和路徑,其中,版本號(hào)字段用于存儲(chǔ)數(shù)據(jù)記錄對(duì)應(yīng)的操作數(shù)的版本號(hào),引用字段用于存儲(chǔ)引用該數(shù)據(jù)記錄對(duì)應(yīng)的操作數(shù)的掃描操作符的標(biāo)識(shí)和該掃描操作符所在的邏輯查詢計(jì)劃樹的序號(hào),定值字段用于存儲(chǔ)定值該數(shù)據(jù)記錄對(duì)應(yīng)的操作數(shù)的文件定值操作符的標(biāo)識(shí)和該文件定值操作符所在的邏輯查詢計(jì)劃樹的序號(hào),路徑字段用于存儲(chǔ)該數(shù)據(jù)記錄對(duì)應(yīng)的操作數(shù)的存儲(chǔ)位置,活躍字段用于存儲(chǔ)引用該數(shù)據(jù)記錄對(duì)應(yīng)的操作數(shù)的掃描操作符的標(biāo)識(shí)和掃描操作符所在的邏輯查詢計(jì)劃樹的序號(hào),或用于存儲(chǔ)定值該數(shù)據(jù)記錄對(duì)應(yīng)的操作數(shù)的文件定值操作符的標(biāo)識(shí)和該文件定值操作符所在的邏輯查詢計(jì)劃樹的序號(hào),不活躍字段用于存儲(chǔ)銷毀該數(shù)據(jù)記錄對(duì)應(yīng)的操作數(shù)的銷毀操作符的標(biāo)識(shí)和該銷毀操作符所在的邏輯查詢計(jì)劃樹的序號(hào),或用于存儲(chǔ)注銷該數(shù)據(jù)記錄對(duì)應(yīng)的操作數(shù)的文件定值操作符的標(biāo)識(shí)和該文件定值操作符所在的邏輯查詢計(jì)劃樹的序號(hào)。
步驟202、初始化版本號(hào)字段的值。
例如,將版本號(hào)字段的值初始化為-1,之后該符號(hào)標(biāo)識(shí)表中每增加一條數(shù)據(jù)記錄,版本號(hào)字段的值加1。
步驟203、按照N棵邏輯查詢計(jì)劃樹的順序,依次遍歷每棵邏輯查詢計(jì)劃樹,為每棵邏輯查詢計(jì)劃樹中的創(chuàng)建操作符、掃描操作符、文件定值操作符和銷毀操作符的操作數(shù)生成對(duì)應(yīng)的數(shù)據(jù)記錄,其中,N棵邏輯查詢計(jì)劃樹的順序與N條查詢語(yǔ)句的輸入順序一致。
具體可通過(guò)以下如下兩種方式為每棵邏輯查詢計(jì)劃樹中的創(chuàng)建操作符、掃描操作符、文件定值操作符和銷毀操作符的操作數(shù)生成對(duì)應(yīng)的數(shù)據(jù)記錄,第一種方式如下:
在遍歷第i棵邏輯查詢計(jì)劃樹時(shí),若第i棵邏輯查詢計(jì)劃樹中包括創(chuàng)建操作符,則為第i棵邏輯查詢計(jì)劃樹的創(chuàng)建操作符的操作數(shù)創(chuàng)建一條數(shù)據(jù)記錄,將第i棵邏輯查詢計(jì)劃樹的創(chuàng)建操作符的操作數(shù)的版本號(hào)和第i棵邏輯查詢計(jì)劃樹的創(chuàng)建操作符的操作數(shù)的存儲(chǔ)位置的對(duì)應(yīng)關(guān)系保存到映射關(guān)系表中。本實(shí)施例中,映射關(guān)系表用于保存操作數(shù)的版本號(hào)與操作數(shù)的存儲(chǔ)位置 的對(duì)應(yīng)關(guān)系,i為N棵邏輯查詢計(jì)劃樹的編號(hào),i的初始值為1,i的取值為:大于等于1,且小于等于N的整數(shù)。為第i棵邏輯查詢計(jì)劃樹的創(chuàng)建操作符的操作數(shù)創(chuàng)建一條數(shù)據(jù)記錄具體為:將該符號(hào)標(biāo)識(shí)表中的版本號(hào)字段的當(dāng)前取值加1得到第i棵邏輯查詢計(jì)劃樹的創(chuàng)建操作符的操作數(shù)的版本號(hào),將第i棵邏輯查詢計(jì)劃樹的創(chuàng)建操作符的操作數(shù)的版本號(hào)添加到第i棵邏輯查詢計(jì)劃樹的創(chuàng)建操作符的操作數(shù)對(duì)應(yīng)的數(shù)據(jù)記錄的版本號(hào)字段中,第i棵邏輯查詢計(jì)劃樹的創(chuàng)建操作符的操作數(shù)對(duì)應(yīng)的數(shù)據(jù)記錄的其他字段為空。
若第i棵邏輯查詢計(jì)劃樹中包括銷毀操作符,則根據(jù)第i棵邏輯查詢計(jì)劃樹的銷毀操作符的操作數(shù)的存儲(chǔ)位置,從該映射關(guān)系表中查找第i棵邏輯查詢計(jì)劃樹的銷毀操作符的操作數(shù)的存儲(chǔ)位置對(duì)應(yīng)的版本號(hào)。若查找到第i棵邏輯查詢計(jì)劃樹的銷毀操作符的操作數(shù)的存儲(chǔ)位置對(duì)應(yīng)的版本號(hào),則根據(jù)第i棵邏輯查詢計(jì)劃樹的銷毀操作符的操作數(shù)的存儲(chǔ)位置對(duì)應(yīng)的版本號(hào)從該符號(hào)標(biāo)識(shí)表中查找第i棵邏輯查詢計(jì)劃樹的銷毀操作符的操作數(shù)對(duì)應(yīng)的數(shù)據(jù)記錄,將第i棵邏輯查詢計(jì)劃樹的序號(hào)i和第i棵邏輯查詢計(jì)劃樹的銷毀操作符的標(biāo)識(shí),添加到第i棵邏輯查詢計(jì)劃樹的銷毀操作符的操作數(shù)對(duì)應(yīng)的數(shù)據(jù)記錄的非活躍字段中。
若第i棵邏輯查詢計(jì)劃樹中包括掃描操作符,則根據(jù)第i棵邏輯查詢計(jì)劃樹的掃描操作符的操作數(shù)的存儲(chǔ)位置,從映射關(guān)系表中查找第i棵邏輯查詢計(jì)劃樹的掃描操作符的操作數(shù)的存儲(chǔ)位置對(duì)應(yīng)的版本號(hào)。
若查找到第i棵邏輯查詢計(jì)劃樹的掃描操作符的操作數(shù)的存儲(chǔ)位置對(duì)應(yīng)的版本號(hào),則根據(jù)第i棵邏輯查詢計(jì)劃樹的掃描操作符的操作數(shù)的存儲(chǔ)位置對(duì)應(yīng)的版本號(hào)從該符號(hào)標(biāo)識(shí)表中查找第i棵邏輯查詢計(jì)劃樹的掃描操作符的操作數(shù)對(duì)應(yīng)的數(shù)據(jù)記錄。在查找到第i棵邏輯查詢計(jì)劃樹的掃描操作符的操作數(shù)對(duì)應(yīng)的數(shù)據(jù)記錄后,判斷第i棵邏輯查詢計(jì)劃樹的文件掃描操作符的操作數(shù)對(duì)應(yīng)的數(shù)據(jù)記錄的活躍字段是否為空。若第i棵邏輯查詢計(jì)劃樹的文件掃描操作符的操作數(shù)對(duì)應(yīng)的數(shù)據(jù)記錄的活躍字段的值為空,則將第i棵邏輯查詢計(jì)劃樹的序號(hào)i和第i棵邏輯查詢計(jì)劃樹的掃描操作符的標(biāo)識(shí),添加到第i棵邏輯查詢計(jì)劃樹的掃描操作符的操作數(shù)對(duì)應(yīng)的數(shù)據(jù)記錄的引用字段和活躍字段中。若第i棵邏輯查詢計(jì)劃樹的文件掃描操作符的操作數(shù)對(duì)應(yīng)的數(shù)據(jù)記錄的活躍字段不為空,則將第i棵邏輯查詢計(jì)劃樹的序號(hào)i和第i棵邏輯查 詢計(jì)劃樹的掃描操作符的標(biāo)識(shí),添加到第i棵邏輯查詢計(jì)劃樹的掃描操作符的操作數(shù)對(duì)應(yīng)的數(shù)據(jù)記錄的引用字段中。若沒有查找到第i棵邏輯查詢計(jì)劃樹的掃描操作符的操作數(shù)的存儲(chǔ)位置對(duì)應(yīng)的版本號(hào),則為第i棵邏輯查詢計(jì)劃樹的掃描操作符的操作數(shù)創(chuàng)建一條數(shù)據(jù)記錄,將第i棵邏輯查詢計(jì)劃樹的掃描操作符的操作數(shù)的版本號(hào)和第i棵邏輯查詢計(jì)劃樹的掃描操作符的操作數(shù)的存儲(chǔ)位置的對(duì)應(yīng)關(guān)系保存到該映射關(guān)系表中,并將第i棵邏輯查詢計(jì)劃樹的序號(hào)i和第i棵邏輯查詢計(jì)劃樹的掃描操作符的標(biāo)識(shí),添加到新創(chuàng)建的數(shù)據(jù)記錄的引用字段和活躍字段中。
本實(shí)施例中,若在該映射關(guān)系表中查找到第i棵邏輯查詢計(jì)劃樹的掃描操作符的操作數(shù)的存儲(chǔ)位置對(duì)應(yīng)的版本號(hào),則說(shuō)明前i-1棵邏輯查詢計(jì)劃樹中掃描操作符的操作數(shù)與第i棵邏輯查詢計(jì)劃樹的掃描操作符的操作數(shù)相同,因此,已經(jīng)為該相同的操作數(shù)生成了版本號(hào)。若在該映射關(guān)系表中沒有查找到第i棵邏輯查詢計(jì)劃樹的掃描操作符的操作數(shù)的存儲(chǔ)位置對(duì)應(yīng)的版本號(hào),則說(shuō)明第i棵邏輯查詢計(jì)劃樹的掃描操作符的操作數(shù)第一次出現(xiàn),還沒有為第i棵邏輯查詢計(jì)劃樹的掃描操作符的操作數(shù)生成版本號(hào)。
若i棵邏輯查詢計(jì)劃樹中包括文件定值操作符,則根據(jù)第i棵邏輯查詢計(jì)劃樹的文件定值操作符的操作數(shù)的存儲(chǔ)位置,從該映射關(guān)系表中查找第i棵邏輯查詢計(jì)劃樹的文件定值操作符的操作數(shù)的存儲(chǔ)位置對(duì)應(yīng)的版本號(hào)。若查找到第i棵邏輯查詢計(jì)劃樹的文件定值操作符的操作數(shù)的存儲(chǔ)位置對(duì)應(yīng)的版本號(hào),則根據(jù)第i棵邏輯查詢計(jì)劃樹的文件定值操作符的操作數(shù)的存儲(chǔ)位置對(duì)應(yīng)的版本號(hào)從該符號(hào)標(biāo)識(shí)表中查找第i棵邏輯查詢計(jì)劃樹的文件定值操作符的操作數(shù)對(duì)應(yīng)的數(shù)據(jù)記錄,在查找到第i棵邏輯查詢計(jì)劃樹的文件定值操作符的操作數(shù)對(duì)應(yīng)的數(shù)據(jù)記錄后,判斷第i棵邏輯查詢計(jì)劃樹的文件操作符的操作數(shù)對(duì)應(yīng)的數(shù)據(jù)記錄的定值字段的值是否為空。
若第i棵邏輯查詢計(jì)劃樹的文件定值操作符的操作數(shù)對(duì)應(yīng)的數(shù)據(jù)記錄的定值字段為空,則首先將第i棵邏輯查詢計(jì)劃樹的序號(hào)i和第i棵邏輯查詢計(jì)劃樹的文件定值操作符的標(biāo)識(shí),添加到所述第i棵邏輯查詢計(jì)劃樹的文件定值操作符的操作數(shù)對(duì)應(yīng)的數(shù)據(jù)記錄的非活躍字段中,然后,為第i棵邏輯查詢計(jì)劃樹的文件定值操作符的操作數(shù)創(chuàng)建一條數(shù)據(jù)記錄,并將第i棵邏輯查詢計(jì)劃樹的文件定值操作符的操作數(shù)的版本號(hào)和第i棵邏輯查詢計(jì)劃樹的文 件定值操作符的操作數(shù)的存儲(chǔ)位置的對(duì)應(yīng)關(guān)系保存到該映射關(guān)系表中,將第i棵邏輯查詢計(jì)劃樹的序號(hào)i和第i棵邏輯查詢計(jì)劃樹的文件定值操作符的標(biāo)識(shí),添加到新創(chuàng)建的數(shù)據(jù)記錄的定值字段和活躍字段中。
在第一種方式中,在遍歷每棵邏輯查詢計(jì)劃樹時(shí),依次按照如下順序?yàn)槊靠眠壿嫴樵冇?jì)劃樹的操作數(shù)生成版本號(hào):創(chuàng)建操作符、銷毀操作符、引用操作符和文件定值操作符。在本發(fā)明其他可能的實(shí)現(xiàn)方式中,在為每棵邏輯查詢計(jì)劃樹的操作數(shù)生成版本號(hào)時(shí),可以不按照上述操作符的順序。需說(shuō)明的是,如果按照其他順序?yàn)槊靠眠壿嫴樵冇?jì)劃樹的操作數(shù)生成版本號(hào)時(shí),每次創(chuàng)建一條數(shù)據(jù)記錄時(shí),都要先查詢映射關(guān)系表中,如果映射關(guān)系表中沒有找到當(dāng)前的操作符的操作數(shù)對(duì)應(yīng)的版本號(hào),那么為當(dāng)前的操作符的操作數(shù)生成新的數(shù)據(jù)記錄。
在第一種方式中,僅需通過(guò)一次遍歷即可完成對(duì)N棵邏輯查詢計(jì)劃樹的操作數(shù)的版本號(hào)的生成。在第二中方式中,需要通過(guò)多次遍歷才能完成對(duì)N棵邏輯查詢計(jì)劃樹的操作數(shù)的版本號(hào)的生成,每次遍歷只為一種特定操作符的操作數(shù)生成版本號(hào),在第二中方式中,也需要先建立該符號(hào)標(biāo)識(shí)表,符號(hào)標(biāo)識(shí)表的各字段也和實(shí)施例一相同,不同的是,本實(shí)施例中,映射關(guān)系表用于保存由操作數(shù)的存儲(chǔ)位置到操作數(shù)的版本號(hào)和操作數(shù)所在的邏輯查詢計(jì)劃樹的序號(hào)所構(gòu)成的二元組的對(duì)應(yīng)關(guān)系。第二種方式如下:
首先,按照N棵邏輯查詢計(jì)劃樹的順序遍歷一次N棵邏輯查詢計(jì)劃樹,依次對(duì)N棵邏輯查詢計(jì)劃樹的每個(gè)文件定值操作符的操作數(shù)創(chuàng)建一條數(shù)據(jù)記錄,在對(duì)每個(gè)文件定值操作符的操作數(shù)創(chuàng)建數(shù)據(jù)記錄時(shí),該符號(hào)標(biāo)識(shí)表中版本號(hào)字段的當(dāng)前值加1后的值作為當(dāng)前文件定值操作符的操作數(shù)的版本號(hào),將當(dāng)前文件定值操作符的操作數(shù)的版本號(hào)添加到當(dāng)前數(shù)據(jù)記錄的版本號(hào)字段,將當(dāng)前文件定值操作符的標(biāo)識(shí)和該當(dāng)前文件定值操作符所在的邏輯查詢計(jì)劃樹的序號(hào)添加到該當(dāng)前數(shù)據(jù)記錄的定值字段和活躍字段中。然后,將該當(dāng)前文件定值操作符的操作數(shù)的存儲(chǔ)位置到該當(dāng)前文件定值操作符的操作數(shù)的版本號(hào)和該當(dāng)前文件定值操作符所在的邏輯查詢計(jì)劃樹的序號(hào)構(gòu)成的二元組的對(duì)應(yīng)關(guān)系保存到映射關(guān)系表中。
其次,按照N棵邏輯查詢計(jì)劃樹的順序第二次遍歷N棵邏輯查詢計(jì)劃樹,依次對(duì)N棵邏輯查詢計(jì)劃樹的銷毀操作符進(jìn)行如下處理:(1)根據(jù)當(dāng)前銷毀 操作符的操作數(shù)的存儲(chǔ)位置查找映射關(guān)系表,得到當(dāng)前銷毀操作符的操作數(shù)的存儲(chǔ)位置對(duì)應(yīng)的所有由操作數(shù)的版本號(hào)和邏輯查詢計(jì)劃樹的序號(hào)組成的二元組集合。(2)從該二元組集合中選出邏輯查詢計(jì)劃樹的序號(hào)小于當(dāng)前銷毀操作符所在的邏輯查詢計(jì)劃樹的序號(hào)的所有備選邏輯查詢計(jì)劃樹,從備選邏輯查詢計(jì)劃樹中確定出序號(hào)最大的邏輯查詢計(jì)劃樹,從該二元組集合中找到該最小序號(hào)所在的二元組,獲得該最小序號(hào)所在的二元組中的版本號(hào)。(3)根據(jù)該最小序號(hào)所在的二元組中的版本號(hào)查找該符號(hào)標(biāo)識(shí)表,找到該最大序號(hào)所在的二元組中的版本號(hào)對(duì)應(yīng)的數(shù)據(jù)記錄,將當(dāng)前銷毀操作符的標(biāo)識(shí)和該當(dāng)前銷毀操作符所在的邏輯查詢計(jì)劃樹的序號(hào),添加到該最小序號(hào)所在的二元組中的版本號(hào)對(duì)應(yīng)的數(shù)據(jù)記錄的不活躍字段中。如果沒有找到該最大序號(hào)所在的二元組中的版本號(hào),則跳轉(zhuǎn)到下一個(gè)銷毀操作符執(zhí)行上述處理。
之后,按照N棵邏輯查詢計(jì)劃樹的順序第三次遍歷N棵邏輯查詢計(jì)劃樹,依次對(duì)N棵邏輯查詢計(jì)劃樹的每個(gè)掃描操作符執(zhí)行如下處理:(1)根據(jù)當(dāng)前掃描操作符的操作數(shù)的存儲(chǔ)位置,查找映射關(guān)系表,得到當(dāng)前掃描操作符的操作數(shù)的存儲(chǔ)位置對(duì)應(yīng)的所有由操作數(shù)的版本號(hào)和邏輯查詢計(jì)劃樹的序號(hào)組成的二元組集合。(2)從該二元組集合中選出邏輯查詢計(jì)劃樹序號(hào)大于或等于當(dāng)前掃描操作符所在的邏輯查詢計(jì)劃樹的所有備選邏輯查詢計(jì)劃樹,從備選邏輯查詢計(jì)劃樹中確定出序號(hào)最小的邏輯查詢計(jì)劃樹,從該二元組集合中找到該最小序號(hào)所在的二元組,獲得該最小序號(hào)所在的二元組中的版本號(hào)。(3)該最小序號(hào)所在的二元組中的版本號(hào)查找該符號(hào)標(biāo)識(shí)表,找到該最小序號(hào)所在的二元組中的版本號(hào)對(duì)應(yīng)的數(shù)據(jù)記錄,將當(dāng)前掃描操作符的標(biāo)識(shí)和該當(dāng)前掃描操作符所在的邏輯查詢計(jì)劃樹的序號(hào),添加到該最大序號(hào)所在的二元組中的版本號(hào)對(duì)應(yīng)的數(shù)據(jù)記錄的引用字段中。(4)如果該最小序號(hào)所在的二元組中的版本號(hào)對(duì)應(yīng)的數(shù)據(jù)記錄的活躍字段為空,則將當(dāng)前掃描操作符的標(biāo)識(shí)和該當(dāng)前掃描操作符所在的邏輯查詢計(jì)劃樹的序號(hào),添加到該最小序號(hào)所在的二元組中的版本號(hào)對(duì)應(yīng)的數(shù)據(jù)記錄的活躍字段中。如果沒有找到該最小序號(hào)所在的二元組中的版本號(hào),則在該符號(hào)標(biāo)識(shí)表中新創(chuàng)建一條數(shù)據(jù)記錄,將版本號(hào)字段的最大取值加1得到當(dāng)前掃描操作符的操作數(shù)的版本號(hào),將當(dāng)前掃描操作符的操作數(shù)的版本號(hào)添加到新創(chuàng)建的數(shù)據(jù)記錄的版本號(hào)字段中,將當(dāng)前掃描操作符的操作數(shù)的存儲(chǔ)位置添加到新創(chuàng)建的數(shù)據(jù)記錄的路徑字段 中,將當(dāng)前掃描操作符的標(biāo)識(shí)和當(dāng)前掃描操作符的所在的邏輯查詢計(jì)劃樹的序號(hào)添加到新創(chuàng)建的數(shù)據(jù)記錄的引用字段和活躍字段中。
最后,按照N棵邏輯查詢計(jì)劃樹的順序的逆序第四次遍歷N棵邏輯查詢計(jì)劃樹,依次對(duì)N棵邏輯查詢計(jì)劃樹的每個(gè)創(chuàng)建操作符執(zhí)行如下處理:(1)根據(jù)當(dāng)前創(chuàng)建操作符的操作數(shù)的存儲(chǔ)位置,查找映射關(guān)系表,得到當(dāng)前創(chuàng)建操作符的操作數(shù)的存儲(chǔ)位置對(duì)應(yīng)的所有由操作數(shù)的版本號(hào)和邏輯查詢計(jì)劃樹的序號(hào)組成的二元組集合。(2)從該二元組集合中選出邏輯查詢計(jì)劃樹的序號(hào)大于等于當(dāng)前創(chuàng)建操作符所在的邏輯查詢計(jì)劃樹的序號(hào)的所有備選邏輯查詢計(jì)劃樹,從備選邏輯查詢計(jì)劃樹中確定出序號(hào)最小的邏輯查詢計(jì)劃樹,從該二元組集合中找到該最小序號(hào)所在的二元組,獲得該最小序號(hào)所在的二元組中的版本號(hào)。(3)根據(jù)該最小序號(hào)所在的二元組中的版本號(hào)查找該符號(hào)標(biāo)識(shí)表,找到該最小序號(hào)所在的二元組中的版本號(hào)對(duì)應(yīng)的數(shù)據(jù)記錄,判斷該最小序號(hào)所在的二元組中的版本號(hào)對(duì)應(yīng)的數(shù)據(jù)記錄的路徑字段是否為空,若為空,則將當(dāng)前創(chuàng)建操作符的操作數(shù)的存儲(chǔ)位置添加到該最小序號(hào)所在的二元組中的版本號(hào)對(duì)應(yīng)的數(shù)據(jù)記錄的路徑字段中,若不為空,則跳轉(zhuǎn)到下一個(gè)創(chuàng)建操作符執(zhí)行如上所述的方法。
在第二種方式中,在遍歷每棵邏輯查詢計(jì)劃樹時(shí),依次按照如下順序?yàn)槊靠眠壿嫴樵冇?jì)劃樹的操作數(shù)生成版本號(hào):銷毀操作符、引用操作符、文件定值操作符和創(chuàng)建操作符。第二種方式中,在第四次遍歷N棵邏輯查詢計(jì)劃樹時(shí),按照N棵邏輯查詢計(jì)劃樹的順序的逆序遍歷N棵邏輯查詢計(jì)劃樹。若要采用N棵邏輯查詢計(jì)劃樹的順序遍歷N棵邏輯查詢計(jì)劃樹,那么在為引用操作符生成版本號(hào)時(shí),如果在映射關(guān)系表中沒有找到滿足條件的版本號(hào),則為當(dāng)前引用操作符的操作數(shù)生成新的數(shù)據(jù)記錄。本實(shí)施例中,通過(guò)為每棵邏輯查詢計(jì)劃樹中的所有操作符的操作數(shù)生成版本號(hào),并將生成的版本號(hào)添加到邏輯查詢計(jì)劃樹中,以便于后續(xù)在查詢優(yōu)化過(guò)程中,根據(jù)操作數(shù)的版本號(hào)對(duì)N棵邏輯查詢計(jì)劃樹進(jìn)行優(yōu)化。
在實(shí)施例二的基礎(chǔ)上,數(shù)據(jù)查詢裝置在統(tǒng)計(jì)N棵邏輯查詢計(jì)劃樹中的每個(gè)掃描操作符的操作數(shù)被引用的次數(shù)時(shí),可以根據(jù)符號(hào)標(biāo)識(shí)表中的每條數(shù)據(jù)記錄的活躍字段和非活躍字段的取值,統(tǒng)計(jì)符號(hào)標(biāo)識(shí)表中所有操作數(shù)的起始活躍位置和終止活躍位置。具體的,首先判斷當(dāng)前數(shù)據(jù)記錄的活躍字段和非 活躍字段的取值是否為空,若當(dāng)前數(shù)據(jù)記錄的活躍字段和非活躍字段的取值為空,那么說(shuō)明當(dāng)前數(shù)據(jù)記錄對(duì)應(yīng)的操作數(shù)在整個(gè)批量查詢過(guò)程中,都不活躍,可以將當(dāng)前數(shù)據(jù)記錄從符號(hào)標(biāo)識(shí)表中刪除。若當(dāng)前數(shù)據(jù)記錄的活躍字段和非活躍字段的取值不為空,那么根據(jù)當(dāng)前數(shù)據(jù)記錄的活躍字段中的操作符的標(biāo)識(shí)和該操作符所屬的邏輯查詢計(jì)劃樹的序號(hào)確定當(dāng)前數(shù)據(jù)記錄對(duì)應(yīng)的操作數(shù)的起始活躍位置,根據(jù)當(dāng)前數(shù)據(jù)記錄的不活躍字段中的操作符的標(biāo)識(shí)和該操作符所屬的邏輯查詢計(jì)劃樹的序號(hào)確定當(dāng)前數(shù)據(jù)記錄對(duì)應(yīng)的操作數(shù)的終止活躍位置,當(dāng)前數(shù)據(jù)記錄的活躍字段中只有一個(gè)操作符,該操作符可能為掃描操作符或文件定值操作符,當(dāng)前數(shù)據(jù)記錄的不活躍字段中也只有一個(gè)操作符,該操作符可能為銷毀操作符或文件定值操作符。
圖3為本發(fā)明實(shí)施例三提供的數(shù)據(jù)查詢服務(wù)器的結(jié)構(gòu)示意圖,如圖3所示,本實(shí)施例提供的數(shù)據(jù)查詢服務(wù)器包括:接收模塊11、標(biāo)識(shí)確定模塊12、關(guān)系確定模塊13、優(yōu)化模塊14和查詢模塊15。
其中,接收模塊11,用于接收待執(zhí)行的N條查詢語(yǔ)句,其中,所述N為不小于2的正整數(shù);
標(biāo)識(shí)確定模塊12,用于根據(jù)所述N條查詢語(yǔ)句中的操作符和操作數(shù)確定所述N條查詢語(yǔ)句的操作數(shù)的符號(hào)標(biāo)識(shí),其中,所述操作符用于指示要執(zhí)行的操作,所述操作數(shù)用于指示所述N條查詢語(yǔ)句中的操作符待操作的數(shù)據(jù)的存儲(chǔ)位置,所述符號(hào)標(biāo)識(shí)包括操作數(shù)的版本號(hào),并且,指代相同數(shù)據(jù)的操作數(shù)具有相同的版本號(hào),指代不同數(shù)據(jù)的操作數(shù)具有不同的版本號(hào),所述操作符至少包括:創(chuàng)建操作符、銷毀操作符、掃描操作符和文件定值操作符;
關(guān)系確定模塊13,用于根據(jù)所述標(biāo)識(shí)確定模塊12確定的所述N條查詢語(yǔ)句的操作數(shù)的版本號(hào)確定所述N條查詢語(yǔ)句之間的依賴關(guān)系;
優(yōu)化模塊14,用于根據(jù)所述N條查詢語(yǔ)句之間的依賴關(guān)系以及預(yù)設(shè)的優(yōu)化規(guī)則對(duì)所述N條查詢語(yǔ)句進(jìn)行查詢間優(yōu)化;
查詢模塊15,用于執(zhí)行優(yōu)化后的查詢語(yǔ)句以得到所述N條查詢語(yǔ)句的查詢結(jié)果。
可選的,所述標(biāo)識(shí)確定模塊12具體用于:獲取所述N條查詢語(yǔ)句對(duì)應(yīng)的N棵邏輯查詢計(jì)劃樹,其中,一條查詢語(yǔ)句對(duì)應(yīng)一棵邏輯查詢計(jì)劃樹;為所述N棵邏輯查詢計(jì)劃樹中的第一類操作符的操作數(shù)添加符號(hào)標(biāo)識(shí),其中, 所述第一類操作符包括:創(chuàng)建操作符、銷毀操作符、掃描操作符和文件定值操作符;對(duì)于所述N棵邏輯查詢計(jì)劃樹中的每一棵查詢計(jì)劃樹分別執(zhí)行如下操作:根據(jù)第一邏輯查詢計(jì)劃樹的拓?fù)漤樞颉⑺龅谝贿壿嫴樵冇?jì)劃樹中的第一類操作符的操作數(shù)的符號(hào)標(biāo)識(shí)以及預(yù)設(shè)的添加規(guī)則為所述第一邏輯查詢計(jì)劃樹中的第二類操作符的操作數(shù)添加符號(hào)標(biāo)識(shí),其中,所述第一邏輯查詢計(jì)劃樹為所述N棵邏輯查詢計(jì)劃樹中的任意一棵邏輯查詢計(jì)劃樹,所述第二類操作符為除所述第一類操作符之外的其他操作符。
本實(shí)施例中,所述第一邏輯查詢計(jì)劃樹的根節(jié)點(diǎn)包括文件定值操作符,所述第一邏輯查詢計(jì)劃樹的葉子節(jié)點(diǎn)包括文件掃描操作符,所述第一邏輯查詢計(jì)劃樹的內(nèi)部節(jié)點(diǎn)包括第二類操作符、創(chuàng)建操作符和銷毀操作符,其中,所述內(nèi)部節(jié)點(diǎn)為除葉子節(jié)點(diǎn)和根節(jié)點(diǎn)之外的其他節(jié)點(diǎn);所述添加規(guī)則包括:對(duì)于所述第一邏輯查詢計(jì)劃樹中的每一個(gè)第二類操作符,執(zhí)行如下操作:
若第一操作符的操作數(shù)與所述第一操作符的左孩子節(jié)點(diǎn)的操作數(shù)相同,則為所述第一操作符的操作數(shù)添加與所述第一操作符的左孩子節(jié)點(diǎn)的操作數(shù)的符號(hào)標(biāo)識(shí)相同的符號(hào)標(biāo)識(shí),所述第一操作符為所述第二類操作符中的任意一個(gè)操作符;若所述第一操作符的操作數(shù)與所述第一操作符的右孩子節(jié)點(diǎn)的操作數(shù)相同,則為所述第一操作符的操作數(shù)添加與所述第一操作符的右孩子節(jié)點(diǎn)的操作數(shù)的符號(hào)標(biāo)識(shí)相同的符號(hào)標(biāo)識(shí)。
可選的,所述優(yōu)化規(guī)則包括下述規(guī)則中的至少一個(gè)規(guī)則:刪除與第一查詢語(yǔ)句具有相同操作數(shù)版本號(hào)和相同操作符的查詢語(yǔ)句,其中,所述第一查詢語(yǔ)句為所述N條查詢語(yǔ)句中的任意一條查詢語(yǔ)句;保持具有流依賴關(guān)系的查詢語(yǔ)句之間的查詢順序,并將具有流依賴關(guān)系的多個(gè)查詢語(yǔ)句優(yōu)化為一個(gè)新的查詢語(yǔ)句,其中,所述流依賴關(guān)系是指在前執(zhí)行的一條查詢語(yǔ)句的文件定值操作符的操作數(shù)的版本號(hào)與在后執(zhí)行的另一條查詢語(yǔ)句的的操作數(shù)的版本號(hào)相同;合并具有相同操作符且操作數(shù)有重疊的查詢語(yǔ)句。
可選的,所述N條查詢語(yǔ)句中的操作數(shù)的符號(hào)標(biāo)識(shí)還包括:熱數(shù)據(jù)標(biāo)識(shí),所述標(biāo)識(shí)確定模塊12還用于:統(tǒng)計(jì)所述N棵邏輯查詢計(jì)劃樹中的每個(gè)掃描操作符的操作數(shù)被引用的次數(shù);判斷所述N棵邏輯查詢計(jì)劃樹中的每個(gè)掃描操作符的操作數(shù)被引用的次數(shù)是否大于熱數(shù)據(jù)閾值;為所述N棵邏輯查詢計(jì)劃樹中掃描操作符的操作數(shù)被引用的次數(shù)大于所述熱數(shù)據(jù)閾值的操作數(shù)添加 熱數(shù)據(jù)標(biāo)識(shí),所述熱數(shù)據(jù)標(biāo)識(shí)用于表示具有熱數(shù)據(jù)標(biāo)識(shí)的操作數(shù)所指向的數(shù)據(jù)為熱數(shù)據(jù)。相應(yīng)的,所述查詢模塊15還用于:在執(zhí)行所述優(yōu)化后的查詢語(yǔ)句過(guò)程中,并發(fā)執(zhí)行包含所述熱數(shù)據(jù)標(biāo)識(shí)且不存在流依賴關(guān)系和輸出依賴關(guān)系的優(yōu)化后的查詢語(yǔ)句。
可選的,所述N條查詢語(yǔ)句中的操作數(shù)的符號(hào)標(biāo)識(shí)還包括:起始活躍位置和終止活躍位置,所述標(biāo)識(shí)確定模塊12還用于:針對(duì)第一操作數(shù),根據(jù)第一次引用所述第一操作數(shù)的掃描操作符的標(biāo)識(shí)和所述掃描操作符所在的邏輯查詢計(jì)劃樹的序號(hào)確定所述第一操作數(shù)的起始活躍位置,其中,所述第一操作數(shù)為所述N條查詢語(yǔ)句中的操作數(shù)中的任意一個(gè)操作數(shù);根據(jù)用于銷毀所述第一操作數(shù)的銷毀操作符的標(biāo)識(shí)和所述銷毀操作符所在的邏輯查詢計(jì)劃樹的序號(hào)確定所述第一操作數(shù)的終止活躍位置。相應(yīng)的,所述查詢模塊15還用于:在執(zhí)行所述優(yōu)化后的查詢語(yǔ)句過(guò)程中,根據(jù)所述第一操作數(shù)的終止活躍位置釋放所述第一操作數(shù)指示的數(shù)據(jù)的存儲(chǔ)空間。
可選的,所述標(biāo)識(shí)確定模塊12還用于:針對(duì)第二操作數(shù),根據(jù)第一次引用所述第二操作數(shù)的第一文件定值操作符的標(biāo)識(shí)和所述第一文件定值操作符所在的邏輯查詢計(jì)劃樹的序號(hào)確定所述第二操作數(shù)的起始活躍位置,其中,所述第一文件定值操作符用于向所述第二操作數(shù)指代的存儲(chǔ)位置寫數(shù)據(jù),所述第二操作數(shù)為所述N條查詢語(yǔ)句中的操作數(shù)中的任意一個(gè)操作數(shù);根據(jù)引用所述第二操作數(shù)的第二文件定值操作符的標(biāo)識(shí)和所述第二文件定值操作符所在的邏輯查詢計(jì)劃樹的序號(hào)確定所述第二操作數(shù)的終止活躍位置,其中,所述第二文件定值操作符用于改寫所述第一文件定值操作符操作的所述第二操作數(shù)指向的數(shù)據(jù)。所述查詢模塊15還用于:在執(zhí)行所述優(yōu)化后的查詢語(yǔ)句過(guò)程中,根據(jù)所述第二操作數(shù)的終止活躍位置釋放所述第二操作數(shù)指示的數(shù)據(jù)的存儲(chǔ)空間。
本實(shí)施例提供的數(shù)據(jù)查詢服務(wù)器,可用于執(zhí)行實(shí)施例一和實(shí)施例二的方法,具體實(shí)現(xiàn)方式和技術(shù)效果類似,這里不再贅述。
圖4為本發(fā)明實(shí)施例四提供的數(shù)據(jù)查詢服務(wù)器的結(jié)構(gòu)示意圖,如圖4所示,本實(shí)施例提供的數(shù)據(jù)查詢服務(wù)器200包括:處理器21、存儲(chǔ)器22、通信接口23和系統(tǒng)總線24,所述存儲(chǔ)器22和所述通信接口23通過(guò)所述系統(tǒng)總線24與所述處理器21連接并通信;所述存儲(chǔ)器22,用于存儲(chǔ)計(jì)算機(jī)執(zhí)行指 令;所述通信接口23用于和其他設(shè)備進(jìn)行通信,所述處理器21,用于運(yùn)行所述計(jì)算機(jī)執(zhí)行指令,執(zhí)行下述方法:
接收待執(zhí)行的N條查詢語(yǔ)句,其中,所述N為不小于2的正整數(shù);
根據(jù)所述N條查詢語(yǔ)句中的操作符和操作數(shù)確定所述N條查詢語(yǔ)句的操作數(shù)的符號(hào)標(biāo)識(shí),其中,所述操作符用于指示要執(zhí)行的操作,所述操作數(shù)用于指示所述N條查詢語(yǔ)句中的操作符待操作的數(shù)據(jù)的存儲(chǔ)位置,所述符號(hào)標(biāo)識(shí)包括操作數(shù)的版本號(hào),并且,指代相同數(shù)據(jù)的操作數(shù)具有相同的版本號(hào),指代不同數(shù)據(jù)的操作數(shù)具有不同的版本號(hào),所述操作符至少包括:創(chuàng)建操作符、銷毀操作符、掃描操作符和文件定值操作符;
根據(jù)確定的所述N條查詢語(yǔ)句的操作數(shù)的版本號(hào)確定所述N條查詢語(yǔ)句之間的依賴關(guān)系;
根據(jù)所述N條查詢語(yǔ)句之間的依賴關(guān)系以及預(yù)設(shè)的優(yōu)化規(guī)則對(duì)所述N條查詢語(yǔ)句進(jìn)行查詢間優(yōu)化;
執(zhí)行優(yōu)化后的查詢語(yǔ)句以得到所述N條查詢語(yǔ)句的查詢結(jié)果。
可選的,所述處理器21根據(jù)所述N條查詢語(yǔ)句中的操作符和操作數(shù)確定所述N條查詢語(yǔ)句的操作數(shù)的符號(hào)標(biāo)識(shí),具體為:
獲取所述N條查詢語(yǔ)句對(duì)應(yīng)的N棵邏輯查詢計(jì)劃樹,其中,一條查詢語(yǔ)句對(duì)應(yīng)一棵邏輯查詢計(jì)劃樹;
為所述N棵邏輯查詢計(jì)劃樹中的第一類操作符的操作數(shù)添加符號(hào)標(biāo)識(shí),其中,所述第一類操作符包括:創(chuàng)建操作符、銷毀操作符、掃描操作符和文件定值操作符;
對(duì)于所述N棵邏輯查詢計(jì)劃樹中的每一棵查詢計(jì)劃樹分別執(zhí)行如下操作:
根據(jù)第一邏輯查詢計(jì)劃樹的拓?fù)漤樞颉⑺龅谝贿壿嫴樵冇?jì)劃樹中的第一類操作符的操作數(shù)的符號(hào)標(biāo)識(shí)以及預(yù)設(shè)的添加規(guī)則為所述第一邏輯查詢計(jì)劃樹中的第二類操作符的操作數(shù)添加符號(hào)標(biāo)識(shí),其中,所述第一邏輯查詢計(jì)劃樹為所述N棵邏輯查詢計(jì)劃樹中的任意一棵邏輯查詢計(jì)劃樹,所述第二類操作符為除所述第一類操作符之外的其他操作符。
本實(shí)施例中,所述第一邏輯查詢計(jì)劃樹的根節(jié)點(diǎn)包括文件定值操作符,所述第一邏輯查詢計(jì)劃樹的葉子節(jié)點(diǎn)包括文件掃描操作符,所述第一邏輯查 詢計(jì)劃樹的內(nèi)部節(jié)點(diǎn)包括第二類操作符、創(chuàng)建操作符和銷毀操作符,其中,所述內(nèi)部節(jié)點(diǎn)為除葉子節(jié)點(diǎn)和根節(jié)點(diǎn)之外的其他節(jié)點(diǎn);所述添加規(guī)則包括:對(duì)于所述第一邏輯查詢計(jì)劃樹中的每一個(gè)第二類操作符,執(zhí)行如下操作:
若第一操作符的操作數(shù)與所述第一操作符的左孩子節(jié)點(diǎn)的操作數(shù)相同,則為所述第一操作符的操作數(shù)添加與所述第一操作符的左孩子節(jié)點(diǎn)的操作數(shù)的符號(hào)標(biāo)識(shí)相同的符號(hào)標(biāo)識(shí),所述第一操作符為所述第二類操作符中的任意一個(gè)操作符;若所述第一操作符的操作數(shù)與所述第一操作符的右孩子節(jié)點(diǎn)的操作數(shù)相同,則為所述第一操作符的操作數(shù)添加與所述第一操作符的右孩子節(jié)點(diǎn)的操作數(shù)的符號(hào)標(biāo)識(shí)相同的符號(hào)標(biāo)識(shí)。
可選的,所述優(yōu)化規(guī)則包括下述規(guī)則中的至少一個(gè)規(guī)則:刪除與第一查詢語(yǔ)句具有相同操作數(shù)版本號(hào)和相同操作符的查詢語(yǔ)句,其中,所述第一查詢語(yǔ)句為所述N條查詢語(yǔ)句中的任意一條查詢語(yǔ)句;保持具有流依賴關(guān)系的查詢語(yǔ)句之間的查詢順序,并將具有流依賴關(guān)系的多個(gè)查詢語(yǔ)句優(yōu)化為一個(gè)新的查詢語(yǔ)句,其中,所述流依賴關(guān)系是指在前執(zhí)行的一條查詢語(yǔ)句的文件定值操作符的操作數(shù)的版本號(hào)與在后執(zhí)行的另一條查詢語(yǔ)句的的操作數(shù)的版本號(hào)相同;合并具有相同操作符且操作數(shù)有重疊的查詢語(yǔ)句。
可選的,所述N條查詢語(yǔ)句中的操作數(shù)的符號(hào)標(biāo)識(shí)還包括:熱數(shù)據(jù)標(biāo)識(shí);所述處理器21還用于:統(tǒng)計(jì)所述N棵邏輯查詢計(jì)劃樹中的每個(gè)掃描操作符的操作數(shù)被引用的次數(shù);判斷所述N棵邏輯查詢計(jì)劃樹中的每個(gè)掃描操作符的操作數(shù)被引用的次數(shù)是否大于熱數(shù)據(jù)閾值;為所述N棵邏輯查詢計(jì)劃樹中掃描操作符的操作數(shù)被引用的次數(shù)大于所述熱數(shù)據(jù)閾值的操作數(shù)添加熱數(shù)據(jù)標(biāo)識(shí),所述熱數(shù)據(jù)標(biāo)識(shí)用于表示具有熱數(shù)據(jù)標(biāo)識(shí)的操作數(shù)所指向的數(shù)據(jù)為熱數(shù)據(jù)。后續(xù)在執(zhí)行所述優(yōu)化后的查詢語(yǔ)句過(guò)程中,并發(fā)執(zhí)行包含所述熱數(shù)據(jù)標(biāo)識(shí)且不存在流依賴關(guān)系和輸出依賴關(guān)系的優(yōu)化后的查詢語(yǔ)句。
可選的,所述N條查詢語(yǔ)句中的操作數(shù)的符號(hào)標(biāo)識(shí)還包括:起始活躍位置和終止活躍位置,所述處理器31還用于:針對(duì)第一操作數(shù),根據(jù)第一次引用所述第一操作數(shù)的掃描操作符的標(biāo)識(shí)和所述掃描操作符所在的邏輯查詢計(jì)劃樹的序號(hào)確定所述第一操作數(shù)的起始活躍位置,其中,所述第一操作數(shù)為所述N條查詢語(yǔ)句中的操作數(shù)中的任意一個(gè)操作數(shù);根據(jù)用于銷毀所述第一操作數(shù)的銷毀操作符的標(biāo)識(shí)和所述銷毀操作符所在的邏輯查詢計(jì)劃樹的序 號(hào)確定所述第一操作數(shù)的終止活躍位置。后續(xù)在執(zhí)行所述優(yōu)化后的查詢語(yǔ)句過(guò)程中,根據(jù)所述第一操作數(shù)的終止活躍位置釋放所述第一操作數(shù)指示的數(shù)據(jù)的存儲(chǔ)空間。
所述處理器31還用于:針對(duì)第二操作數(shù),根據(jù)第一次引用所述第二操作數(shù)的第一文件定值操作符的標(biāo)識(shí)和所述第一文件定值操作符所在的邏輯查詢計(jì)劃樹的序號(hào)確定所述第二操作數(shù)的起始活躍位置,其中,所述第一文件定值操作符用于向所述第二操作數(shù)指代的存儲(chǔ)位置寫數(shù)據(jù),所述第二操作數(shù)為所述N條查詢語(yǔ)句中的操作數(shù)中的任意一個(gè)操作數(shù);根據(jù)引用所述第二操作數(shù)的第二文件定值操作符的標(biāo)識(shí)和所述第二文件定值操作符所在的邏輯查詢計(jì)劃樹的序號(hào)確定所述第二操作數(shù)的終止活躍位置,其中,所述第二文件定值操作符用于改寫所述第一文件定值操作符操作的所述第二操作數(shù)指向的數(shù)據(jù)。后續(xù)在執(zhí)行所述優(yōu)化后的查詢語(yǔ)句過(guò)程中,根據(jù)所述第二操作數(shù)的終止活躍位置釋放所述第二操作數(shù)指示的數(shù)據(jù)的存儲(chǔ)空間。
本實(shí)施例提供的數(shù)據(jù)查詢服務(wù)器,可用于執(zhí)行實(shí)施例一和實(shí)施例二的方法,具體實(shí)現(xiàn)方式和技術(shù)效果類似,這里不再贅述。
本發(fā)明實(shí)施例還提供一種數(shù)據(jù)處理的計(jì)算機(jī)程序產(chǎn)品,包括存儲(chǔ)了程序代碼的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),所述程序代碼包括的指令用于執(zhí)行前述任意一個(gè)方法實(shí)施例所述的方法流程。本領(lǐng)域普通技術(shù)人員可以理解,前述的存儲(chǔ)介質(zhì)包括:U盤、移動(dòng)硬盤、磁碟、光盤、隨機(jī)存儲(chǔ)器(Random-Access Memory,RAM)、固態(tài)硬盤(Solid State Disk,SSD)或者非易失性存儲(chǔ)器(non-volatile memory)等各種可以存儲(chǔ)程序代碼的非短暫性的(non-transitory)機(jī)器可讀介質(zhì)。
需要說(shuō)明的是,本申請(qǐng)所提供的實(shí)施例僅僅是示意性的。所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為了描述的方便和簡(jiǎn)潔,在上述實(shí)施例中,對(duì)各個(gè)實(shí)施例的描述都各有側(cè)重,某個(gè)實(shí)施例中沒有詳述的部分,可以參見其他實(shí)施例的相關(guān)描述。在本發(fā)明實(shí)施例、權(quán)利要求以及附圖中揭示的特征可以獨(dú)立存在也可以組合存在。在本發(fā)明實(shí)施例中以硬件形式描述的特征可以通過(guò)軟件來(lái)執(zhí)行,反之亦然。在此不做限定。