一種基于索引的xml文檔查詢優(yōu)化方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及面向XML文檔數(shù)據(jù)的查詢優(yōu)化方法,尤其涉及一種基于索引的XML文檔查詢優(yōu)化方法。
【背景技術(shù)】
[0002]XML是一種應(yīng)用廣泛的數(shù)據(jù)表示與傳輸標(biāo)準(zhǔn),隨著越來(lái)越多的基于XML的文檔出現(xiàn),對(duì)XML文檔數(shù)據(jù)進(jìn)行管理成為一種迫切的需求。近年來(lái),原生XML數(shù)據(jù)庫(kù)技術(shù)得到快速發(fā)展,針對(duì)XML數(shù)據(jù)模型特點(diǎn)研發(fā)了新型的存儲(chǔ)、索引、查詢等技術(shù)。
[0003]XPath是一種標(biāo)準(zhǔn)的XML查詢語(yǔ)言,是XQuery的子集,是操作XML文檔的核心,經(jīng)常用于從XML文檔中定位數(shù)據(jù)片段,測(cè)試XML文檔是否滿足需求等。XPath的實(shí)現(xiàn)技術(shù)得到了廣泛關(guān)注,典型的實(shí)現(xiàn)技術(shù)包括基于自動(dòng)機(jī)的方法、基于Twig的整體匹配方法等。然而,在數(shù)據(jù)庫(kù)的背景下,當(dāng)數(shù)據(jù)量變得越來(lái)越大時(shí),現(xiàn)有技術(shù)方法對(duì)于高效的XPath查詢應(yīng)答具有一定的局限性,一方面由于數(shù)據(jù)本身的復(fù)雜性,XML數(shù)據(jù)是一種層次嵌套的結(jié)構(gòu),并不是平面化的數(shù)據(jù)模型,另外XPath還需要考慮文檔序;另一方面是因?yàn)椴樵兯惴ǖ膹?fù)雜性,通常需要構(gòu)建復(fù)雜的數(shù)據(jù)結(jié)構(gòu),進(jìn)行代價(jià)高昂的迭代和排序操作。
[0004]索引是一種特殊的數(shù)據(jù)結(jié)構(gòu),對(duì)管理的數(shù)據(jù)進(jìn)行特殊編排,以實(shí)現(xiàn)快速訪問(wèn)所需要數(shù)據(jù)的目標(biāo)。專利申請(qǐng)?zhí)枮椤癈N103177120A”的專利描述了一種基于索引的XPath查詢模式樹(shù)匹配方法,將XPath查詢轉(zhuǎn)換為模式樹(shù)匹配問(wèn)題,再通過(guò)訪問(wèn)所涉及的模式樹(shù)節(jié)點(diǎn)的索引數(shù)據(jù),利用整體匹配的Twig算法,完成XPath的求值,該方法在一定程度上解決了XPath查詢海量數(shù)據(jù)的問(wèn)題,但當(dāng)數(shù)據(jù)規(guī)模持續(xù)增長(zhǎng),算法本身的開(kāi)銷越來(lái)越大,使得該方法的可用性下降。
【發(fā)明內(nèi)容】
[0005]為解決上述技術(shù)問(wèn)題,本發(fā)明的目的是提供一種基于索引的XML文檔查詢優(yōu)化方法,該方法針對(duì)應(yīng)用XPath對(duì)文檔進(jìn)行匹配過(guò)濾的場(chǎng)景(典型的應(yīng)用包括信息檢索、SQL/XML中的XMLExists等),提取了一個(gè)XPath子集,通過(guò)改進(jìn)的索引結(jié)構(gòu),可以通過(guò)簡(jiǎn)單的集合運(yùn)算實(shí)現(xiàn)對(duì)XPsth篩選的應(yīng)答,既提升了查詢性能,又提高了索引的空間性能。
[0006]本發(fā)明的目的通過(guò)以下的技術(shù)方案來(lái)實(shí)現(xiàn):
[0007]一種基于索引的XML文檔查詢優(yōu)化方法,該方法包括:
[0008]構(gòu)建XPath查詢所需路徑的索引;
[0009]將XPath表示為樹(shù)形的查詢形式;
[0010]對(duì)樹(shù)形表示的查詢中的任意節(jié)點(diǎn),根據(jù)索引獲取相應(yīng)文檔標(biāo)識(shí)集合,通過(guò)集合運(yùn)算對(duì)文檔是否匹配XPath進(jìn)行篩選。
[0011]與現(xiàn)有技術(shù)相比,本發(fā)明的一個(gè)或多個(gè)實(shí)施例可以具有如下優(yōu)點(diǎn):
[0012]本發(fā)明通過(guò)利用簡(jiǎn)單的集合運(yùn)算,借助索引的優(yōu)勢(shì),避免了不必要的數(shù)據(jù)訪問(wèn)和操作,以及復(fù)雜的數(shù)據(jù)結(jié)構(gòu)的構(gòu)造與銷毀,從而使基于XPath匹配的篩選在實(shí)際性能上得到大大提升,增強(qiáng)了其可用性。
【附圖說(shuō)明】
[0013]圖1是基于索引的XML文檔查詢優(yōu)化方法流程圖。
【具體實(shí)施方式】
[0014]為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合實(shí)施例及附圖對(duì)本發(fā)明作進(jìn)一步詳細(xì)的描述。
[0015]如圖1所示,為基于索引的XML文檔查詢優(yōu)化方法,該方法包括以下步驟:
[0016]步驟10構(gòu)建XPath查詢所需路徑的索引;
[0017]對(duì)于任意符合上文語(yǔ)法要求的XPath查詢,將XPath表示為樹(shù)結(jié)構(gòu),其中謂詞和邏輯連接符會(huì)引入分支。針對(duì)這樣的一種樹(shù)形表示的查詢,對(duì)于從根到任意葉節(jié)點(diǎn)的路徑,都需要在與之對(duì)應(yīng)的路徑上創(chuàng)建索引,其中索引的鍵為對(duì)應(yīng)的數(shù)據(jù)內(nèi)容,索引的值為對(duì)應(yīng)的文檔標(biāo)識(shí)。
[0018]步驟20將XPath表示為樹(shù)形的查詢形式;
[0019]對(duì)XPath進(jìn)行解析,經(jīng)詞法、語(yǔ)法分析,構(gòu)成語(yǔ)法樹(shù),即樹(shù)形表示的XPath查詢。
[0020]步驟30對(duì)樹(shù)形表示的查詢中的任意節(jié)點(diǎn),根據(jù)索引獲取相應(yīng)文檔標(biāo)識(shí)集合,通過(guò)集合運(yùn)算,對(duì)文檔是否匹配XPath進(jìn)行篩選。
[0021]對(duì)樹(shù)形表示的查詢的中間節(jié)點(diǎn),“or”操作按集合交運(yùn)算處理,其他按集合并處理。對(duì)樹(shù)形表示的查詢進(jìn)行自底向上的求值,當(dāng)計(jì)算完根節(jié)點(diǎn)后,便得到了最終匹配的文檔標(biāo)識(shí)集合,即對(duì)應(yīng)滿足XPath的文檔集合。
[0022]上述實(shí)施例適用的XPath語(yǔ)句是XPath的一個(gè)真子集,涵蓋了常用的XPath表達(dá)式及功能,具體語(yǔ)法形式如下:
[0023]<0Path>:: = <RootFork> ? <NonForkPath>
[0024]<RootFork>:: = /<RootElemNameXPosPred> ? <LPred>*
[0025]〈RootElemName〉:: = nameTest|*
[0026]<PosPred>:: = [num] | [<PosFunXCmp>num]
[0027]<PosFun>:: = posit1n ()
[0028]<LPred>:: = <Pred><LogicComXLPred> | not ?LPred?
[0029]<NonForkPath>:: = //<relPath>|/<relPath>
[0030]<relPath>:: = <simplePath>|<simplePath><PosPred>|<simplePath><Pred>
[0031]〈simplePath〉:: = 〈step〉|<simplePath>/〈step>|<simplePath>//〈step>
[0032]〈step〉:: = nametTestI?nameTestI * 1.
[0033]<Pred>:: = [<simplePath>]|[<PathPred>]
[0034]<PathPred>:: = <simplePath><Cmp>value
[0035]<Cmp>:: = < I < = I = I > = I > I !=
[0036]<LogicCom>:: = and | or
[0037]num整數(shù)值
[0038]value 類型值
[0039]nameTest QName 類型名稱
[0040]直觀上,本發(fā)明所支持的XPath真子集對(duì)應(yīng)于一種只在根的位置進(jìn)行分叉的查詢,其思想是確保不同簡(jiǎn)單路徑相交處在文檔中是唯一的,從而可以通過(guò)整個(gè)文檔標(biāo)識(shí)的交集替換復(fù)雜的結(jié)構(gòu)連接。原則上,只要能確保查詢的中間節(jié)點(diǎn)在文檔中的唯一性,便可放寬語(yǔ)法限制,采用本方法進(jìn)行處理。因此,在模式可知的情況下,本實(shí)施例有進(jìn)一步改進(jìn)的空間。
[0041]雖然本發(fā)明所揭露的實(shí)施方式如上,但所述的內(nèi)容只是為了便于理解本發(fā)明而采用的實(shí)施方式,并非用以限定本發(fā)明。任何本發(fā)明所屬技術(shù)領(lǐng)域內(nèi)的技術(shù)人員,在不脫離本發(fā)明所揭露的精神和范圍的前提下,可以在實(shí)施的形式上及細(xì)節(jié)上作任何的修改與變化,但本發(fā)明的專利保護(hù)范圍,仍須以所附的權(quán)利要求書(shū)所界定的范圍為準(zhǔn)。
【主權(quán)項(xiàng)】
1.一種基于索引的XML文檔查詢優(yōu)化方法,其特征在于,所述方法包括: 構(gòu)建XPath查詢所需路徑的索引; 將XPath表示為樹(shù)形的查詢形式; 對(duì)樹(shù)形表示的查詢中的任意節(jié)點(diǎn),根據(jù)索引獲取相應(yīng)文檔標(biāo)識(shí)集合,通過(guò)集合運(yùn)算對(duì)文檔是否匹配XPath進(jìn)行篩選。
2.如權(quán)利要求1所述的基于索引的XML文檔查詢優(yōu)化方法,其特征在于,所述步驟A具體包括:根據(jù)XML數(shù)據(jù)模式和擬支持的XPath查詢,創(chuàng)建路徑索引。
3.如權(quán)利要求1所述的基于索引的XML文檔查詢優(yōu)化方法,其特征在于,所述步驟B具體包括:對(duì)XPath進(jìn)行解析,經(jīng)詞法、語(yǔ)法分析,構(gòu)成語(yǔ)法樹(shù)。
4.如權(quán)利要求1所述的基于索引的XML文檔查詢優(yōu)化方法,其特征在于,所述步驟C具體包括:通過(guò)索引獲取語(yǔ)法樹(shù)上葉節(jié)點(diǎn)對(duì)應(yīng)的文檔標(biāo)識(shí)集合,自底向上,通過(guò)集合運(yùn)算進(jìn)行求值,最終得到滿足XPath的文檔標(biāo)識(shí)集合。
5.如權(quán)利要求1所述的基于索引的XML文檔查詢優(yōu)化方法,其特征在于,對(duì)路徑索引的鍵為對(duì)應(yīng)的數(shù)據(jù)內(nèi)容,索引的值為對(duì)應(yīng)的文檔標(biāo)識(shí)。
6.如權(quán)利要求1所述的基于索引的XML文檔查詢優(yōu)化方法,其特征在于,對(duì)樹(shù)形表示的查詢的中間節(jié)點(diǎn),“or”操作按集合交運(yùn)算處理,其他中間節(jié)點(diǎn)按集合交運(yùn)算。
【專利摘要】本發(fā)明公開(kāi)了一種基于索引的XML文檔查詢優(yōu)化方法,所述方法包括:構(gòu)建XPath查詢所需路徑的索引;將XPath表示為樹(shù)形的查詢形式;對(duì)樹(shù)形表示的查詢中的任意節(jié)點(diǎn),根據(jù)索引獲取相應(yīng)文檔標(biāo)識(shí)集合,通過(guò)集合運(yùn)算對(duì)文檔是否匹配XPath進(jìn)行篩選本發(fā)明通過(guò)利用簡(jiǎn)單的集合運(yùn)算,借助索引的優(yōu)勢(shì),避免了不必要的數(shù)據(jù)訪問(wèn)和操作,以及復(fù)雜的數(shù)據(jù)結(jié)構(gòu)的構(gòu)造與銷毀,從而使基于XPath匹配的篩選在實(shí)際性能上得到大大提升,增強(qiáng)了其可用性。
【IPC分類】G06F17-30
【公開(kāi)號(hào)】CN104615720
【申請(qǐng)?zhí)枴緾N201510061947
【發(fā)明人】陳琳, 張學(xué)偉, 陳海濤, 黃新波, 湯汨寶, 房亞為
【申請(qǐng)人】同方知網(wǎng)(北京)技術(shù)有限公司, 《中國(guó)學(xué)術(shù)期刊(光盤版)》電子雜志社有限公司
【公開(kāi)日】2015年5月13日
【申請(qǐng)日】2015年2月5日