摘 要: 針對(duì)XML數(shù)據(jù)的特點(diǎn),提出一種對(duì)象-關(guān)系模型及由XML Schema映射該模型的規(guī)則算法,同時(shí)根據(jù)網(wǎng)絡(luò)數(shù)據(jù)特點(diǎn),引入分片技術(shù)。
關(guān)鍵詞: XML技術(shù) XML Schema語(yǔ)言 對(duì)象-關(guān)系模型 分片
Internet數(shù)據(jù)本身具有的自描述性和動(dòng)態(tài)可變性等一系列復(fù)雜特性,使其結(jié)構(gòu)呈現(xiàn)半結(jié)構(gòu)化特點(diǎn),給網(wǎng)上數(shù)據(jù)的管理和查詢帶來(lái)困難。解決此問(wèn)題的關(guān)鍵是尋找一個(gè)半結(jié)構(gòu)化的數(shù)據(jù)模型。事實(shí)上,日益普及的XML數(shù)據(jù)是一種自描述的半結(jié)構(gòu)化數(shù)據(jù)。從某種意義上說(shuō),XML就是一種半結(jié)構(gòu)化的數(shù)據(jù)模型。它的出現(xiàn)推動(dòng)了網(wǎng)絡(luò)在電子商務(wù)、電子數(shù)據(jù)交換和電子圖書(shū)館等多方面的應(yīng)用。但對(duì)于如何有效地存儲(chǔ)管理和查詢這類(lèi)數(shù)據(jù),目前還沒(méi)有統(tǒng)一的方法。
針對(duì)XML數(shù)據(jù)的特點(diǎn),本文提出了一種對(duì)象-關(guān)系模型。其主要思想是將XML數(shù)據(jù)中具有明顯結(jié)構(gòu)特征的數(shù)據(jù)建立關(guān)系數(shù)據(jù)模型,將具有繼承、不確定特征的數(shù)據(jù)建立面向?qū)ο?/a>數(shù)據(jù)模型。這樣,既能保證元素的直觀性和完整性,又能充分利用關(guān)系數(shù)據(jù)模型的優(yōu)勢(shì)提高對(duì)部分?jǐn)?shù)據(jù)的查詢效率。同時(shí)根據(jù)網(wǎng)絡(luò)數(shù)據(jù)分布存儲(chǔ)的特點(diǎn),引入分片技術(shù),以進(jìn)一步提高查詢效率。特別是在面向?qū)ο髷?shù)據(jù)模型中則采用類(lèi)垂直分片技術(shù),并對(duì)類(lèi)垂直分片的概念以及類(lèi)垂直分片的原則進(jìn)行了具體詳盡的描述。
1 對(duì)象-關(guān)系模型的建立
1.1 XML Schema
XML Schema是W3C較新推出的標(biāo)準(zhǔn)。它是用來(lái)對(duì)XML進(jìn)行文檔類(lèi)型定義的語(yǔ)言,同時(shí)可用來(lái)規(guī)定XML文檔的數(shù)據(jù)類(lèi)型及組織方式。相對(duì)于DTD而言,XML Schema具有豐富的數(shù)據(jù)類(lèi)型,而且還可通過(guò)對(duì)數(shù)據(jù)類(lèi)型進(jìn)行擴(kuò)展和限制定義新的數(shù)據(jù)類(lèi)型。XML Schema本身也采用XML格式編寫(xiě),從而方便了數(shù)據(jù)的建立和處理。XML Schema克服了DTD的許多局限,有望取代DTD成為定義XML數(shù)據(jù)類(lèi)型的主要手段。文檔1是一個(gè)XML Schema實(shí)例。
為保證數(shù)據(jù)由XML Schema向?qū)ο?關(guān)系模型映射的完整性和有效性,需要了解XML Schema包含的信息。XML Schema主要提供下列幾方面的信息。
?。?)元素的內(nèi)容信息。包括元素的名稱和類(lèi)型。元素主要包括以下幾類(lèi):不包含子元素和屬性的簡(jiǎn)單元素;通過(guò)元素引用方法聲明的元素;包含子元素和屬性的復(fù)雜元素;類(lèi)型為ANY的元素等。
(2)元素的數(shù)據(jù)類(lèi)型信息。包括XML Schema內(nèi)建的數(shù)據(jù)類(lèi)型;由限制及合并而派生的簡(jiǎn)單數(shù)據(jù)類(lèi)型;由已有數(shù)據(jù)類(lèi)型聚集(aggregation)、擴(kuò)展(extension)派生的復(fù)雜數(shù)據(jù)類(lèi)型。
?。?)元素的屬性信息。包括直接定義類(lèi)型的屬性;通過(guò)引用聲明的屬性;聲明為ANY內(nèi)容的屬性等。
(4)元素的關(guān)系信息。包括嵌套關(guān)系、引用關(guān)系、順序關(guān)系和繼承關(guān)系等。
?。?)在映射中要考慮的其他信息。包括元素值、屬性值限制(由fixed和default屬性指定);元素出現(xiàn)次數(shù)的限制(由minOccurs和maxOccurs屬性控制);元素屬性出現(xiàn)限制(由use屬性指定,其值可以是required、optional、prohibited)以及元素組、屬性組等。
針對(duì)XML Schema的上述特點(diǎn),本文提出了由XML Schema映射對(duì)象-關(guān)系模型的規(guī)則算法。
1.2 映射規(guī)則
規(guī)則1:創(chuàng)建關(guān)系RR映射元素之間的關(guān)系。結(jié)構(gòu)如下所示:
按規(guī)則1,為文檔1創(chuàng)建了圖1中的表element_relation。
需說(shuō)明的是:關(guān)系RR的project_table域與復(fù)雜元素的element_type一一對(duì)應(yīng)。因此可通過(guò)這種對(duì)應(yīng)關(guān)系,在已知element_type的情況下找到映射其結(jié)構(gòu)的關(guān)系。
規(guī)則2:為每個(gè)由聚集(aggregation)得到的不同類(lèi)型的復(fù)雜元素EA創(chuàng)建一個(gè)關(guān)系RE,關(guān)系名存在關(guān)系RR的project_table域中。
規(guī)則3:對(duì)每個(gè)關(guān)系RE,創(chuàng)建主鍵INSTANCE_ID域,標(biāo)識(shí)惟一元素實(shí)例e;創(chuàng)建BIB_ID域,指向e相鄰的下一個(gè)元素實(shí)例en,以映射元素實(shí)例之間的順序關(guān)系。
規(guī)則4:將元素EA的出現(xiàn)次數(shù)不大于一次的簡(jiǎn)單子元素(maxOccurs=1)映射為關(guān)系RE的一個(gè)域,類(lèi)型為簡(jiǎn)單元素的類(lèi)型。將通過(guò)元素引用方法聲明的簡(jiǎn)單子元素映射為關(guān)系RE的與被引用元素類(lèi)型相同的域。將類(lèi)型為STRING、BOOLEAN、DECIMAL、FLOAT、DATE等在關(guān)系數(shù)據(jù)庫(kù)存在的類(lèi)型或可轉(zhuǎn)化的類(lèi)型(ID、IDREF、ANYURI、TOKEN等)的屬性直接映射為關(guān)系RE的相應(yīng)類(lèi)型的域。將引用聲明的屬性映射為關(guān)系RE的與被引用屬性類(lèi)型相同的域。
規(guī)則5:將元素EA的出現(xiàn)次數(shù)不確定或大于一的簡(jiǎn)單子元素(包括引用聲明的簡(jiǎn)單子元素)、類(lèi)型為IDREFS、ENTITY、ENTITYS的屬性映射為類(lèi)CE的同一類(lèi)型的變量;聲明INSTANCE_ID和ELEMENT_TYPE變量,元素EA的出現(xiàn)次數(shù)不確定或大于一次的復(fù)雜子元素(包括引用聲明的復(fù)雜子元素)的類(lèi)型映射為類(lèi)CE的變量,INSTANCE_ID映射為類(lèi)CE的數(shù)組變量,變量名取元素名。
規(guī)則6:在關(guān)系RE中創(chuàng)建OBJECT_ID域,以存儲(chǔ)類(lèi)CE的指針。
按照規(guī)則2~6,對(duì)文檔1中的memories元素創(chuàng)建表memories和類(lèi)memory;為memory元素創(chuàng)建memory表。
規(guī)則7:由擴(kuò)展(extension)得到的復(fù)雜元素Eh(設(shè)父元素為EA),按規(guī)則2、3、4映射關(guān)系模型,按規(guī)則5將類(lèi)CE沒(méi)有的屬性映射為類(lèi)CEh,并將CEh作為CE的一個(gè)子類(lèi),再按規(guī)則6創(chuàng)建OBJECT_ID域。
規(guī)則8:通過(guò)元素引用方法聲明的復(fù)雜元素與被引用元素具有相同結(jié)構(gòu),且與被引用元素共用一個(gè)數(shù)據(jù)模型。
規(guī)則9:為每個(gè)元素(屬性)組創(chuàng)建一個(gè)類(lèi)。簡(jiǎn)單類(lèi)型的元素(屬性)映射為相應(yīng)類(lèi)型的變量,變量名取元素(屬性)名;聲明相應(yīng)類(lèi)型的變量,映射復(fù)雜類(lèi)型元素的類(lèi)型和元素實(shí)例的INSTANCE_ID;在包含該元素(屬性)組的關(guān)系中創(chuàng)建GROUP域,存儲(chǔ)相應(yīng)元素(屬性)組類(lèi)的指針。
按照規(guī)則9,可對(duì)文檔1中的memoryGroup元素組創(chuàng)建類(lèi)memoryGroup,并在memoryType表中創(chuàng)建“g_point"域(見(jiàn)圖1)。
規(guī)則10:創(chuàng)建名稱為ANY的類(lèi),以存儲(chǔ)ANY類(lèi)型的元素和屬性。在包含ANY類(lèi)型元素(屬性)的關(guān)系中創(chuàng)建ANY域,存儲(chǔ)ANY類(lèi)的指針。ANY類(lèi)包括以下變量:
class any {
element_type string /*復(fù)雜元素的類(lèi)型*/
instance_id integer /*該對(duì)象實(shí)例在相應(yīng)
關(guān)系中的instance_id*/
element_name string /*元素名*/
instance_value string /*簡(jiǎn)單類(lèi)型的元素(屬性)值,均轉(zhuǎn)換為字符串類(lèi)型*/
}
按規(guī)則10,為文檔1中的ANY元素創(chuàng)建類(lèi)“any”(見(jiàn)圖1)。
規(guī)則11:對(duì)于XML Schema定義各種約束及派生的簡(jiǎn)單數(shù)據(jù)類(lèi)型,可通過(guò)關(guān)系數(shù)據(jù)模型的域約束來(lái)實(shí)現(xiàn)。
圖1是按以上規(guī)則,為文檔1創(chuàng)建的對(duì)象-關(guān)系模型。
2 分片和類(lèi)垂直分片技術(shù)
分片技術(shù)分為水平分片、垂直分片和混合分片,其在關(guān)系數(shù)據(jù)庫(kù)中運(yùn)用的理論和實(shí)踐已比較成熟,形成了相對(duì)一致的看法。類(lèi)垂直分片技術(shù)則是近幾年提出的新思想,有關(guān)這方面的研究不多。文獻(xiàn)[2]對(duì)類(lèi)垂直分片在提高查詢效率方面的作用進(jìn)行了評(píng)估和論證,提出了影響類(lèi)垂直分片的制約因素,證明了類(lèi)垂直分片的有效性。
2.1 類(lèi)垂直分片的基本思想
類(lèi)垂直分片是依據(jù)類(lèi)實(shí)例變量的相關(guān)程度和經(jīng)常一起訪問(wèn)的頻率對(duì)類(lèi)實(shí)例變量分組、構(gòu)造類(lèi)片段并分片存儲(chǔ),通過(guò)減少對(duì)無(wú)關(guān)實(shí)例變量的訪問(wèn)來(lái)降低磁盤(pán)I/O,提高查詢效率。類(lèi)垂直分片技術(shù)尤其適用于數(shù)據(jù)量大,且無(wú)需訪問(wèn)整個(gè)類(lèi)實(shí)例的情況。
2.2 類(lèi)垂直分片的定義
2.3 類(lèi)垂直分片的基本原則和方法
由于面向?qū)ο髷?shù)據(jù)模型中的子類(lèi)繼承、類(lèi)組裝繼承(class composition hierarchy)等復(fù)雜關(guān)系,使得對(duì)類(lèi)進(jìn)行垂直分片變得復(fù)雜。下面給出類(lèi)垂直分片的基本原則和方法。
(1)將相關(guān)的及可能經(jīng)常一起訪問(wèn)的實(shí)例變量歸入同一類(lèi)片段。
(2)類(lèi)與類(lèi)之間存在高輸出(fan-out)的情況,對(duì)沿類(lèi)組裝繼承路徑上的所有類(lèi)進(jìn)行垂直分片。
(3)要根據(jù)源類(lèi)的大小選擇垂直分片策略。對(duì)于較小的源類(lèi)不易做過(guò)多的分片,因?yàn)檫^(guò)多分片不僅不會(huì)提高反而會(huì)降低查詢效率。但較大的源類(lèi)對(duì)分片多少不是非常敏感。
(4)選擇垂直分片策略前,首先要分析投影率(projection ratio)。如投影率高則不易進(jìn)行分片。
(5)類(lèi)垂直分片的方法是:將類(lèi)C的每一個(gè)類(lèi)片段描述為一個(gè)類(lèi),而邏輯類(lèi)C則描述為一個(gè)復(fù)合類(lèi),由所有類(lèi)片段的指針構(gòu)成。例如,將圖1中的class memoryGroup垂直分片如下:
class memoryGroup:類(lèi)片段1(mediaid,status),類(lèi)片段2(sub_date,donor,subject),類(lèi)片段3(location)。分片后的類(lèi)結(jié)構(gòu)如圖2所示。
3 討 論
采用關(guān)系數(shù)據(jù)模型存儲(chǔ)XML數(shù)據(jù),可利用關(guān)系數(shù)據(jù)庫(kù)現(xiàn)有的存儲(chǔ)管理、并發(fā)控制、恢復(fù)、版本機(jī)制等技術(shù)有效地管理XML數(shù)據(jù)。但由于關(guān)系模型不支持復(fù)雜類(lèi)型的屬性,一個(gè)簡(jiǎn)單的查詢路徑有時(shí)要通過(guò)多重鏈接實(shí)現(xiàn),從而影響了查詢的效率。半結(jié)構(gòu)化數(shù)據(jù)的不確定性也是這種模型難以解決的問(wèn)題。面向?qū)ο髷?shù)據(jù)模型雖接近半結(jié)構(gòu)化數(shù)據(jù)模型,并能更好地處理嵌套的集合和順序,但在數(shù)據(jù)加載時(shí)對(duì)未知的數(shù)據(jù)類(lèi)型需要建立新的類(lèi)對(duì)應(yīng),這樣就影響了加載效率。當(dāng)元素類(lèi)型改變時(shí),數(shù)據(jù)模式的變動(dòng)代價(jià)也很高。而且對(duì)XML數(shù)據(jù)中明顯具有結(jié)構(gòu)化特性的數(shù)據(jù)采用面向?qū)ο竽P痛鎯?chǔ),其查詢效率遠(yuǎn)比不上關(guān)系數(shù)據(jù)模型。目前采用的對(duì)象—關(guān)系模型大多是通過(guò)對(duì)關(guān)系模型的擴(kuò)展來(lái)實(shí)現(xiàn)的。如文獻(xiàn)[3]就是通過(guò)對(duì)關(guān)系中增加嵌套屬性組的方法來(lái)實(shí)現(xiàn)多值屬性(元素)的存儲(chǔ),它綜合了上述二種方法的優(yōu)點(diǎn),但仍不能充分體現(xiàn)XML數(shù)據(jù)的靈活性和不確定性。本文提出的對(duì)象—關(guān)系模型是將元素的關(guān)系信息和元素的實(shí)例信息分別存儲(chǔ),這可有效降低數(shù)據(jù)的維護(hù)代價(jià)。同時(shí),將部分元素和屬性采用關(guān)系模型存儲(chǔ),將具有繼承、不確定特征的數(shù)據(jù)建立面向?qū)ο髷?shù)據(jù)模型,既能保證元素的直觀性和完整性,又可提高部分?jǐn)?shù)據(jù)的查詢效率。此模型還能對(duì)ANY類(lèi)型的元素和屬性創(chuàng)建特定的類(lèi)進(jìn)行維護(hù)。這些都體現(xiàn)了XML數(shù)據(jù)的特點(diǎn)。分片技術(shù)的運(yùn)用也對(duì)提高查詢效率有很大的作用。
本文討論了XML數(shù)據(jù)的物理存儲(chǔ)模型。對(duì)建立在該模型上的數(shù)據(jù)庫(kù)查詢及在XML Schema和對(duì)象-關(guān)系物理存儲(chǔ)模型之間引入適當(dāng)邏輯數(shù)據(jù)模型將是下一步研究的課題。
參考文獻(xiàn)
1 蓋江南.Java,XML和Web服務(wù)寶典.北京:電子工業(yè)出版社,2002
2 Fan W,Libkin L.On XML Integrity constraints in the presence of DTDs.JACM,2002;49(3)
3 Florescu D,Kossmann D.Storing and querying XML data using an RDBMS.IEEE Data Engineering Bulletin,1999;22(3)
4 Aboulnaga A,Naughton J,Zhang C.Generating synthetic complex-structured XML data.In Proceedings of the WebDB′ 01Workshop,2001
5 Khalifa S A,Jagadish H V,Koudas N et al.Structural joins:A primitive for efficient XML query pattern matching. In:Proceedings of the 2002 International Conference on Data Engineering,2002