專利名稱:一種基于查詢工作量估算的xml分片方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種針對海量XML的分布式存儲(chǔ)與并行查詢的高效XML分片方法,尤其涉及一種在未知用戶查詢的前提下根據(jù)XML自身結(jié)構(gòu)進(jìn)行查詢工作量估算從而達(dá)到更好的查詢負(fù)載均衡的分片方法。
背景技術(shù):
extensible Markup Language (XML)作為可擴(kuò)展標(biāo)記語言,具有擴(kuò)展性、自描述性、自相容性等優(yōu)點(diǎn),已成為hternet上數(shù)據(jù)表示、存儲(chǔ)和交換的標(biāo)準(zhǔn)。于是海量XML數(shù)據(jù)的生成使XML的有效存儲(chǔ)管理成為新的問題。并行XML處理是一種有效解決方案,而數(shù)據(jù)分片是影響并行系統(tǒng)整體性能的最關(guān)鍵因素。查詢負(fù)載均衡是影響并行查詢效率的重要因素,在之前的XML分片方法研究中, 如XGP、WIN方法已經(jīng)考慮到了負(fù)載均衡,但是需要根據(jù)用戶查詢來進(jìn)行分片,在最常用的應(yīng)用場景下,在XML存儲(chǔ)時(shí)用戶查詢是未知的。再者,一些XML分片方法是將XML映射為關(guān)系數(shù)據(jù)表,然后對關(guān)系數(shù)據(jù)表進(jìn)行分片。然而將XML映射為關(guān)系數(shù)據(jù)表是低效的,而且破壞了 XML本來的結(jié)構(gòu)特征。最后,擴(kuò)展性也是XML分片方法需要考慮的。NSNRR、PSPIB、WIN 等方法均將XML劃分為N個(gè)片段然后分發(fā)到N個(gè)節(jié)點(diǎn)上。如果集群擴(kuò)展,那么重新組織分布在N個(gè)結(jié)點(diǎn)上的數(shù)據(jù)就會(huì)開銷很大。所以,針對XML分布式存儲(chǔ)和并行處理的應(yīng)用場景以及特性,提出一種新的高效的XML分片方法有重要意義。
發(fā)明內(nèi)容
本發(fā)明的技術(shù)解決問題克服現(xiàn)有方法的不足,提出一種基于查詢工作量估算的 XML分片方法,用XML自身結(jié)構(gòu)進(jìn)行查詢工作量的估算,無需使用用戶查詢。且以查詢工作量估算值作為XML文檔的存儲(chǔ)度量,將XML劃分為查詢工作量約為WO的片段,均勻分布在各個(gè)節(jié)點(diǎn)上,以支持集群擴(kuò)展性,并在并行查詢時(shí)達(dá)到更好的負(fù)載均衡。本發(fā)明的技術(shù)解決方案一種基于查詢工作量估算的XML分片方法,其特征在于步驟如下(1)將XML樹中每個(gè)結(jié)點(diǎn)編碼。編碼規(guī)則參考區(qū)間編碼^iang編碼,由于所有結(jié)點(diǎn)均處于同一文檔,故省略文檔編號doc_id屬性,添加查詢工作估算值workload屬性,用于存放以該結(jié)點(diǎn)作為根節(jié)點(diǎn)的子樹的查詢工作量估算值。(2)為每個(gè)結(jié)點(diǎn)生成相關(guān)的XPath查詢步。查詢步中以該結(jié)點(diǎn)為祖先或父親結(jié)點(diǎn), 生成相應(yīng)的包含查詢步。(3)查詢工作量估算。對一個(gè)XML文檔樹從根結(jié)點(diǎn)開始,采用深度優(yōu)先遍歷的順序,遞歸的對所有的結(jié)點(diǎn)進(jìn)行查詢工作量估算。(4)基于查詢工作量估算結(jié)果進(jìn)行XML分片。XML文檔樹被劃分為查詢工作量估算值約為WO的各個(gè)子樹。
(5)XML分配。將分片后的XML片段以查詢工作量估算值升序排序,以一種“回形” 的方式分發(fā)到各個(gè)處理節(jié)點(diǎn)上。根據(jù)本發(fā)明的又一個(gè)方面,其中步驟C3)進(jìn)一步包括步驟(3. a)從XPath查詢步隊(duì)列中提取出與該結(jié)點(diǎn)相關(guān)的XPath查詢步列表;(3. b)對XPath查詢步列表中的每個(gè)查詢步進(jìn)行連接結(jié)果大小估算,將估算值添力口至IJ變量workload中;(3. c)如果該結(jié)點(diǎn)為葉子節(jié)點(diǎn),則返回workload ;(3. d)如果不是葉子節(jié)點(diǎn),則遍歷該結(jié)點(diǎn)的孩子結(jié)點(diǎn),遞歸調(diào)用該方法,以孩子結(jié)點(diǎn)作為參數(shù),將其返回值添加到workload,重新轉(zhuǎn)向(a)。根據(jù)本發(fā)明的又一個(gè)方面,其中步驟(4)進(jìn)一步包括(4. a)設(shè)變量PN表示可能的分割結(jié)點(diǎn)列表,finalPN表示最終的分割結(jié)點(diǎn)列表,初始將root加入PN, finalPN中為空;(4. b)如果PN不為空,從PN中取出一個(gè)結(jié)點(diǎn)node ;如果PN為空,轉(zhuǎn)向步驟(f);(4. c)如果node的workload不在WO附近且大于W0,則將其孩子結(jié)點(diǎn)全部加入 PN ;(4. d)如果 node 的 workload 在 WO 附近,則將 node 加入 finalPN ;(4. e)如果node的workload不在WO附近且小于W0,則將node加入tempList中, 轉(zhuǎn)向步驟(b);(4. f)如果tempList不為空,對tempList中的具有相同父親的結(jié)點(diǎn)進(jìn)行合并。將具有相同父親的結(jié)點(diǎn)歸為一組,和它的兄弟節(jié)點(diǎn)進(jìn)行合并,如果某幾個(gè)兄弟節(jié)點(diǎn)的 workload之和在WO附近,則將其父親結(jié)點(diǎn)添加一個(gè)特殊標(biāo)志,加入finalPN;如果同一組中所有節(jié)點(diǎn)workload之和都達(dá)不到WO或者剩余的結(jié)點(diǎn)達(dá)不到W0,就將這些節(jié)點(diǎn)合并在一起, 上溯一層,將其父親結(jié)點(diǎn)加入tempList,重新轉(zhuǎn)向步驟(e);如果tempList為空,轉(zhuǎn)向步驟 (g);(4. g)根據(jù)finalPN將XML樹劃分為子樹,每個(gè)子樹形成一個(gè)XML片段。本發(fā)明與現(xiàn)有方法相比的優(yōu)點(diǎn)在于本發(fā)明考慮XML分布式存儲(chǔ)與并行查詢的最常用的應(yīng)用場景,即XML存儲(chǔ)時(shí)用戶查詢未知的場景,為達(dá)到并行查詢負(fù)載均衡,僅使用 XML自身結(jié)構(gòu)進(jìn)行查詢工作量估算,并將其作為XML存儲(chǔ)的度量,將XML劃分為查詢工作量估算值接近存儲(chǔ)單元WO的片段,達(dá)到了更好的查詢時(shí)負(fù)載均衡,并且支持集群擴(kuò)展。實(shí)驗(yàn)表明,在查詢未知的應(yīng)用場景下,本發(fā)明能夠達(dá)到較好的并行查詢時(shí)負(fù)載均衡,較大的提升了并行系統(tǒng)的加速比和縮放比指標(biāo)。
圖1為本發(fā)明的方法基本流程圖;圖2為本發(fā)明與對比方法WIN的加速比指標(biāo)對比圖,其中,圖2(a)為10MXML文檔分布在2-6臺(tái)處理機(jī)的查詢加速比對比圖;圖2(b)為20M XML文檔的查詢加速比對比圖; 圖2(c)為30M XML文檔的查詢加速比對比圖;圖2(d)為40M XML文檔的查詢加速比對比圖;圖2(e)為50M XML文檔的查詢加速比對比圖;圖3為本發(fā)明與對比方法WIN的縮放比指標(biāo)對比圖。
具體實(shí)施例方式下面參考附圖,對本發(fā)明的實(shí)施例進(jìn)行詳細(xì)的說明。首先對本發(fā)明的方法原理進(jìn)行說明。研究表明,在考慮查詢負(fù)載均衡的XML分片方法中,查詢工作量估算值將會(huì)很大程度上影響XML的分片結(jié)果,進(jìn)而影響整個(gè)并行系統(tǒng)的性能。只使用XML結(jié)構(gòu)進(jìn)行查詢工作量估算,需要探索XML結(jié)構(gòu)與XML查詢之間的關(guān)系。在XML查詢中用于選擇定位結(jié)點(diǎn)最常用的是XPath語言。對于復(fù)雜的XPath表達(dá)式,如"a/b//c [iattr =,,XX” ],,),,,一般的 XML查詢引擎將其分裂為多個(gè)子查詢步,如”a/b”、”b//c”、”c Mattr] ”和”fettr =”XX,,,,。 然后計(jì)算每個(gè)子查詢步的結(jié)果,最后將這些結(jié)果合并作為原始XPath表達(dá)式的查詢結(jié)果。 基于此,將XML文檔樹中所有的子查詢步的查詢結(jié)果合并起來作為XML文檔的查詢工作量估算值。并且,由于XML文檔結(jié)構(gòu)的靈活性,查詢的開銷不能與XML文檔的長度建立一種直接的線性關(guān)系,所以采用XML查詢工作量估算值作為XML存儲(chǔ)的度量,且設(shè)定一個(gè)存儲(chǔ)單元 W0,使劃分的子樹的查詢工作量估算值都約為W0,以支持系統(tǒng)擴(kuò)展性。具體而言,本發(fā)明所提出的方法基本流程如圖1所示。本發(fā)明主要包括的核心思想根據(jù)XML自身結(jié)構(gòu)進(jìn)行查詢工作量估算,以XML查詢工作量估算值作為XML的存儲(chǔ)度量,并設(shè)定存儲(chǔ)單元W0,將XML劃分為查詢工作量估算值約為WO的片段,均勻分布在各個(gè)節(jié)點(diǎn)中,以支持集群擴(kuò)展性和達(dá)到更好的并行查詢時(shí)負(fù)載均在描述方法前先定義如下變量及方法1.設(shè)XML存儲(chǔ)單元為W0,為基本查詢工作量估算值;2.設(shè)XML文檔樹編碼后,等價(jià)轉(zhuǎn)換的節(jié)點(diǎn)列表為nodelist ;3.設(shè)XPathQueue用于存放生成的XPath查詢步,XPathList為某節(jié)點(diǎn)相關(guān)的 XPath查詢步列表;4.設(shè)XML查詢工作量估算的方法為workloadEstimation,其返回值為查詢工作量估算值;5.設(shè)XML分片的方法為XMLPartition,其中合并小枝的方法merge,進(jìn)行XML文檔劃分的方法為partition ;6.設(shè)變量PN表示可能的分割結(jié)點(diǎn)列表,finalPN表示最終的分割結(jié)點(diǎn)列表。本發(fā)明的方法描述如下(1)將XML樹中每個(gè)結(jié)點(diǎn)編碼。編碼規(guī)則參考區(qū)間編碼^iang編碼,由于所有結(jié)點(diǎn)均處于同一文檔,故省略文檔編號doc_id屬性,添加查詢工作量估算值workload屬性, 用于存放以該結(jié)點(diǎn)作為根節(jié)點(diǎn)的子樹的查詢工作量估算值,即每個(gè)元素結(jié)點(diǎn)編碼為四元組 〈begin,end, level, workload〉,其中,begin表示遍歷該結(jié)點(diǎn)的所有后裔結(jié)點(diǎn)之前,訪問該節(jié)點(diǎn)產(chǎn)生的序號,end表示在遍歷完該結(jié)點(diǎn)所有后裔結(jié)點(diǎn)之后,訪問該節(jié)點(diǎn)產(chǎn)生的序號, level表示該結(jié)點(diǎn)在樹中所處的層次,workload即以該結(jié)點(diǎn)作為根節(jié)點(diǎn)的子樹的查詢工作 fii古胃it ;^^Mftli^llei^^ <begin, end, parent—node, workload), Jt^, begin、 end 和workload表示的意義與前述相同,parent_node表示該屬性節(jié)點(diǎn)的父節(jié)點(diǎn);文本節(jié)點(diǎn)編碼為〈begin,parentjode〉,文本結(jié)點(diǎn)沒有后裔,故只遍歷該結(jié)點(diǎn)一次,產(chǎn)生序號begin,parent_node表示文本結(jié)點(diǎn)的父節(jié)點(diǎn)。在這種編碼方式下,XML樹被等價(jià)轉(zhuǎn)換為以begin屬性升序排序的結(jié)點(diǎn)列表nodeList。(2)為nodeList中每個(gè)結(jié)點(diǎn)生成相關(guān)的XPath查詢步。查詢步中以該結(jié)點(diǎn)為祖先或父親結(jié)點(diǎn),生成相應(yīng)的包含查詢步,并將其加入到XPathQueue中。(3)查詢工作量估算。對一個(gè)XML文檔樹從根結(jié)點(diǎn)開始,采用深度優(yōu)先遍歷的順序,遞歸的對所有的結(jié)點(diǎn)進(jìn)行查詢工作量估算。查詢工作量估算方法workloadEstimation 以結(jié)點(diǎn)node作為輸入?yún)?shù),輸出以該結(jié)點(diǎn)為根的子樹的查詢工作量估算值。運(yùn)行方法的步驟如下(a)初始化變量 workload 為 0 ;(b)從XPathQueue隊(duì)列中提取出與該結(jié)點(diǎn)相關(guān)的XPath查詢步列表XPathList, 對XPathList中的每個(gè)查詢步進(jìn)行連接結(jié)果大小估算,將估算值添加到變量workload中。(c)如果node為葉子節(jié)點(diǎn),則返回workload ;(d)如果不是葉子節(jié)點(diǎn),則取出nodelist中的下一個(gè)結(jié)點(diǎn)nextNode ;(e)如果nextNode是node的孩子結(jié)點(diǎn),遞歸調(diào)用該方法,以nextNode作為參數(shù), 將其返回值添加到workload,重新轉(zhuǎn)到步驟(a)。(4)基于查詢工作量估算結(jié)果進(jìn)行XML分片。XML文檔樹被劃分為查詢工作量估算值接近WO的各個(gè)子樹。首先找到用于分割的分割結(jié)點(diǎn)列表finalPN,然后根據(jù)f inalPN進(jìn)行XML分片。以包含查詢工作量估算值的nodelist作為輸入,輸出分片之后的XML片段。(a)初始將根節(jié)點(diǎn)root加入PN,finalPN中為空。(b)如果PN不為空,從PN中取出一個(gè)結(jié)點(diǎn)node ;如果PN為空,則轉(zhuǎn)向步驟(f)。(c)如果node的workload不在WO附近且大于W0,則將其孩子結(jié)點(diǎn)全部加入PN ;(d)如果 node 的 workload 在 WO 附近,則將 node 加入 finalPN ;(e)如果node的workload不在WO附近且小于W0,則將node力口入tempList中, 轉(zhuǎn)到步驟(b);(f)如果tempList不為空,使用merge方法對tempList中的具有相同父親的結(jié)點(diǎn)進(jìn)行合并。將具有相同父親的結(jié)點(diǎn)歸為一組,和它的兄弟節(jié)點(diǎn)進(jìn)行合并,如果某幾個(gè)兄弟節(jié)點(diǎn)的workload之和在WO附近,則將其父親結(jié)點(diǎn)添加一個(gè)特殊標(biāo)志,加入finalPN ;如果同一組中所有節(jié)點(diǎn)workload之和都達(dá)不到WO或者剩余的結(jié)點(diǎn)達(dá)不到W0,就將這些節(jié)點(diǎn)合并在一起,上溯一層,將其父親結(jié)點(diǎn)加入tempList,重新轉(zhuǎn)向步驟(f);如果tempList為空,轉(zhuǎn)向步驟(g);(g) partition方法根據(jù)finalPN將XML樹劃分為子樹,每個(gè)子樹形成一個(gè)XML片段。(5)XML分配。將分片后的XML片段以查詢工作量估算值升序排序,以一種“回形” 的方式分發(fā)到各個(gè)處理節(jié)點(diǎn)上。以下通過本發(fā)明與WIN方法的對比,進(jìn)一步說明在查詢未知的應(yīng)用場景下,本發(fā)明可以較大提升并行系統(tǒng)的加速比和縮放比指標(biāo)(參見附圖2),主要因?yàn)槠淇梢赃_(dá)到更好的并行查詢時(shí)負(fù)載均衡。對于本領(lǐng)域的普通技術(shù)人員來說可顯而易見的得出其他優(yōu)點(diǎn)和修改。因此,具有更廣方面的本發(fā)明并不局限于這里所示出的并且所描述的具體說明及示例性實(shí)施例。因此,在不脫離由隨后權(quán)利要求及其等價(jià)體所定義的一般發(fā)明構(gòu)思的精神和范圍的情況下, 可對其作出各種修改。
權(quán)利要求
1.一種基于查詢工作量估算的XML分片方法,其特征在于步驟如下(1)將XML樹中每個(gè)結(jié)點(diǎn)編碼;編碼規(guī)則參考區(qū)間編碼^iang編碼,由于所有結(jié)點(diǎn)均處于同一文檔,故省略文檔編號doc_id屬性,添加查詢工作量估算值workload屬性,用于存放以該結(jié)點(diǎn)作為根節(jié)點(diǎn)的子樹的查詢工作量估算值;(2)為每個(gè)結(jié)點(diǎn)生成相關(guān)的XPath查詢步,查詢步中以該結(jié)點(diǎn)為祖先或父親結(jié)點(diǎn),生成相應(yīng)的包含連接查詢步;(3)查詢工作量估算,對一個(gè)XML文檔樹從根結(jié)點(diǎn)開始,采用深度優(yōu)先遍歷的順序,遞歸的對所有的結(jié)點(diǎn)進(jìn)行查詢工作量估算;(4)基于查詢工作量估算結(jié)果進(jìn)行XML分片,XML文檔樹被劃分為查詢工作量估算值約為WO的各個(gè)子樹;(5)XML分配,將分片后的XML片段以查詢工作量估算值升序排序,以一種“回形”的方式分發(fā)到各個(gè)處理節(jié)點(diǎn)上。
2.根據(jù)權(quán)利要求1所述的基于查詢工作量估算的XML分片方法,其特征在于所述的步驟( 進(jìn)一步包括(3. a)從XPath查詢步隊(duì)列中提取出與該結(jié)點(diǎn)相關(guān)的XPath查詢步列表;(3. b)對XI^ath查詢步列表中的每個(gè)查詢步進(jìn)行連接結(jié)果大小估算,將估算值添加到變量workload中;(3. c)如果該結(jié)點(diǎn)為葉子節(jié)點(diǎn),則返回workload ;(3. d)如果不是葉子節(jié)點(diǎn),則遍歷該結(jié)點(diǎn)的孩子結(jié)點(diǎn),遞歸調(diào)用該方法,以孩子結(jié)點(diǎn)作為參數(shù),將其返回值添加到workload,重新轉(zhuǎn)向(3. a)。
3.根據(jù)權(quán)利要求1所述的基于查詢工作量估算的XML分片方法,其特征在于所述的步驟(4)進(jìn)一步包括(4. a)設(shè)變量PN表示可能的分割結(jié)點(diǎn)列表,finalPN表示最終的分割結(jié)點(diǎn)列表,初始將根節(jié)點(diǎn)root加入PN, finalPN中為空;(4. b)如果PN不為空,從PN中取出一個(gè)結(jié)點(diǎn)node ;如果PN為空,則轉(zhuǎn)向步驟(4. f);(4. c)如果node的屬性workload不在WO附近且大于W0,則將其孩子結(jié)點(diǎn)全部加入PN ;(4. d)如果 node 的 workload 在 WO 附近,則將 node 加入 finalPN ;(4. e)如果node的workload不在WO附近且小于W0,則將node加入臨時(shí)列表tempList 中,轉(zhuǎn)到步驟(4. b);(4. f)如果tempList不為空,對tempList中的具有相同父親的結(jié)點(diǎn)進(jìn)行合并,將具有相同父親的結(jié)點(diǎn)歸為一組,和它的兄弟節(jié)點(diǎn)進(jìn)行合并,如果某幾個(gè)兄弟節(jié)點(diǎn)的workload 之和在WO附近,則將其父親結(jié)點(diǎn)添加一個(gè)特殊標(biāo)志,加入finalPN ;如果同一組中所有節(jié)點(diǎn)workload之和都達(dá)不到WO或者剩余的結(jié)點(diǎn)達(dá)不到W0,就將這些節(jié)點(diǎn)合并在一起,上溯一層,將其父親結(jié)點(diǎn)加入tempList,重新轉(zhuǎn)向步驟(4. e);如果tempList為空,轉(zhuǎn)向步驟 (4. g);(4. g)根據(jù)fina IPN將XML樹劃分為子樹,每個(gè)子樹形成一個(gè)XML片段。
全文摘要
一種基于查詢工作量估算的XML分片方法(1)采用區(qū)間編碼Zhang編碼規(guī)則對XML樹中每個(gè)結(jié)點(diǎn)進(jìn)行編碼;(2)為每個(gè)結(jié)點(diǎn)生成相關(guān)的XPath查詢步,加入XPath隊(duì)列中;(3)對XML文檔樹從根結(jié)點(diǎn)開始,采用深度優(yōu)先遍歷的順序,遞歸的對每個(gè)結(jié)點(diǎn)進(jìn)行查詢工作量估算;(4)根據(jù)查詢工作量估算結(jié)果將XML文檔樹劃分為查詢工作量約為W0的子樹;(5)將分片后的XML片段以查詢工作量估算值進(jìn)行排序,以“回形”的方式分配給各個(gè)處理節(jié)點(diǎn)。本發(fā)明僅用XML文檔結(jié)構(gòu)進(jìn)行查詢工作量估算,不需知道用戶查詢,并以查詢工作量估算值作為XML存儲(chǔ)度量,達(dá)到了更好的查詢負(fù)載均衡和擴(kuò)展性支持。
文檔編號H04L29/08GK102325161SQ20111020008
公開日2012年1月18日 申請日期2011年7月18日 優(yōu)先權(quán)日2011年7月18日
發(fā)明者張靜, 李未, 段亞偉, 牛虹婷, 郎波 申請人:北京航空航天大學(xué)