两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

用于壓縮xml文檔的方法和系統(tǒng)的制作方法

文檔序號:7525273閱讀:156來源:國知局
專利名稱:用于壓縮xml文檔的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及數(shù)據(jù)庫系統(tǒng),具體而言,涉及更有效地在數(shù)據(jù)庫系統(tǒng)中存儲XML數(shù)據(jù)。
技術(shù)背景
本節(jié)中描述的方法是可以尋求、但未必是先前已經(jīng)想到或?qū)で蟮姆椒?。因此,除?另有陳述,不應假設(shè)本節(jié)中描述的任何方法僅僅由于包括在本節(jié)中就限制為現(xiàn)有技術(shù)。
可擴展標簽語言(XML)是用于表達數(shù)據(jù)的萬維網(wǎng)協(xié)會(W3C)標準。很多應用被設(shè) 計成以XML文檔的形式輸出數(shù)據(jù)。XML數(shù)據(jù)包括形成分級結(jié)構(gòu)的結(jié)構(gòu)化數(shù)據(jù)項。在XML中, 由打開標簽和關(guān)閉標簽對稱為元素的數(shù)據(jù)項劃界。元素還可以包括在元素的打開的標簽中 指定的屬性。元素的標簽之間的文本可以表示任何種類的數(shù)據(jù)值,例如字符串、日期或整 數(shù)。元素可以具有一個或多個子女。參照與用于論述系譜樹的那些類似的方面論述XML格 式的數(shù)據(jù)的所得分級結(jié)構(gòu)。例如,子元素被說成起源于其父元素或其父元素所起源的任何 元素。父元素被說成是其自己的任何子元素或其后代元素之一的祖先元素??偲饋碇v,元 素連同其屬性和后代,稱為樹或子樹。
隨著XML的增長和普及,很多關(guān)系數(shù)據(jù)庫系統(tǒng)增加了對存儲、管理和查詢XML內(nèi)容 的支持。術(shù)語關(guān)系數(shù)據(jù)庫系統(tǒng)是指支持數(shù)據(jù)處理的關(guān)系模型的任何數(shù)據(jù)庫系統(tǒng),包括可以 支持其他數(shù)據(jù)處理模型,例如對象關(guān)系和各種XML標準模型(例如XQuery,XPath)的數(shù)據(jù)庫 系統(tǒng)。
存儲XML文檔的關(guān)系數(shù)據(jù)庫系統(tǒng)可以在表格的分開的行中存儲各個元素。這里將 這樣的文檔稱為粉碎的(shredded)文檔。將XML文檔分成離散元素值(或其表達)以存儲 在保存表達XML文檔和/或其節(jié)點的數(shù)據(jù)的行中的過程,稱為粉碎XML文檔。
可以將XML文檔完全粉碎到對象關(guān)系存儲器中、部分粉碎或存儲在LOB存儲器中 并由XML索引定位。如果完全粉碎,則可以由數(shù)據(jù)庫中以關(guān)系方式存儲的數(shù)據(jù)完整重建XML文檔。如果部分粉碎,則以混合形式在LOB存儲器中存儲文檔,至少一部分文檔以對象關(guān)系 形式,例如以XML索引存儲。盡管XML索引中存儲的部分可能不表示整個文檔,但XML索引 可用于高效率地訪問被索引的文檔的那些部分??梢詫碜訶ML文檔的特定字段進行索 引,而在索引期間可以忽略來自XML文檔的其他字段。
在粉碎XML文檔并至少部分以對象關(guān)系形式存儲時,可以在相同或不同列中的不 同行中,或在相同或不同行中的不同列中存儲XML文檔的值。以對象關(guān)系方式存儲的值可 以包括針對文檔的為索引選擇的特定字段的值,并可以排除文檔的沒有為索引選擇的其他 字段的值。在一個示例中,在索引中同一行中不同列中存儲文檔中的給定字段的幾個值。在 另一個示例中,在索引中同一列中不同行中存儲文檔中的給定字段的幾個值。
XML文檔的粉碎版本可以具有比以其他形式,例如基于文本的文件存儲器中存儲 的XML文檔大得多的存儲覆蓋區(qū)。于是需要更有效率地存儲粉碎的XML文檔。
數(shù)據(jù)庫和數(shù)據(jù)庫服務器
通常,服務器,例如數(shù)據(jù)庫服務器是集成軟件部件和計算資源分配的組合,計算資 源例如存儲器、節(jié)點和節(jié)點上用于執(zhí)行集成軟件部件,其中軟件和計算資源的組合專用于 代表服務器的客戶端提供特定類型的功能。數(shù)據(jù)庫服務器支配并促進訪問特定的數(shù)據(jù)庫, 處理客戶端要訪問數(shù)據(jù)庫的請求。
數(shù)據(jù)庫包括存儲在持久性存儲機構(gòu),例如一組硬盤上的數(shù)據(jù)和元數(shù)據(jù)。例如,可以 根據(jù)關(guān)系型和/或?qū)ο箨P(guān)系型數(shù)據(jù)庫構(gòu)造,以邏輯方式在數(shù)據(jù)庫中存儲這樣的數(shù)據(jù)和元數(shù) 據(jù)。數(shù)據(jù)庫元數(shù)據(jù)定義數(shù)據(jù)庫對象,例如表格、對象表、視圖或復雜類型,例如對象類型,重 要的是表函數(shù)。向數(shù)據(jù)庫服務器發(fā)出SQL數(shù)據(jù)定義語言(“DDL”)指令以創(chuàng)建或配置數(shù)據(jù)庫 對象。
通常,在數(shù)據(jù)庫之內(nèi)以邏輯方式將數(shù)據(jù)布置成一個或多個數(shù)據(jù)容器。每個容器都 包含記錄,并將每個記錄之內(nèi)的數(shù)據(jù)組織成一個或多個字段。在關(guān)系數(shù)據(jù)庫系統(tǒng)中,通常將 數(shù)據(jù)容器稱為表格,將記錄稱為行,將字段稱為列。在面向?qū)ο蟮臄?shù)據(jù)庫中,通常將數(shù)據(jù)容 器稱為對象類型或類,將記錄稱為對象,將字段稱為屬性。其他數(shù)據(jù)庫體系結(jié)構(gòu)可以使用其 他術(shù)語。實施本發(fā)明的系統(tǒng)不限于任何特定類型的數(shù)據(jù)容器或數(shù)據(jù)庫體系結(jié)構(gòu)。不過,為了 解釋的目的,這里使用的示例和術(shù)語應當?shù)湫偷嘏c關(guān)系型或?qū)ο箨P(guān)系型數(shù)據(jù)庫相關(guān)聯(lián)。于 是,這里應當使用術(shù)語“表格”、“行”和“列”分別指代數(shù)據(jù)容器、記錄和字段。
數(shù)據(jù)塊
盡管在數(shù)據(jù)容器中以邏輯方式布置數(shù)據(jù)庫,但那些容器自身通常存儲于例如硬盤 上的一個或多個數(shù)據(jù)塊中。因此,例如,盡管大部分用戶將向數(shù)據(jù)庫服務器發(fā)出通過查詢表 格、行和列來查詢數(shù)據(jù)的指令或請求,但該數(shù)據(jù)實際存儲在作為數(shù)據(jù)塊的集合的數(shù)據(jù)庫中。 通過利用各種存儲的元數(shù)據(jù)、索引和報頭,數(shù)據(jù)庫服務器能夠?qū)⑦@些數(shù)據(jù)塊之內(nèi)的數(shù)據(jù)解 釋為邏輯表、行和列。
數(shù)據(jù)塊是為存儲用于一條或多條數(shù)據(jù)庫記錄(例如行)或其部分的原始數(shù)據(jù)而分 配的存儲空間基本單位。典型地,數(shù)據(jù)庫系統(tǒng)被配置成從持久性存儲器和易失性存儲器中 以不小于數(shù)據(jù)塊的單位讀寫數(shù)據(jù)庫記錄。在需要檢索來自數(shù)據(jù)塊的記錄時,將整個數(shù)據(jù)塊 讀入數(shù)據(jù)庫系統(tǒng)用于暫時存儲數(shù)據(jù)塊的存儲器中緩沖器中。在很多數(shù)據(jù)庫中,數(shù)據(jù)塊全部 是普通大小。數(shù)據(jù)庫管理員基于若干考慮選擇這個大小。不過,表格常常包括比能夠裝入在單個數(shù)據(jù)塊中的數(shù)據(jù)更多的數(shù)據(jù)。于是,表格常??邕^很多數(shù)據(jù)塊。
例如,圖8示出了如何可以在示例數(shù)據(jù)塊820和830中存儲表格800。因為數(shù)據(jù) 塊820和830都是小于表格800的預定義大小,所以不能在單個數(shù)據(jù)塊中裝入表格800。于 是,在兩個數(shù)據(jù)塊中存儲表格800。
通常將數(shù)據(jù)塊細分成一個或多個這里描述為“數(shù)據(jù)塊行”的連續(xù)片段。在由數(shù)據(jù) 庫服務器解釋時,每個數(shù)據(jù)塊行從至少一部分表格產(chǎn)生數(shù)據(jù)。如名稱“數(shù)據(jù)塊行”所暗示的 那樣,單個數(shù)據(jù)塊行保持與表格的單行對應的原始數(shù)據(jù)。不過,在表格行和數(shù)據(jù)塊行之間并 非始終有一一對應關(guān)系。
例如,表格800由組織成列811-815的行801-805構(gòu)成。表格行801-805的數(shù)據(jù) 存儲在數(shù)據(jù)塊行821-824和831-832中。具體而言,每個數(shù)據(jù)塊行821-824和831-832包 括多個字段890。每個字段890對應于來自表格800的單個列值。盡管數(shù)據(jù)塊行821、822、 823和832與表格行801、802、803和805分別具有——對應,但在數(shù)據(jù)塊行824和831之間 劃分表格行804的數(shù)據(jù)。在不同數(shù)據(jù)塊中的多個數(shù)據(jù)塊行間劃分表格行的數(shù)據(jù)時,將表格 行說成跨過多個數(shù)據(jù)塊鏈接,并且可以將數(shù)據(jù)塊行統(tǒng)一稱為鏈。
盡管表格中的“行”和數(shù)據(jù)塊中的“行”都通稱為“行”,但現(xiàn)在應該明白,兩種類型 的“行”是不同的概念。為避免混淆,因此在必要時本申請將分別使用術(shù)語“表格行”和“數(shù) 據(jù)塊行”表示表格的“行”和數(shù)據(jù)塊的“行”。
在一些數(shù)據(jù)庫中,每個數(shù)據(jù)塊行是由行報頭劃界的。每個行報頭可以包含各種元 數(shù)據(jù),包括用于數(shù)據(jù)塊行的標識符、數(shù)據(jù)庫服務器應當期待從數(shù)據(jù)塊行讀出的列數(shù)和/或 數(shù)據(jù)塊行中每列的大小(由此指示數(shù)據(jù)庫服務器關(guān)于數(shù)據(jù)塊行中每個字段的邊界)。例如, 數(shù)據(jù)塊行821-824和831-832的每個都包括數(shù)據(jù)塊行報頭821a_824a或831a_832a。在一 些實施例中,替代地插入每列的大小(或長度)作為緊接在數(shù)據(jù)塊行中每個列字段之前的預 定義長度的獨立字段。
在一些數(shù)據(jù)庫中,(例如,因為大小或列計數(shù)的限制)在多個數(shù)據(jù)塊行上鏈接表格 行的數(shù)據(jù)時,數(shù)據(jù)庫還可以存儲將一個或多個數(shù)據(jù)塊行與一個或多個保持同一表格行的數(shù) 據(jù)的其他數(shù)據(jù)塊行相關(guān)聯(lián)的元數(shù)據(jù)。這種元數(shù)據(jù)可以在任何位置,例如在行報頭、數(shù)據(jù)塊報 頭中或在數(shù)據(jù)塊行的結(jié)尾。例如,數(shù)據(jù)塊行824中的指針829指向數(shù)據(jù)塊行831,其包括表 格行804的剩余數(shù)據(jù)值。
數(shù)據(jù)塊還可以具有報頭和/或其他數(shù)據(jù)結(jié)構(gòu),描述關(guān)于它們保持其原始數(shù)據(jù)的數(shù) 據(jù)塊和/或表格的信息。例如,數(shù)據(jù)塊820和830分別包括報頭數(shù)據(jù)825和835。數(shù)據(jù)塊 報頭例如可以包括例如表目錄的元數(shù)據(jù),描述表格的各種質(zhì)量和其數(shù)據(jù)塊包括數(shù)據(jù)的表格 行。數(shù)據(jù)塊報頭還可以例如包括例如行目錄的元數(shù)據(jù),表示數(shù)據(jù)塊中每個數(shù)據(jù)塊行的起始 地址和/或標識符。
在一些數(shù)據(jù)庫中,數(shù)據(jù)塊報頭中(或在等效結(jié)構(gòu)中)的元數(shù)據(jù)可以定義并劃界數(shù)據(jù) 塊的數(shù)據(jù)塊行。于是,在一些數(shù)據(jù)庫中,數(shù)據(jù)塊行的特征可以是對其地址可以與數(shù)據(jù)塊報頭 區(qū)分的數(shù)據(jù)塊進行最低水平的細分,或者其數(shù)據(jù)塊報頭列出可索引標識符的數(shù)據(jù)塊的任何 細分。
以稱為“行優(yōu)先(row major)”的格式組織數(shù)據(jù)塊820和830,因此可以將其描述為 “行優(yōu)先數(shù)據(jù)塊”。該格式被稱為“行優(yōu)先”是因為每個數(shù)據(jù)塊行821-824和831-832都包含僅來自表格單個行的數(shù)據(jù)。其他數(shù)據(jù)庫可以代之以利用其他格式在數(shù)據(jù)塊中存儲表格, 包括例如“列優(yōu)先(column major)”的格式。這里描述的技術(shù)適用于任何類型的數(shù)據(jù)塊,不 論使用何種格式。
注意,表格800和數(shù)據(jù)塊820-830的大小均較小。本申請同樣考慮到使用大得多 的表格和大得多的數(shù)據(jù)塊。不過,為了清楚起見,這里的示例表格和數(shù)據(jù)塊是相對簡單的。
從數(shù)據(jù)塊尋址數(shù)據(jù)
數(shù)據(jù)庫可以存儲各種元數(shù)據(jù)以輔助數(shù)據(jù)庫服務器解釋數(shù)據(jù)庫的數(shù)據(jù)塊中存儲的 數(shù)據(jù)。例如,各種索引可以包括將數(shù)據(jù)庫中每個表格與一個或多個數(shù)據(jù)塊相關(guān)聯(lián)的映射數(shù) 據(jù)。作為另一示例,各種索引可以包括將表格行與數(shù)據(jù)行塊相關(guān)聯(lián)的映射數(shù)據(jù)。
例如,圖8的索引850包括表格800中表格行的列表851,連同包含表格行的數(shù)據(jù) 的數(shù)據(jù)塊行的地址852。地址852也可以描述為rowid,均由兩個元素構(gòu)成由周期之前的 數(shù)字構(gòu)成的數(shù)據(jù)塊標識符和由周期之后的數(shù)字構(gòu)成的數(shù)據(jù)塊行標識符。不過,也可以使用 其他尋址方案。
數(shù)據(jù)庫服務器可以利用這樣的元數(shù)據(jù)定位存儲用于表格和表格行的數(shù)據(jù)的數(shù)據(jù) 塊和/或數(shù)據(jù)塊行。例如,數(shù)據(jù)庫服務器可以要求從圖8的表格行801訪問數(shù)據(jù)。利用索 引850,數(shù)據(jù)庫服務器可以判定表格行801的數(shù)據(jù)在數(shù)據(jù)塊820的第一數(shù)據(jù)塊行(即數(shù)據(jù)塊 行821)中。數(shù)據(jù)庫服務器然后可以利用數(shù)據(jù)塊標識符到地址映射或算法以在盤上定位數(shù) 據(jù)塊820。數(shù)據(jù)庫服務器然后可以利用其他映射數(shù)據(jù)(例如數(shù)據(jù)塊報頭中將數(shù)據(jù)塊行標識符 映射到塊相對地址的數(shù)據(jù))以定位數(shù)據(jù)塊820中第一數(shù)據(jù)塊行的起始。數(shù)據(jù)庫服務器然后 可以讀取和解釋這一行,由此產(chǎn)生針對表格801的數(shù)據(jù)。
對于數(shù)據(jù)跨過多個數(shù)據(jù)庫行的表格行,諸如索引850的行索引可以僅指向包括針 對表格行的第一部分的數(shù)據(jù)的數(shù)據(jù)塊行。在判定表格行未被數(shù)據(jù)塊行中的值充分表達時, 數(shù)據(jù)庫服務器可以利用諸如指針829之類的元數(shù)據(jù)斷定包括表格行的額外數(shù)據(jù)的其他數(shù) 據(jù)塊行的位置。例如,在定位用于表格行804的數(shù)據(jù)時,數(shù)據(jù)庫服務器可以首先指向數(shù)據(jù)塊 行824。數(shù)據(jù)庫服務器然后可以遵循指針829指向數(shù)據(jù)塊行831,其包括表格行804的剩余 數(shù)據(jù)。
壓縮的數(shù)據(jù)塊
在一些數(shù)據(jù)庫中,可以在塊級別上壓縮每個數(shù)據(jù)塊之內(nèi)的原始數(shù)據(jù)。例如,如果 在數(shù)據(jù)塊之內(nèi)“San Jose” 一詞出現(xiàn)多次,則數(shù)據(jù)塊可以用符號或更小的字符組,例如“01” 替換“San Jose”的每次出現(xiàn),然后存儲將“01”與“San Jose”相關(guān)聯(lián)的解壓縮詞典(也稱 為符號表)。在數(shù)據(jù)庫服務器解釋包含這種壓縮值的數(shù)據(jù)塊行時,數(shù)據(jù)庫服務器可以利用解 壓縮詞典解釋壓縮值。在一些數(shù)據(jù)庫中,針對每個塊定位解壓縮詞典,然后存儲于塊自身內(nèi) 部(例如,在數(shù)據(jù)塊報頭中)。在其他數(shù)據(jù)庫中,在多個數(shù)據(jù)塊之間共享解壓縮詞典,從而在 與多個數(shù)據(jù)塊獨立的其自己的塊中存儲。在下文中將把這樣的壓縮方案稱為“基于塊的壓 縮”。發(fā)明內(nèi)容
提供了一種用于更有效率地存儲粉碎的XML文檔的方法和計算機系統(tǒng)。該方法包 括向表格中的多個行中加載多個XML文檔的每個XML文檔,在表格中以粉碎形式存儲XML文檔。加載所述每個XML文檔包括產(chǎn)生多個列的列值,所述列值要存儲在表格的多個行中。 加載所述每個XML文檔還包括對于所述多個列的每列,分析所述列值以確定用于存儲所 述列的行存儲格式。所述確定包括確定以列優(yōu)先還是行優(yōu)先格式存儲列值,以及確定是否 使用壓縮技術(shù)來壓縮所述列值。加載所述每個XML文檔還包括根據(jù)所述存儲格式的確定在 多個行中存儲列值。該方法由一個或多個計算設(shè)備執(zhí)行。在一個實施例中,一種計算機程 序產(chǎn)品存儲指令,該指令在被執(zhí)行時使得一個或多個處理器執(zhí)行該方法。
該計算機系統(tǒng)包括向表格中的多個行中加載多個XML文檔的每個XML文檔的裝 置,在表格中以粉碎形式存儲XML文檔。用于加載所述每個XML文檔的裝置包括用于產(chǎn)生 多個列的列值的裝置,所述列值要存儲在表格中的多個行中。用于加載所述每個XML文檔 的裝置還包括用于針對所述多個列的每個列分析所述列值以確定用于存儲所述列的行存 儲格式的裝置。用于分析的裝置包括用于確定以列優(yōu)先還是行優(yōu)先格式存儲列值的裝置, 以及用于確定是否使用壓縮技術(shù)壓縮所述列值的裝置。用于加載所述每個XML文檔的裝置 還包括用于根據(jù)存儲格式的所述確定在多個行中存儲列值的裝置。


