專利名稱:一種面向?qū)ο蟠頂?shù)據(jù)庫的虛屬性查詢優(yōu)化方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)庫查詢處理領(lǐng)域,尤其是涉及一種面向?qū)ο蟠頂?shù)據(jù)庫的虛屬性查詢優(yōu)化方法。
背景技術(shù):
隨著信息技術(shù)的發(fā)展,數(shù)據(jù)庫技術(shù)也在不斷地進步。以關(guān)系型數(shù)據(jù)庫為代表的傳統(tǒng)數(shù)據(jù)庫因其完備的理論和有效的實現(xiàn)方法,取得了長足的發(fā)展和廣泛有效的應(yīng)用。新的領(lǐng)域如地理信息系統(tǒng) 、知識庫系統(tǒng)和多媒體信息系統(tǒng)等,對數(shù)據(jù)庫提出了新的需求,需要能夠高效處理復(fù)雜數(shù)據(jù)類型。數(shù)據(jù)庫技術(shù)與面向?qū)ο蠓椒ㄏ嘟Y(jié)合是數(shù)據(jù)庫技術(shù)研究和應(yīng)用的重要方向,隨之出現(xiàn)了面向?qū)ο竽P?,引入了對象和對象標識等重要概念。在面向?qū)ο髷?shù)據(jù)庫系統(tǒng)中,數(shù)據(jù)庫是對象集合,而對象由數(shù)據(jù)和方法組成。面向?qū)ο髷?shù)據(jù)庫系統(tǒng)較好地支持非傳統(tǒng)的數(shù)據(jù)類型,但是缺乏公共模型和形式化描述,在技術(shù)上成熟度不足,在現(xiàn)實中難以使用和推廣。作為面向?qū)ο竽P偷臄U充,對象代理模型來源于生活中代理人的概念。在對象代理模型中,對象信息的處理主要是構(gòu)造一個代理對象作為其視圖,代理對象可以繼承源對象的部分或全部屬性,稱為虛屬性,同時也可以擴展新的屬性,稱為實屬性。共享同樣屬性和方法的所有對象構(gòu)成一個對象類,所有代理對象構(gòu)成代理類。在實際存儲中,只存儲實屬性的值,虛屬性只存儲模式信息,不實際存儲其值,而是通過指針獲取對應(yīng)實屬性的值。依據(jù)對象代理模型實現(xiàn)的對象代理數(shù)據(jù)庫,因其特殊的存儲機制,采用切換表達式的方式,存儲虛屬性與實屬性的關(guān)聯(lián),通過對這種表達式求值來實時獲取虛屬性的值。在對象代理數(shù)據(jù)庫查詢執(zhí)行階段,虛屬性的獲取極大影響了查詢的效率,優(yōu)化虛屬性的查詢效率對于對象代理數(shù)據(jù)庫的推廣使用有著重大的意義。
發(fā)明內(nèi)容
本發(fā)明的上述技術(shù)問題主要是通過下述技術(shù)方案得以解決的:
一種面向?qū)ο蟠頂?shù)據(jù)庫的虛屬性查詢優(yōu)化方法,其特征在于,基于以下定義:在對象代理數(shù)據(jù)庫中,代理類類似于特殊的視圖,但又不等同關(guān)系型數(shù)據(jù)庫的視圖;代理類能夠繼承源類的屬性和方法,同時又可擴展相應(yīng)的屬性;在處理代理類上的查詢時,能夠借鑒關(guān)系型數(shù)據(jù)庫處理視圖的方法,即將代理類上的查詢表達式提升到源類上,這個過程稱之為表達式提升;在創(chuàng)建代理類時,需要將代理規(guī)則部分抽取出來,代理規(guī)則與創(chuàng)建視圖的形式相同,采用系統(tǒng)創(chuàng)建視圖的方式,將代理類以視圖的形式注冊到系統(tǒng)中;所述表達式提升包括以下步驟:
步驟I,建立代理類列表D印UtyLiSt,掃描查詢涉及到的范圍表列表,判斷當前類是否是代理類,如果當前類是代理類,而且在查詢中不涉及到該類的實屬性,則加入到D印UtyList中;若當前類不是代理類,則無需進行表達式提升,結(jié)束整個步驟;
步驟2,對于步驟I中生成的D印UtyList中的每個代理類,設(shè)其查詢需要的代價為costl,同時設(shè)代理類提升后對應(yīng)的源類上的查詢代價為cost2,若costl > cost2,則標記該代理類為能夠提升;若costl <= cost2,則提升表達式后的代價不小于未提升的代價,標記該代理類為不能提升;
步驟3,對于D印UtyList中標記為能夠提升的代理類,采用查詢重寫的方式,對該代理類出現(xiàn)的地方進行重寫,用源類和代理規(guī)則來重寫查詢,從而實現(xiàn)表達式提升;
步驟4,將查詢表達式提升至源類后,若該源類是代理類,轉(zhuǎn)至步驟2。若該源類不是代理類,則結(jié)束整個過程。在上述的一種面向?qū)ο蟠頂?shù)據(jù)庫的虛屬性查詢優(yōu)化方法,所述的步驟2中,在步驟2中,代價計算過程如下:
對象代理模型通過對象代理代數(shù)定義代理類;對象代理代數(shù)主要由SELECT、PROJECT、EXTEND、UNION、J0IN、GR0UP六種基本操作構(gòu)成,根據(jù)這六種基本操作的組合,在對象代理數(shù)據(jù)庫中定義了四種基本的代理類類型,分別為SELECT、UNION、JOIN、GROUP四種,由于在對象代理數(shù)據(jù)庫中,索引掃描有著特殊性,為了同傳統(tǒng)數(shù)據(jù)庫相結(jié)合,特介紹順序掃描下的代價;
步驟2.1,代理類在存儲時,采用了存儲實屬性值,虛屬性僅存儲源對象和代理對象雙向指針的策略。在掃描代理類時,不能直接獲取虛屬性的值。獲取虛屬性值的代價分為掃描代理類、查找源對象和代理對象雙向指針表(pg_bipointer)以及根據(jù)源對象對象標識獲取源對象三部分,其表達如公式一所示:
PCost = N(D) + MAPCost + PF(S)公式一
其中,定義N(D)為代理類D所占磁盤數(shù),MAPCost為掃描pg_bipointer表的代價,PF(S)為獲取源對象的代價。步驟2.2,在SEL ECT代理類中,將代理類上的查詢提升到源類后,掃描涉及到的代價主要為掃描源表的代價,其表達如公式二所示:
FCostl = N(S)公式二
其中,定義N(S)為源類S所占磁盤數(shù)。步驟2.3,在UNION代理類中,將代理類上的查詢提升到源類后,掃描時必須要實現(xiàn)兩個子查詢的UNION操作,因此提升后的代價主要為兩個子查詢和UNION操作的代價,其表達如公式三所示:
FCost2 = N(Sl) + N(S2) + P(Sl) + P(S2)公式三
其中,定義N(Sl)=源類SI所占磁盤數(shù),N(S2)為源類S2所占磁盤數(shù),P(Sl)為源類SI元組數(shù),P(S2)為源類S2元組數(shù)。步驟2.4,在JOIN代理類中,將代理類上的查詢提升到源類后,掃描時必須要實現(xiàn)類的JOIN操作,而JOIN操作在數(shù)據(jù)庫中是非常耗時的操作,當出現(xiàn)這種代理類時,一般不進行提升操作。其進行表達式提升后的代價公式如公式四所示:
FCost3 = N(Sl) + N(S2) + P(Sl) * P(S2)公式四
其中,定義N(Sl)=源類SI所占磁盤數(shù),N(S2)為源類S2所占磁盤數(shù),P(Sl)為源類SI元組數(shù),P(S2)為源類S2元組數(shù)。
步驟2.5,在GROUP代理類中,將代理類上的查詢提升到源類后,查詢時需要進行聚集操作,但無論是否進行提升,查詢時都需要進行聚集操作。因此在提升表達式后進行代價計算時,主要考慮對源類的掃描和源類按某屬性分組的代價,其代價公式如公式五所示:
FCost4 = N(S) + V(Sl)公式五
其中,定義N(S)為源類S所占磁盤數(shù),V(Sl)為源類S按某個屬性分組的代價。步驟2.6,將PCost與FCost進行比較,如果PCost比較大,則進行提升表達式操作。因此,本發(fā)明具有如下優(yōu)點:1.對于代理類的查詢有很大的提升作用,具體說明如下:針對不同代理類的特點和情況,·采用代價估計的方式,對表達式提升前后分別進行代價計算,選擇滿足條件的代理類進行提升,從而保證表達式提升對查詢的效率有提升作用;2.對于系統(tǒng)實現(xiàn)有很大的指導(dǎo)作用,具體說明如下:針對代理類的特點,定義代理規(guī)則時,采用傳統(tǒng)數(shù)據(jù)庫中視圖的處理方式,在提升過程中,對代理類進行查詢重寫,為代理類的查詢提供了一條更加高效的方式;3.時間復(fù)雜度低,對對象代理數(shù)據(jù)庫的查詢效率有著較大的提高,對于對象代理數(shù)據(jù)庫的推廣有著極大的意義。
圖1為代理類定義形式。圖2為SELECT代理類的代理規(guī)則形式。圖3是本發(fā)明的方法流程示意圖。
具體實施例方式下面通過實施例,并結(jié)合附圖,對本發(fā)明的技術(shù)方案作進一步具體的說明。實施例:
本發(fā)明提供的是基于提升表達式的方式來提高虛屬性的查詢效率,具體是采用包括以下步驟的方法:
在對象代理數(shù)據(jù)庫中,代理類類似于特殊的視圖,但又不等同關(guān)系型數(shù)據(jù)庫的視圖。代理類可以繼承類的屬性和方法,同時又可擴展相應(yīng)的屬性。在處理代理類上的查詢時,可以借鑒關(guān)系型數(shù)據(jù)庫處理視圖的方法,即將代理類上的查詢表達式提升到源類上,這個過程稱之為表達式提升。在創(chuàng)建代理類時,代理類定義形式如圖1所示,需要將代理規(guī)則部分抽取出來,以SELECT代理類為例,如圖2所示,代理規(guī)則與創(chuàng)建視圖的形式相同,采用系統(tǒng)創(chuàng)建視圖的方式,將代理類以視圖的形式注冊到系統(tǒng)中。提升表達式的步驟包括以下子步驟:
步驟I,建立代理類列表D印u t y L i s t,掃描查詢涉及到的范圍表列表,判斷當前類是否是代理類,如果當前類是代理類,而且在查詢中不涉及到該類的實屬性,則加入到DeputyList中。若當前類不是代理類,則無需進行表達式提升。步驟2,對于D印UtyLiSt中的每個代理類,查詢需要的代價costl,將代理類直接轉(zhuǎn)化對源類上查詢,查詢需要的代價cost2,若costl > Cost2,則標記該代理類為可提升。若costl <= cost2,則提升表達式后的代價不小于未提升的代價,標記該代理類為不能提升。步驟3,對于D印UtyList中標記為可提升的代理類,采用查詢重寫的方式,對該代理類出現(xiàn)的地方進行重寫,用源類和代理規(guī)則來重寫查詢,從而實現(xiàn)表達式提升。步驟4,將查詢表達式提升至源類后,若該源類是代理類,轉(zhuǎn)至步驟2。若該源類不是代理類,則結(jié)束整個過程。對步驟2中代價估計部分以一個具體的實例進行詳細說明:
SELECT代理類是只允許從一個類中選擇源對象進行代理。源對象和代理對象是一一對應(yīng)的。以一具體實例對提升算法進行說明。CREATE CLASS basicA ( a int , b int, c int) ; a 上有索引
CREATE SELECTDEPUTYCLASS deputyB(d int) as (select a+2 as newa, b frombasicA where a >3 and b >4);
查詢語句:SELECT newa, b FROM deputyB WHERE newa〈10;
在查詢編譯階段,目標表中包含代理類cbputyB?,F(xiàn)在進行代價估算,判斷是否需要進行表達式提升。直接對CbputyB進行掃描的代價:掃描路徑分為順序掃描和帶索引掃描,代價分別為costl, cost2,選擇代價較小的掃描路徑cost3= min (costl, cost2)。由于選擇條件中包含虛屬性,因此會進行切換表達式計算,代價包含對系統(tǒng)表的查詢和取實屬性的I/O操作,記為cost4。其中,表達式運算符的CPU代價較小可以忽略不計。當目標屬性列包含虛屬性時,同選擇條件中包含虛屬性的處理過程類似,代價為cost5??偞鷥rsumcostl=cost3+cost4+cost5.轉(zhuǎn)化為basicA進行掃描的代價:a上有索引,可能會選擇帶索引的掃描,也可能選擇順序掃描的路徑,代價分別為cost6和cost7,掃描代價為cost8=min (cost6, cost7)。在條件判斷和投影運算時,由于元組的值均為實屬性,是實際存在的,只涉及到CPU代價。總代價 sumcost2 = cost8。對步驟3中查詢重寫部分以一個具體的實例進行詳細說明:
當sumcostl〈 sumcost2,將表達式提升到源類上,借鑒PostgreSQL數(shù)據(jù)庫對視圖查詢重寫的過程,轉(zhuǎn)化為:
被分析器解釋之后的原始查詢樹,邏輯上的表示方式:
SELECT deputyB.newa, deputyB.b FROM deputyB WHERE deputyB.newa<10;
表達式提升后的查詢樹,邏輯上的表示方式:
SELECT deputyB.newa, deputyB.b FROM (SELECT a+2 as newa, b FROM basicAwhere a>3 and b>4) deputyB WHERE deputyB.newa < 10;
對deputyB上的查詢轉(zhuǎn)化為對basicA的查詢。其余三種代理類情況和SELECT代理類情況類似,可以參考SELECT的處理方式。本文中所描述的具體實施例僅僅是對本發(fā)明精神作舉例說明。本發(fā)明所屬技術(shù)領(lǐng)域的技術(shù)人員可以對所描述的具體實施例做各種各樣的修改或補充或采用類似的方式替代,但并不會偏離本發(fā)明的精神或者超越所附權(quán)利要求書所定義的范圍。
權(quán)利要求
1.一種面向?qū)ο蟠頂?shù)據(jù)庫的虛屬性查詢優(yōu)化方法,其特征在于,基于以下定義:在對象代理數(shù)據(jù)庫中,代理類類似于特殊的視圖,但又不等同關(guān)系型數(shù)據(jù)庫的視圖;代理類能夠繼承源類的屬性和方法,同時又可擴展相應(yīng)的屬性;在處理代理類上的查詢時,能夠借鑒關(guān)系型數(shù)據(jù)庫處理視圖的方法,即將代理類上的查詢表達式提升到源類上,這個過程稱之為表達式提升;在創(chuàng)建代理類時,需要將代理規(guī)則部分抽取出來,代理規(guī)則與創(chuàng)建視圖的形式相同,采用系統(tǒng)創(chuàng)建視圖的方式,將代理類以視圖的形式注冊到系統(tǒng)中;所述表達式提升包括以下步驟: 步驟I,建立代理類列表D印u t y L i S t,掃描查詢涉及到的范圍表列表,判斷當前類是否是代理類,如果當前類是代理類,而且在查詢中不涉及到該類的實屬性,則加入到D印UtyList中;若當前類不是代理類,則無需進行表達式提升,結(jié)束整個步驟; 步驟2,對于步驟I中生成的D印UtyList中的每個代理類,設(shè)其查詢需要的代價為costl,同時設(shè)代理類提升后對應(yīng)的源類上的查詢代價為cost2,若costl > cost2,則標記該代理類為能夠提升;若costl <= cost2,則提升表達式后的代價不小于未提升的代價,標記該代理類為不能提升; 步驟3,對于D印UtyList中標記為能夠提升的代理類,采用查詢重寫的方式,對該代理類出現(xiàn)的地方進行重寫,用源類和代理規(guī)則來重寫查詢,從而實現(xiàn)表達式提升; 步驟 4,將查詢表達式提升至源類后,若該源類是代理類,轉(zhuǎn)至步驟2,若該源類不是代理類,則結(jié)束整個過程。
2.根據(jù)權(quán)利要求1所述的,其特征在于,所述的步驟2中,在步驟2中,代價計算過程如下: 對象代理模型通過對象代理代數(shù)定義代理類;對象代理代數(shù)主要由SELECT、PROJECT、EXTEND、UNION、J0IN、GR0UP六種基本操作構(gòu)成,根據(jù)這六種基本操作的組合,在對象代理數(shù)據(jù)庫中定義了四種基本的代理類類型,分別為SELECT、UNION、JOIN、GROUP四種,由于在對象代理數(shù)據(jù)庫中,索引掃描有著特殊性,為了同傳統(tǒng)數(shù)據(jù)庫相結(jié)合,特介紹順序掃描下的代價; 步驟2.1,代理類在存儲時,采用了存儲實屬性值,虛屬性僅存儲源對象和代理對象雙向指針的策略,在掃描代理類時,不能直接獲取虛屬性的值,獲取虛屬性值的代價分為掃描代理類、查找源對象和代理對象雙向指針表(pg_bipointer)以及根據(jù)源對象對象標識獲取源對象三部分,其表達如公式一所示: PCost = N(D) + MAPCost + PF(S)公式一 其中,定義N(D)為代理類D所占磁盤數(shù),MAPCost為掃描pg_bipointer表的代價,PF(S)為獲取源對象的代價; 步驟2.2,在SELECT代理類中,將代理類上的查詢提升到源類后,掃描涉及到的代價主要為掃描源表的代價,其表達如公式二所示: FCostl = N(S)公式二 其中,定義N(S)為源類S所占磁盤數(shù); 步驟2.3,在UNION代理類中,將代理類上的查詢提升到源類后,掃描時必須要實現(xiàn)兩個子查詢的UNION操作,因此提升后的代價主要為兩個子查詢和UNION操作的代價,其表達如公式三所示:FCost2 = N(Sl) + N(S2) + P(Sl) + P(S2)公式三 其中,定義N(Sl)=源類SI所占磁盤數(shù),N(S2)為源類S2所占磁盤數(shù),P(Sl)為源類SI元組數(shù),P(S2)為源類S2元組數(shù); 步驟2.4,在JOIN代理類中,將代理類上的查詢提升到源類后,掃描時必須要實現(xiàn)類的JOIN操作,而JOIN操作在數(shù)據(jù)庫中是非常耗時的操作,當出現(xiàn)這種代理類時,一般不進行提升操作,其進行表達式提升后的代價公式如公式四所示: FCost3 = N(Sl) + N(S2) + P(Sl) * P(S2)公式四 其中,定義N(Sl)=源類SI所占磁盤數(shù),N(S2)為源類S2所占磁盤數(shù),P(Sl)為源類SI元組數(shù),P(S2)為源類S2元組數(shù); 步驟2.5,在GROUP代理類中,將代理類上的查詢提升到源類后,查詢時需要進行聚集操作,但無論是否進行提升,查詢時都需要進行聚集操作,因此在提升表達式后進行代價計算時,主要考慮對源類的掃描和源類按某屬性分組的代價,其代價公式如公式五所示:FCost4 = N(S) + V(Sl)公式五 其中,定義N(S)為源類S所占磁盤數(shù),V(Sl)為源類S按某個屬性分組的代價; 步驟2.6,將PCost與FCost進行比較,如果PCost比較大,則進行提升表達式操作。
全文摘要
本發(fā)明公開了一種面向?qū)ο蟠頂?shù)據(jù)庫的虛屬性查詢優(yōu)化方法,在方法中提出了基于表達式提升的優(yōu)化方案。在基于表達式提升的優(yōu)化方案中,根據(jù)代理類獨特的特性,對不同代理類對應(yīng)的源類上查詢進行了代價估計,提出了代價估計函數(shù)。通過代價估計函數(shù)可以很好地對源類和代理類掃描的代價進行衡量,從而判斷是否能夠進行表達式提升。當滿足條件后,采用類似于視圖的處理方式,將對代理類的查詢提升為對源類的查詢,從而減少切換表達式的計算次數(shù),達到優(yōu)化的目的。通過對虛屬性的查詢進行優(yōu)化,可以極大地提高對象代理數(shù)據(jù)庫的實用性。
文檔編號G06F17/30GK103218439SQ20131013978
公開日2013年7月24日 申請日期2013年4月22日 優(yōu)先權(quán)日2013年4月22日
發(fā)明者彭智勇, 王梁, 付祖發(fā), 彭煜瑋 申請人:武漢大學