在附圖的圖中以舉例的方式而非限制方式例示本發(fā)明,其中類似的附圖標記指示 類似元件,且其中
圖1示出了根據(jù)本發(fā)明實施例的用于單獨地分析針對XML文檔產(chǎn)生的列值并確定 主導格式和壓縮技術(shù)的流程;
圖2是壓縮單元的方框圖3是在這里提供的示例中提到的表格的方框圖4是示出了兩層壓縮單元的方框圖5是示出了可以如何在圖3中所示的壓縮單元中存儲圖2所示表格的表式數(shù)據(jù) 的方框圖6是示出了子壓縮單元如何可以自己具有子壓縮單元的方框圖7是示出了如何將壓縮單元報頭分成兩個部分的方框圖,其一是未壓縮的,其 一是壓縮的;
圖8示出了如何可以在示例數(shù)據(jù)塊中存儲未壓縮的表格;以及
圖9是可以在其上實施本發(fā)明的實施例的計算設(shè)備的方框圖。
具體實施方式
在以下描述中,為了解釋的目的,闡述了眾多具體細節(jié),以便提供對本發(fā)明的透徹 理解。不過,將要明了的是,可以無需這些具體細節(jié)來實踐本發(fā)明。在其他情況下,以方框 圖形式示出了公知的結(jié)構(gòu)和設(shè)備以避免不必要地使本發(fā)明模糊不清。
一般概述
這里描述的是更有效率地存儲粉碎的XML文檔的機制。該機制利用壓縮能力和存 儲稱為列優(yōu)先格式的關(guān)系數(shù)據(jù)的形式來以粉碎形式存儲XML文檔。針對每個XML文檔單獨 分析為粉碎的XML文檔存儲的列值,以判斷是否以列優(yōu)先格式存儲特定的列以及使用什么 壓縮技術(shù)(如果有的話)。
在具有一組所枚舉大小(例如4k數(shù)據(jù)塊,32k數(shù)據(jù)塊)之一的持久存儲單元中持久 存儲數(shù)據(jù)庫中的數(shù)據(jù)。在持久存儲單元中存儲行有幾種形式行優(yōu)先和列優(yōu)先。在行優(yōu)先 格式中,在持久存儲器的單位,例如數(shù)據(jù)塊之內(nèi)連續(xù)地存儲單個行的列值。在列優(yōu)先格式 中,連續(xù)存儲一列多個行的值。這里將行優(yōu)先格式或列優(yōu)先格式統(tǒng)稱為優(yōu)先格式。
在列優(yōu)先格式中,重新布置輸入數(shù)據(jù),從而將屬于一個列的數(shù)據(jù)放在一起。由于一 個列中的數(shù)據(jù)非??赡芟嗨?,這減小了熵,因此實現(xiàn)了更好的壓縮比。這類似于垂直劃分或 列式存儲。
列優(yōu)先格式具有允許更好的可壓縮性的優(yōu)點。列之內(nèi)的值可以具有共同性質(zhì),使 得在連續(xù)存儲值時,可以利用各種壓縮技術(shù)采用公共性質(zhì)。這里將列優(yōu)先的格式和使用的 壓縮技術(shù)(如果有的話)稱為存儲格式。
根據(jù)本發(fā)明的實施例,在粉碎XML文檔時,分析要存儲在保持粉碎XML文檔的行中 的列值以確定存儲格式,即是否和/或如何以行優(yōu)先或列優(yōu)先格式存儲行,以及應用什么 壓縮技術(shù)(如果有的話)。通過這種方式,單獨分析針對列和特定XML文檔的列值,以確定針 對保存該XML文檔的數(shù)據(jù)的行的存儲格式。
在數(shù)據(jù)庫系統(tǒng)的語境之內(nèi)例示了本發(fā)明的實施例,該數(shù)據(jù)庫系統(tǒng)支持數(shù)據(jù)的關(guān)系 存儲、查詢和操作,并支持根據(jù)XML標準存儲和查詢XML數(shù)據(jù)。因此,描述這樣的數(shù)據(jù)庫系 統(tǒng)是有用的。
數(shù)據(jù)庫系統(tǒng)
數(shù)據(jù)庫管理系統(tǒng)(“DBMS”)管理數(shù)據(jù)庫。數(shù)據(jù)庫管理系統(tǒng)可以包括一個或多個數(shù) 據(jù)庫服務器。數(shù)據(jù)庫包括存儲在持久性存儲機構(gòu),例如一組硬盤上的數(shù)據(jù)和元數(shù)據(jù)。元數(shù) 據(jù)定義數(shù)據(jù)庫對象,例如關(guān)系表格、表格列、視圖和觸發(fā)器。
數(shù)據(jù)庫應用和客戶端通過向數(shù)據(jù)庫服務器提交命令來與數(shù)據(jù)庫服務器交互,命令 讓數(shù)據(jù)庫服務器對數(shù)據(jù)庫中存儲的數(shù)據(jù)執(zhí)行操作。數(shù)據(jù)庫命令可以是符合數(shù)據(jù)庫語言的數(shù) 據(jù)庫語句的形式。用于表達數(shù)據(jù)庫請求的語言是結(jié)構(gòu)化查詢語言(SQL)。有很多不同版本 的SQL,一些版本是標準的,一些是專有的,并且有多種擴展。向數(shù)據(jù)庫服務器發(fā)出SQL數(shù) 據(jù)定義語言(“DDL”)指令以創(chuàng)建或配置數(shù)據(jù)庫對象,例如表格、視圖或復雜數(shù)據(jù)類型。SQL/ XML是在對象關(guān)系型數(shù)據(jù)庫中操縱XML數(shù)據(jù)時使用的SQL的公共擴展。盡管基于Oracle的 SQL描述示例,但這里提供的技術(shù)不限于任何特定版本的SQL。
XML 存儲
各種存儲機制用于存儲XML文檔。一種存儲機制將XML文檔存儲為文件系統(tǒng)中的 文本文件。如前所述,另一種用于存儲XML文檔的機制是數(shù)據(jù)庫服務器。在數(shù)據(jù)庫服務器 中,可以在表格的行中存儲XML文檔,并在行中的單獨列中存儲XML文檔的節(jié)點。也可以在 列中以Iob (大對象)存儲整個XML文檔??梢苑鬯閄ML文檔并作為對象的分級結(jié)構(gòu)存儲 在數(shù)據(jù)庫中;每個對象都是對象類的實例并存儲XML文檔的一個或多個元素。這里將保持 XML數(shù)據(jù)的表格和/或數(shù)據(jù)庫系統(tǒng)的對象稱為基礎(chǔ)表格或?qū)ο蟆?br> 二進制編碼的XML是另一種形式,其中可以在數(shù)據(jù)庫中存儲XML數(shù)據(jù)。二進制編 碼的XML是XML的緊湊二進制表達,被設(shè)計成減小XML文檔的大小。二進制編碼的XML壓 縮數(shù)據(jù)的方式之一是利用固定值表達字符串(“令牌”)。
XML 索引
存儲XML數(shù)據(jù)的數(shù)據(jù)庫服務器可以包括很多機構(gòu),允許用更強大和有效的方式查 詢XML文檔的大集合??梢栽鰪姶鎯ML文檔的數(shù)據(jù)庫服務器以利用這些機構(gòu)有效率地執(zhí) 行XML操作。數(shù)據(jù)庫服務器可以維持對很多XML文檔進行索引的“邏輯索引”,這里稱為XML 索引。
XML索引包含多種結(jié)構(gòu),協(xié)作地使用它們以訪問很多XML文檔。一種這樣的結(jié)構(gòu)是 存儲粉碎的文檔的關(guān)系型表格。這樣的關(guān)系型表格用于例示本發(fā)明的實施例。
具體而言,XML索引可以包括稱為路徑表格的表格。路徑表格存儲粉碎的文檔,這 里稱為已索引文檔。路徑表格的每行包含用于已索引文檔的節(jié)點的數(shù)據(jù)。并非已索引文檔 的所有節(jié)點都具有路徑表格中的對應行。
每個路徑表格行都包含多個列,行的每個列都包含與節(jié)點相關(guān)聯(lián)的一條信息。一 些列值可能受到列優(yōu)先格式下壓縮的作用。
根據(jù)實施例,路徑表格的列包括用于(I)表不通往節(jié)點的PATHID的列,(2)用于在 基礎(chǔ)結(jié)構(gòu)之內(nèi)定位針對節(jié)點的片段數(shù)據(jù)的“位置數(shù)據(jù)”的列,以及(3)表示包含節(jié)點的XML 文檔的結(jié)構(gòu)分級體系之內(nèi)節(jié)點位置的“分級結(jié)構(gòu)數(shù)據(jù)”的列??蛇x地,PATH表格可以包括包 含針對與值相關(guān)聯(lián)的那些節(jié)點的值信息的列。這些類型的信息的每個都將在下文更詳細地 加以描述。
路徑ID
根據(jù)實施例,為已索引XML路徑的每個分配唯一的路徑ID。例如,如下表所示,可 以為po1. xml和po 2. xml中存在的路徑分配路徑ID
路徑ID路徑41/PurchaseOrder41. 54/PurchaseOrder/Reference41. 34/PurchaseOrder/Actions41. 34. 33/PurchaseOrder/Actions/Action41. 34. 33. 77/PurchaseOrder/Actions/Action/User
可以使用各種技術(shù)識別路徑并向路徑分配路徑ID。
位置數(shù)據(jù)
與節(jié)點相關(guān)聯(lián)的位置數(shù)據(jù)表示包含節(jié)點的XML文檔駐留在基礎(chǔ)結(jié)構(gòu)中的哪里。于 是,位置數(shù)據(jù)的性質(zhì)將基于基礎(chǔ)結(jié)構(gòu)的性質(zhì)在實施方式之間變化。根據(jù)如何存儲實際的XML 文檔,位置數(shù)據(jù)還可以包括指向XML文檔的定位器或邏輯指針??梢允褂眠壿嬛羔榿硖崛?與XPath識別的節(jié)點相關(guān)聯(lián)的片段。
分級結(jié)構(gòu)數(shù)據(jù)
用于節(jié)點的PATH表格行還包括表示節(jié)點位于包含該節(jié)點的XML文檔分級結(jié)構(gòu)之 內(nèi)的哪里的信息。這里將這樣的分級信息稱為節(jié)點的“OrderKey”。
根據(jù)一個實施例,利用Dewey型值表示分級次序信息。具體而言,在一個實施例中,通過向節(jié)點中間父親的OrderKey附加值來創(chuàng)建節(jié)點的OrderKey,其中附加的值表示該特定子節(jié)點在父節(jié)點的子女間的位置。
根據(jù)一個實施例,將每個OrderKey表示的合成數(shù)轉(zhuǎn)換成可與字節(jié)比擬的值,使得兩個OrderKeys之間的數(shù)學比較表示OrderKeys對應的節(jié)點在XML文檔的分級結(jié)構(gòu)之內(nèi)的相對位置。
值信息
已索引文檔之內(nèi)的一些節(jié)點可以是屬性節(jié)點或?qū)诤唵卧氐墓?jié)點。根據(jù)一個實施例,對于屬性節(jié)點和簡單元素,PATH表格行還存儲屬性和元素的實際值。例如,可以在路徑表格的“值列”中存儲這樣的值。在值列上構(gòu)建下文將更詳細描述的輔助“值索引”。
路徑表格示例
利用包括如下定義的列的路徑表格示例例示
具體實施例方式
權(quán)利要求
1.一種由一個或多個計算設(shè)備執(zhí)行的用于存儲XML文檔的方法,所述方法包括向表格中的多個行中加載多個XML文檔的每個XML文檔,在所述表格中以粉碎形式存儲XML文檔,其中加載所述每個XML文檔包括產(chǎn)生多個列的列值,所述列值要存儲在所述表格中的多個行中;對于所述多個列的每個列,分析所述列值以確定用于存儲所述列的行存儲格式,所述確定包括確定是以列優(yōu)先還是以行優(yōu)先格式存儲列值,以及確定是否使用壓縮技術(shù)來壓縮所述列值;以及根據(jù)所述存儲格式的確定在所述多個行中存儲所述列值。
2.根據(jù)權(quán)利要求1所述的方法,其中所述多個XML文檔包括第一 XML文檔和第二 XML文檔;其中對于所述第一 XML文檔并且對于所述多個列的特定列,所述行存儲格式的確定包括以行優(yōu)先格式存儲所述特定列;并且其中對于所述第二 XML文檔并且對于所述多個列的所述特定列,所述行存儲格式的確定包括以列優(yōu)先格式存儲所述特定列。
3.根據(jù)權(quán)利要求1所述的方法,其中所述多個XML文檔包括第一 XML文檔和第二 XML文檔;其中對于所述多個列的特定列,針對所述第一 XML文檔和所述第二 XML文檔進行的所述行存儲格式的確定包括以列優(yōu)先格式存儲所述特定列;對于所述第一 XML文檔的所述特定列使用第一壓縮技術(shù);以及對于所述第二 XML文檔使用第二壓縮技術(shù);其中所述第一壓縮技術(shù)與所述第二壓縮技術(shù)不同。
4.根據(jù)權(quán)利要求1所述的方法,其中數(shù)據(jù)庫服務器管理對所述表格的訪問,其中所述步驟還包括在第二表格中存儲所述多個XML文檔;其中所述表格的所述多個列包括存儲所述多個XML文檔中的節(jié)點的節(jié)點值的第一列,以及存儲指示所述第二表格中的存儲所述多個XML文檔的一個XML文檔的行的值的第二列。
5.根據(jù)權(quán)利要求1所述的方法,其中在壓縮單元中存儲所述表格的所述數(shù)據(jù)。
6.根據(jù)權(quán)利要求1-5中的任一項所述的方法,其中對于所述表格的給定行,所述多個列的每個列存儲針對所述多個XML文檔的相應XML文檔的節(jié)點的列值;其中所述多個文檔包括第一 XML文檔和第二 XML文檔;其中所述表格的第一多個行存儲針對所述第一 XML文檔的數(shù)據(jù);其中所述表格的第二多個行存儲針對所述第二 XML文檔的數(shù)據(jù);其中對于所述第一多個行和所述第二多個行,以列優(yōu)先格式存儲所述多個列的特定列;其中對于所述表格的所述第一多個行,利用第一壓縮技術(shù)壓縮所述特定列中的所述值;以及其中對于所述表格的所述第二多個行,利用第二壓縮技術(shù)壓縮所述特定列中的所述值。
7.根據(jù)權(quán)利要求6所述的方法,其中所述表格的第三多個行存儲針對第三XML文檔的數(shù)據(jù);并且其中對于所述第三多個行,不以列優(yōu)先格式存儲所述特定列。
8.一種計算機系統(tǒng),包括用于向表格中的多個行中加載多個XML文檔的每個XML文檔的裝置,在所述表格中以粉碎形式存儲XML文檔,其中用于加載所述每個XML文檔的裝置包括用于產(chǎn)生多個列的列值的裝置,所述列值要存儲在所述表格中的多個行中;用于對于所述多個列的每個列,分析所述列值以確定用于存儲所述列的行存儲格式的裝置,用于分析的裝置包括用于確定是以列優(yōu)先還是以行優(yōu)先格式存儲列值的裝置,以及用于確定是否使用壓縮技術(shù)來壓縮所述列值的裝置;以及用于根據(jù)所述存儲格式的確定在所述多個行中存儲列值的裝置。
9.根據(jù)權(quán)利要求8所述的計算機系統(tǒng),其中所述多個XML文檔包括第一 XML文檔和第二 XML文檔;其中對于所述第一 XML文檔并且對于所述多個列的特定列,所述行存儲格式的確定包括以行優(yōu)先格式存儲所述特定列;以及其中對于所述第二 XML文檔并且對于所述多個列的所述特定列,所述行存儲格式的確定包括以列優(yōu)先格式存儲所述特定列。
10.根據(jù)權(quán)利要求8所述的計算機系統(tǒng),其中所述多個XML文檔包括第一 XML文檔和第二 XML文檔;其中對于所述多個列的特定列,針對所述第一 XML文檔和所述第二 XML文檔進行的所述行存儲格式的確定包括以列優(yōu)先格式存儲所述特定列;對于所述第一 XML文檔的所述特定列使用第一壓縮技術(shù);以及對于所述第二 XML文檔使用第二壓縮技術(shù);其中所述第一壓縮技術(shù)與所述第二壓縮技術(shù)不同。
11.根據(jù)權(quán)利要求8所述的計算機系統(tǒng),其中數(shù)據(jù)庫服務器管理對所述表格的訪問,其中所述計算機系統(tǒng)還包括用于在第二表格中存儲所述多個XML文檔的裝置;其中所述表格的所述多個列包括存儲所述多個XML文檔中的節(jié)點的節(jié)點值的第一列,以及存儲表示所述第二表格中的存儲所述多個XML文檔的一個XML文檔的行的值的第二列。
12.根據(jù)權(quán)利要求8所述的計算機系統(tǒng),其中在壓縮單元中存儲用于所述表格的所述數(shù)據(jù)。
13.根據(jù)權(quán)利要求8-12的任一項所述的計算機系統(tǒng),其中對于所述表格的給定行,所述多個列的每個列存儲針對所述多個XML文檔的相應XML文檔的節(jié)點的列值;其中所述多個文檔包括第一 XML文檔和第二 XML文檔;其中所述表格的第一多個行存儲針對所述第一 XML文檔的數(shù)據(jù);其中所述表格的第二多個行存儲針對所述第二XML文檔的數(shù)據(jù);其中對于所述第一多個行和所述第二多個行,以列優(yōu)先格式存儲所述多個列的特定列;其中對于所述表格的所述第一多個行,利用第一壓縮技術(shù)壓縮所述特定列中的所述值;以及其中對于所述表格的所述第二多個行,利用第二壓縮技術(shù)壓縮所述特定列中的所述值。
14.根據(jù)權(quán)利要求13所述的計算機系統(tǒng),其中所述表格的第三多個行存儲針對第三XML文檔的數(shù)據(jù);以及其中對于所述第三多個行,不以列優(yōu)先格式存儲所述特定列。
15.一種存儲指令的計算機程序產(chǎn)品,所述指令在被執(zhí)行時使得一個或多個處理器執(zhí)行權(quán)利要求1-7中的任一項所述的方法。
全文摘要
提供了一種用于更有效率地存儲粉碎的XML文檔的方法和裝置。該方法和裝置利用壓縮能力和存儲稱為列優(yōu)先格式的關(guān)系數(shù)據(jù)的形式來以粉碎形式存儲XML文檔。針對每個XML文檔單獨分析為粉碎的XML文檔存儲的列值,以確定是否以列優(yōu)先格式存儲特定的列以及使用什么壓縮技術(shù)(如果有的話)。
文檔編號H03M7/30GK103026631SQ201180035113
公開日2013年4月3日 申請日期2011年6月1日 優(yōu)先權(quán)日2010年6月1日
發(fā)明者S·查德拉塞卡, N·阿格爾沃 申請人:甲骨文國際公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
张北县| 海南省| 新余市| 旅游| 郎溪县| 岳阳市| 新津县| 屏东市| 崇文区| 杂多县| 高安市| 洞头县| 台江县| 平湖市| 台东市| 松原市| 昭平县| 烟台市| 武陟县| 濮阳县| 汶川县| 敦化市| 新乐市| 奇台县| 赣州市| 金堂县| 阿尔山市| 景洪市| 涿鹿县| 长子县| 长宁县| 松桃| 临汾市| 怀集县| 濉溪县| 光泽县| 伊春市| 星子县| 岫岩| 商丘市| 丰顺县|