專利名稱:對二進(jìn)制編碼的xml數(shù)據(jù)的高效分段更新的制作方法
技術(shù)領(lǐng)域:
本發(fā)明一般地涉及數(shù)據(jù)管理,更具體而言涉及在關(guān)系數(shù)據(jù)庫管理系統(tǒng) (RDBMS)中以分段方式對緊湊二進(jìn)制編碼XML數(shù)據(jù)進(jìn)行高效更新的技 術(shù)。
背景技術(shù):
可擴(kuò)展標(biāo)記語言(XML)的使用己經(jīng)成為一種流行且有用的技術(shù),用 于表示并交換任何種類的信息,例如在計算機(jī)程序應(yīng)用和服務(wù)之間交換信 息。因此,對XML數(shù)據(jù)的有效且高效的存儲和操縱也同樣成為有用并且 必要的。因而, 一些數(shù)據(jù)庫已被增強(qiáng),以支持對XML數(shù)據(jù)的存儲和操縱 以及訪問。使用XML作為其數(shù)據(jù)模型的應(yīng)用的主要要求之一是模式 (schema)靈活性。但是,在傳統(tǒng)上,用于存儲XML數(shù)據(jù)的數(shù)據(jù)庫并未 針對模式靈活性而被優(yōu)化。雖然這種數(shù)據(jù)庫可以在提供了模式并且該模式 不易改變的場景中高效工作,但是當(dāng)模式易于改變或者模式的結(jié)構(gòu)松散 時,這些數(shù)據(jù)庫缺乏對XML的恰當(dāng)支持。
XML數(shù)據(jù)是自描述性的(即,它包含與數(shù)據(jù)一起的標(biāo)簽),但是標(biāo) 準(zhǔn)的XML序列化格式是基于文本的,包括數(shù)字和日期。這導(dǎo)致XML文檔 的大小與其他用于捕捉同樣數(shù)據(jù)的專屬格式相比大大增加。XML文檔的
大小增加導(dǎo)致由于有限的網(wǎng)絡(luò)帶寬引起的傳輸期間的開銷成本,以及由于 有限的盤I/O帶寬引起的存儲和檢索操作的更緩慢性能。因此,引入了 XML數(shù)據(jù)的二進(jìn)制編碼形式,該形式嘗試在仍然提供存儲和查詢益處的 同時使模式靈活性最大化。這種二進(jìn)制編碼形式在Ravi Murthy等人提交 的題為"Encoding of Hierarchically Organized Data for Efficient Storage and Processing"的美國專利申請No. 11/182,997 ( "Murthy申請")中有所描 述,該申請的全部內(nèi)容通過引用被全部被并入在此用于所有用途,就好像
4在這里完全公開了一樣。
利用Murthy申請中描述的編碼格式,XML數(shù)據(jù)是以緊湊二進(jìn)制形式 存儲的,該形式以可使用的形式維持XML數(shù)據(jù)的所有特征,例如數(shù)據(jù)下 面的層級結(jié)構(gòu)(例如,數(shù)據(jù)模型或信息集)、元素和屬性的概念,等等。 該緊湊二進(jìn)制格式顯著地最小化了由于XML標(biāo)簽引起的開銷。因此,經(jīng) 編碼的XML比相應(yīng)的文本字符表示的二進(jìn)制表示更緊湊。與解析相比, 該二進(jìn)制格式可被更高效地處理,因?yàn)閿?shù)據(jù)被有效地預(yù)解析。
數(shù)據(jù)庫中的XML文檔可通過插入節(jié)點(diǎn)并且改變或刪除現(xiàn)有節(jié)點(diǎn)而被 修改,所有這些在這里都被總稱為更新操作。取決于操縱XML數(shù)據(jù)的應(yīng) 用的性質(zhì),這些類型的操作相對而言可以是共通的。但是,現(xiàn)有的XML 數(shù)據(jù)存儲系統(tǒng)不提供更新二進(jìn)制編碼的XML文檔的高效手段。這種系統(tǒng) 一般以對象樹(例如,DOM)的形式將整個XML文檔加載到本地存儲器 (例如,RAM)中,改變存儲器中的數(shù)據(jù),并且將更新后的DOM樹轉(zhuǎn)換 回二進(jìn)制形式以便存儲。該過程一般來說是低效的,并且導(dǎo)致可縮放性和 性能問題,因?yàn)橛捎谝粋€原因,整個XML文檔需要在本地存儲器中被具 體化。此外, 一些現(xiàn)有的XML數(shù)據(jù)存儲系統(tǒng)在有非常具體的XML模式可 用時可提供優(yōu)化的用于更新XML數(shù)據(jù)的技術(shù)。但是,這些系統(tǒng)不能恰當(dāng) 地應(yīng)對XML方案非常不受約束的場景或者沒有XML方案可用的場景。
因此,基于以上原因,需要一種用于對持續(xù)存儲在數(shù)據(jù)庫中的XML 數(shù)據(jù)進(jìn)行高效更新的技術(shù)。
本部分中描述的方法是可以被實(shí)行的方法,但不一定是先前已設(shè)想或 實(shí)行過的方法。因此,除非另有指明,否則不應(yīng)當(dāng)假定本部分中描述的方 法僅因?yàn)楸话ㄔ诒静糠种芯湍艹蔀楝F(xiàn)有技術(shù)。
在附圖中以示例方式而非限制方式示出了本發(fā)明,附圖中相似的標(biāo)號 指代類似的元件,其中
圖1是示出根據(jù)本發(fā)明一個實(shí)施例用于生成與所請求的對以緊湊二進(jìn) 制形式持續(xù)存儲在數(shù)據(jù)庫中的XML文檔的修改相對應(yīng)的改變元組(change tuple)的過程的流程圖2是示出根據(jù)本發(fā)明一個實(shí)施例如何在相應(yīng)改變元組中表達(dá)對緊湊 二進(jìn)制編碼XML數(shù)據(jù)的更新的示例的圖;并且
圖3是示出本發(fā)明實(shí)施例可在其上實(shí)現(xiàn)的計算機(jī)系統(tǒng)的框圖。
具體實(shí)施例方式
在以下描述中,出于說明目的,闡述了許多具體細(xì)節(jié)以幫助全面理解 本發(fā)明。但是,很明顯,沒有這些具體細(xì)節(jié)也能實(shí)現(xiàn)本發(fā)明。在其他情況 下,以框圖形式示出公知的結(jié)構(gòu)和設(shè)備,以避免不必要地模糊本發(fā)明。
實(shí)施例的功能概述
這里描述了用于對存儲在數(shù)據(jù)庫中的XML數(shù)據(jù)進(jìn)行更新的技術(shù)?;?于現(xiàn)有技術(shù),XML文檔可以按緊湊二進(jìn)制形式被表示和解釋,該緊湊二 進(jìn)制形式以可使用形式維持XML數(shù)據(jù)的所有特征。XML的該緊湊二進(jìn)制 表示進(jìn)而可作為大對象(例如,二進(jìn)制大對象,或者BLOB)被持續(xù)存儲 (例如,存儲在盤上)。響應(yīng)于對以緊湊二進(jìn)制形式存儲的XML文檔進(jìn) 行修改(例如,插入、刪除或更新節(jié)點(diǎn))的請求,所請求的修改的某個表 示被計算,以便直接應(yīng)用到XML文檔的二進(jìn)制形式。因而,所請求的修 改可被直接應(yīng)用到持續(xù)存儲的二進(jìn)制形式,而無需構(gòu)造XML文檔的對象 樹(例如,DOM)和/或?qū)ML文檔構(gòu)造或具體化為相應(yīng)的文本形式。
XML文檔的實(shí)際需要被改變的(一個或多個)節(jié)點(diǎn)被識別。識別受 影響的(一個或多個)節(jié)點(diǎn)包括識別在二進(jìn)制表示中的何處需要進(jìn)行相應(yīng) 的實(shí)際改變,例如實(shí)際改變開始于哪個字節(jié)處。因而,實(shí)際改變開始于哪 個字節(jié)處作為"目的地偏移量"參數(shù)被包括在所請求的修改的表示中。但 是,如果將優(yōu)選緊湊二進(jìn)制形式用于XML數(shù)據(jù),則識別實(shí)際改變開始于 二進(jìn)制表示中的何處就不是像簡單地識別表示受影響的一個或多個節(jié)點(diǎn)的 字節(jié)的一個或多個范圍那么簡單直接了。這是因?yàn)閮?yōu)選的二進(jìn)制形式利用 了各個XML文檔中的己知結(jié)構(gòu)屬性和約束,例如通過相應(yīng)XML模式賦予 文檔的那些,以便一般經(jīng)由對標(biāo)簽的令牌化和操作碼的使用來壓縮XML文檔。例如,如果同一標(biāo)簽被重復(fù)多次,或者如果XML模式約束元素的 順序,那么利用優(yōu)選二進(jìn)制形式則可避免相應(yīng)的令牌ID。因而,對二進(jìn)制 表示中需要進(jìn)行相應(yīng)實(shí)際改變的位置的計算可考慮用來編碼XML文檔的 緊湊二進(jìn)制形式的性質(zhì)。關(guān)于編碼XML數(shù)據(jù)的緊湊二進(jìn)制形式的優(yōu)選非 限制性示例的更多細(xì)節(jié),參考Murthy申請。
除了目的地偏移量參數(shù)之外,足夠的令牌被包括在所請求的修改的表 示中,以便能夠?qū)?shí)際改變直接插入到XML文檔的二進(jìn)制形式中。例 如,與各個被更新的節(jié)點(diǎn)相對應(yīng)的某些組的字節(jié)可被改變、添加或刪除, 而無需覆寫整個XML文檔。
操作環(huán)境-存儲系統(tǒng)
數(shù)據(jù)庫系統(tǒng)一般包括一個或多個客戶端,該一個或多個客戶端通信地 耦合到數(shù)據(jù)庫服務(wù)器,該數(shù)據(jù)庫服務(wù)器耦合到共享的數(shù)據(jù)庫。"數(shù)據(jù)庫服 務(wù)器"可以總地指服務(wù)器實(shí)例和實(shí)例在其上運(yùn)行的機(jī)器的集群。 一般來 說,服務(wù)器是集成軟件組件和計算資源的分配的組合,所述計算資源例如 是存儲器、節(jié)點(diǎn)和節(jié)點(diǎn)上的用于在處理器上執(zhí)行集成軟件組件的進(jìn)程,其 中軟件和計算資源的組合專用于代表服務(wù)器的客戶端提供特定類型的功 能。
在數(shù)據(jù)庫管理的其他功能中,數(shù)據(jù)庫服務(wù)器管理和輔助對特定數(shù)據(jù)庫 的訪問,處理客戶端訪問數(shù)據(jù)庫的請求。為了使得客戶端能與服務(wù)器交 互,為該客戶端建立會話。會話(例如數(shù)據(jù)庫會話)是從客戶端到服務(wù)器 (例如數(shù)據(jù)庫服務(wù)器)建立的特定連接。通過會話,客戶端可以向數(shù)據(jù)庫 服務(wù)器發(fā)出一系列請求(例如,對數(shù)據(jù)和/或元數(shù)據(jù)的請求)。
數(shù)據(jù)庫包括存儲在諸如一組硬盤之類的持續(xù)存儲器機(jī)制上的元數(shù)據(jù)和 數(shù)據(jù)。這種數(shù)據(jù)和元數(shù)據(jù)可以例如根據(jù)關(guān)系和/或?qū)ο?關(guān)系數(shù)據(jù)庫構(gòu)造而 在邏輯上存儲在數(shù)據(jù)庫中。數(shù)據(jù)庫應(yīng)用通過向數(shù)據(jù)庫服務(wù)器提交使得數(shù)據(jù) 庫服務(wù)器對存儲在數(shù)據(jù)庫中的數(shù)據(jù)執(zhí)行操作的命令來與數(shù)據(jù)庫服務(wù)器交 互。從數(shù)據(jù)庫應(yīng)用發(fā)送到數(shù)據(jù)庫服務(wù)器的數(shù)據(jù)庫命令包含數(shù)據(jù)庫命令的原 始語句。為了使得數(shù)據(jù)庫服務(wù)器能處理命令,該命令必須符合數(shù)據(jù)庫服務(wù)
7器所支持的數(shù)據(jù)庫語言。許多數(shù)據(jù)庫服務(wù)器所支持的一種非限制性數(shù)據(jù)庫 語言被稱為結(jié)構(gòu)化查詢語言(SQL)。
一般來說,數(shù)據(jù)被存儲在數(shù)據(jù)庫中的一個或多個數(shù)據(jù)容器
(container)中,每個容器包含記錄,并且每個記錄內(nèi)的數(shù)據(jù)被組織成一 個或多個字段。在關(guān)系數(shù)據(jù)庫系統(tǒng)中,數(shù)據(jù)容器一般被稱為表,記錄被稱 為行,并且字段被稱為列。在面向?qū)ο蟮臄?shù)據(jù)庫中,數(shù)據(jù)容器一般被稱為 對象類,記錄被稱為對象,并且字段被稱為屬性。其他數(shù)據(jù)庫體系結(jié)構(gòu)可 使用其他術(shù)語。實(shí)現(xiàn)本發(fā)明的系統(tǒng)并不限于任何特定類型的數(shù)據(jù)容器或數(shù) 據(jù)庫體系結(jié)構(gòu)。但是,出于說明目的,這里使用的示例和術(shù)語將一般是與
關(guān)系數(shù)據(jù)庫相關(guān)聯(lián)的。因而,術(shù)語"表"、"行"和"列"在這里將用于 分別指數(shù)據(jù)容器、記錄和字段。
關(guān)系數(shù)據(jù)庫系統(tǒng)可被擴(kuò)展,以提供對特定類型的數(shù)據(jù)的存儲、管理和 查詢的本地支持(從而充當(dāng)用于該特定類型的數(shù)據(jù)的倉庫)。例如,可利 用下述特征和技術(shù)來增強(qiáng)傳統(tǒng)的關(guān)系數(shù)據(jù)庫系統(tǒng)這些特征和技術(shù)使得能 夠直接將XML文檔存儲在數(shù)據(jù)庫中,并且能夠以XML中心方式(例如, 利用XPath禾n XQuery査詢語言)或者關(guān)系中心方式(例如,利用SQL査 詢語言)來對這種XML數(shù)據(jù)進(jìn)行訪問。這種倉庫有時被稱為XML倉庫或 XML數(shù)據(jù)庫(即,"XDB")。
更新XML文檔
通過在XML文檔中插入、更新和/或刪除XML節(jié)點(diǎn),可以更新XML 文檔。對修改XML文檔的請求可通過以下方式來表達(dá)識別該XML文 檔、利用XPath或其他路徑名稱表達(dá)來識別要改變的(一個或多個)節(jié) 點(diǎn),并且提供新的值(如果有的話)??梢哉埱蟮哪墙M操作如下。
(1)添加新節(jié)點(diǎn)用戶可以利用XPath或其他路徑名稱表達(dá)來識別 目標(biāo)節(jié)點(diǎn)或父節(jié)點(diǎn),并且指定要插入的子節(jié)點(diǎn)的值。例如,通過識別在其 前插入新節(jié)點(diǎn)的目標(biāo)節(jié)點(diǎn)(例如,insertChild()命令)或者通過識別父節(jié)點(diǎn) 并且提供要插入的子節(jié)點(diǎn)來作為所識別的父節(jié)點(diǎn)的最后的孩子(例如, appendChild()命令),可以識別在XML文檔內(nèi)插入新節(jié)點(diǎn)的位置。(2) 更新現(xiàn)有節(jié)點(diǎn)用戶可以利用XPath或其他路徑名稱表達(dá)來識 別目標(biāo)節(jié)點(diǎn),并且指定要更新的目標(biāo)節(jié)點(diǎn)的新值。
(3) 刪除節(jié)點(diǎn)用戶可以利用XPath或路徑名稱表達(dá)來識別要刪除
的目標(biāo)節(jié)點(diǎn)。
如上所述,傳統(tǒng)的XML存儲系統(tǒng)一般將整個XML文檔加載到本地存 儲器中以執(zhí)行所請求的操作。但是,這是一種導(dǎo)致緩慢性能的低效過程。 因此,根據(jù)一個實(shí)施例,基于XML數(shù)據(jù)修改請求,直接更新存儲的XML 文檔的緊湊二進(jìn)制表示。換言之,可直接在持續(xù)存儲裝置(即,非易失性 存儲器,例如盤)上更新XML文檔,而無需將文檔加載到本地易失性存 儲器中?;蛘?,XML文檔可按緊湊二進(jìn)制表示而不是作為對象樹被加載 到本地易失性存儲器中以便更新,其中緊湊二進(jìn)制表示比起簡單地以二進(jìn) 制格式表示文本XML來更為緊湊(例如,參見Murthy申請)。
對存儲在數(shù)據(jù)庫中的XML文檔進(jìn)行更新的高效過程
如上所述,對XML文檔的改變的某種表示被計算,以便直接應(yīng)用到 XML文檔的緊湊二進(jìn)制形式。根據(jù)一個實(shí)施例,這種改變是由一組參數(shù) 值來表示的,該組參數(shù)值在這里被稱為"改變元組"。 一般地,圖1是示 出用于生成改變元組的過程的流程圖。
圖1是示出根據(jù)本發(fā)明一個實(shí)施例用于生成與所請求的對以緊湊二進(jìn) 制形式持續(xù)存儲在數(shù)據(jù)庫中的XML文檔的修改相對應(yīng)的改變元組的過程 的流程圖。圖1所示的方法可通過例如在計算機(jī)系統(tǒng)(例如,圖3的計算 機(jī)系統(tǒng))內(nèi)由一個或多個處理器執(zhí)行一個或多個指令序列來執(zhí)行。
在塊102,在以緊湊二進(jìn)制形式存儲在數(shù)據(jù)庫中的XML文檔的上下 文中,接收對XML文檔進(jìn)行修改的請求。例如,在支持對XML數(shù)據(jù)的存 儲和管理的數(shù)據(jù)庫系統(tǒng)中的數(shù)據(jù)庫服務(wù)器處接收SQL或SQL/XML語句。 這種語句一般標(biāo)識(a)要更新的XML文檔;(b)所標(biāo)識的XML文檔 內(nèi)去往被更新的節(jié)點(diǎn)的一個或多個路徑名稱(例如,XPath);以及(c) 被更新的相應(yīng)節(jié)點(diǎn)的新值。
在塊104,基于修改請求來識別XML文檔中被請求修改的一個或多個節(jié)點(diǎn)。用于定位存儲在數(shù)據(jù)庫中的XML數(shù)據(jù)的各種方法可用于基于修 改請求中指定的路徑名稱來識別受影響的節(jié)點(diǎn)。定位存儲在數(shù)據(jù)庫中的
XML數(shù)據(jù)的方法的非限制性示例包括使用XML索引、流式XPath評估 (例如,非確定性有限狀態(tài)自動控制,或者說NFA),等等。另外,用來 在持續(xù)存儲裝置中存儲XML文檔的緊湊二進(jìn)制形式最終可是二進(jìn)制大對 象(BLOB)。在這種場景中,塊104可包括識別BLOB內(nèi)以序列化二進(jìn) 制形式表示一個或多個受影響的節(jié)點(diǎn)的確切位置。
在塊106,計算所請求的修改如何影響一個或多個節(jié)點(diǎn)的緊湊二進(jìn)制 形式。例如,如果節(jié)點(diǎn)值被從"1"改變到"1000",則計算如何以緊湊 二進(jìn)制形式表示"1000"。又例如,如果節(jié)點(diǎn)值被從整數(shù)型"1"改變到 浮點(diǎn)型"1000",則計算如何以緊湊二進(jìn)制形式表示浮點(diǎn)數(shù)"1000",因 為緊湊二進(jìn)制形式可能按值的原始數(shù)據(jù)類型來存儲值,這在Mmthy申請 中有所描述。根據(jù)一個實(shí)施例,例如在塊110,以緊湊二進(jìn)制形式表示的 一個或多個節(jié)點(diǎn)的"新值"被計算并表示為所請求的對XML文檔的修改 的某個表示(例如,改變元組)中的參數(shù)。根據(jù)一個實(shí)施例,新值考慮了 所請求的修改對緊湊二進(jìn)制形式的任何影響,這些影響不限于所請求的修 改對所識別的一個或多個節(jié)點(diǎn)的直接影響,這將在下文中更詳細(xì)描述。因 此,新值表示被插入到緊湊二進(jìn)制形式的字節(jié)串中以替換舊值的新的一組 字節(jié)。
另外,"1000"的表示有可能將要求比"1"的表示更多的字節(jié),因 而,作為塊106的一部分,"新值長度"可被計算。根據(jù)一個實(shí)施例,例 如在塊110, 一個或多個節(jié)點(diǎn)的新值長度被計算并表示為與所請求的對 XML文檔的修改相對應(yīng)的改變元組中的參數(shù)。根據(jù)一個實(shí)施例,新值長 度考慮了所請求的修改對緊湊二進(jìn)制形式的任何影響,這些影響不限于所 請求的修改對所識別的一個或多個節(jié)點(diǎn)的直接影響,這將在下文中更詳細(xì) 描述。
對于以緊湊二進(jìn)制形式存儲的XML文檔(即,不是基于字符的XML 內(nèi)容的簡單二進(jìn)制表示),對一個節(jié)點(diǎn)的改變對緊湊二進(jìn)制形式的影響可 能不限于對該一個節(jié)點(diǎn)的直接影響。例如,Murthy申請描述了一種被稱為"陣列模式優(yōu)化"(array mode optimization)的技術(shù),從而如果同一標(biāo)簽 被重復(fù)多次,那么相應(yīng)的令牌ID不被重復(fù)。因而,節(jié)點(diǎn)的添加或刪除可 能影響標(biāo)簽序列,因此影響緊湊二進(jìn)制編碼方案的陣列模式優(yōu)化組件。又 例如,Murthy申請描述了一種被稱為"模式順序優(yōu)化"(schema sequential optimization)的技術(shù),從而如果與結(jié)構(gòu)有關(guān)的元數(shù)據(jù)(例如, XML模式)將元素的順序約束為特定的順序,那么由于利用了XML數(shù)據(jù) 模型,在編碼中則可以避免令牌ID。因而,對XML模式的改變(例如, 經(jīng)由DDL操作)可引起對XML文檔的相應(yīng)改變,以便仍然符合該模式。 對XML模式的這個改變和所導(dǎo)致的對相應(yīng)XML文檔的改變最終可能影響 文檔內(nèi)元素的順序,因此,影響緊湊二進(jìn)制編碼方案的模式順序優(yōu)化組 件。
因此,在塊108,計算所請求的修改在其對一個或多個所識別的節(jié)點(diǎn) 的影響之外如何影響XML文檔的緊湊二進(jìn)制形式。根據(jù)一個實(shí)施例,特 定的所請求的修改對緊湊二進(jìn)制形式的該整體凈影響被表示為用于插入到 緊湊二進(jìn)制形式中的"新值"。因此,例如在塊110,特定的所請求的修 改對緊湊二進(jìn)制形式的整體影響的新值被計算并表示為與所請求的修改相 對應(yīng)的改變元組中的參數(shù)。類似地,例如在塊110,對緊湊二進(jìn)制形式的 該整體影響被表示在與所請求的修改相對應(yīng)的改變元組中的相應(yīng)"新值長 度"參數(shù)中。換句話說,所請求的修改對緊湊二進(jìn)制形式的直接影響和間 接影響(如果有的話)被計算并作為相應(yīng)參數(shù)"新值和新值長度" 一起表 示在相應(yīng)改變元組中。
表達(dá)所請求的修改的影響
在塊110,表示所請求的修改對XML文檔的緊湊二進(jìn)制形式的實(shí)際 影響的參數(shù)被計算并表示在例如相應(yīng)的改變元組中。進(jìn)而,該改變元組可 被應(yīng)用到持續(xù)地存儲在數(shù)據(jù)庫中或者本地地存儲在非易失性存儲器中的 XML文檔的緊湊二進(jìn)制形式。根據(jù)一個實(shí)施例,所請求的修改對XML文 檔的緊湊二進(jìn)制形式的影響是以以下改變元組的形式來表達(dá)的 <destOffset, changedLen, newValue, newValueLen>。對于不同的實(shí)現(xiàn)方式,用于指稱以上改變元組參數(shù)的名稱可能不同。因此,改變元組的成分不限 于以上參數(shù)名稱。
注意,對于不同的實(shí)現(xiàn)方式,BLOB的性質(zhì)可能不同。因而,可以在 存儲XML文檔的緊湊二進(jìn)制表示的某些類型的BLOB中進(jìn)行插入和刪 除,而在其他類型的BLOB中則不能。換言之, 一些BLOB允許在BLOB 內(nèi)的任何位置插入或刪除一組連續(xù)的字節(jié),而無需改寫剩余字節(jié)直到末 尾。與之不同, 一些BLOB不允許在沒有覆寫起始插入/刪除點(diǎn)之后的整個 BLOB的情況下插入或刪除一組連續(xù)的字節(jié)。不論BLOB的性質(zhì)如何,這 里描述的技術(shù)在計算改變元組參數(shù)時都可考慮BLOB的特性。
圖2是示出根據(jù)本發(fā)明一個實(shí)施例如何在相應(yīng)改變元組中表達(dá)對緊湊 二進(jìn)制編碼XML數(shù)據(jù)的更新的示例的圖。
參數(shù)"destOffset"(目的地偏移量)用于表達(dá)緊湊二進(jìn)制形式中所請 求的修改的影響開始的點(diǎn)。因而,目的地偏移量至少對于經(jīng)由所請求的修 改來更新的第一原子節(jié)點(diǎn)(以二進(jìn)制形式出現(xiàn))標(biāo)識緊湊二進(jìn)制形式內(nèi)所 請求的修改開始的偏移位置。根據(jù)一個實(shí)施例,目的地偏移量被表示為從 緊湊二進(jìn)制形式的開頭起的若干個字節(jié)。如上所述,目的地偏移量可能不 是所請求的修改直接影響的所標(biāo)識節(jié)點(diǎn)的實(shí)際起始位置。更確切地說,目 的地偏移量在考慮到緊湊二進(jìn)制形式的性質(zhì)的情況下標(biāo)識對緊湊二進(jìn)制形 式的實(shí)際改變的起始位置。例如,所請求的修改對二進(jìn)制形式的實(shí)際影響 可能開始于二進(jìn)制形式中的節(jié)點(diǎn)值的位置之前的位置處。
對于圖2所示的示例,假定只有一個節(jié)點(diǎn)被更新并且該節(jié)點(diǎn)的舊值是 利用16個字節(jié)以緊湊二進(jìn)制形式來表示的,即,是以字節(jié)227-243來表示 的。還假定被更新的節(jié)點(diǎn)的標(biāo)簽名稱被改變,從而導(dǎo)致緊湊二進(jìn)制編碼方 案的相關(guān)聯(lián)的陣列模式優(yōu)化組件的改變,例如,通過將第五個4ineltem〉 標(biāo)簽改變成相應(yīng)XML層級中的同一位置處的某個其他標(biāo)簽, 一系列的5 個接連的4ineltem〉標(biāo)簽被中斷。因此,對該節(jié)點(diǎn)的改變對緊湊二進(jìn)制形 式具有不僅限于被改變的節(jié)點(diǎn)的影響,即節(jié)點(diǎn)之前的一些字節(jié)需要被改變 以反映陣列模式優(yōu)化的改變。因?yàn)閷ζ渌止?jié)的這個影響,對二進(jìn)制形式 的凈影響實(shí)際開始于字節(jié)222,而不是字節(jié)227。因而,該更新的目的地偏移量是222,這表明對二進(jìn)制形式的改變開始于字節(jié)串的字節(jié)222。
參數(shù)"changedLen"(被改變長度)用于表達(dá)緊湊二進(jìn)制形式的被更 新節(jié)點(diǎn)的被改變的值或者說舊值的長度。以上提到在此示例中該節(jié)點(diǎn)的舊 值是利用16個字節(jié)以緊湊二進(jìn)制形式表示的。因此,此更新的被改變長 度是16個字節(jié)。
參數(shù)"newValue"(新值)用于表達(dá)由于節(jié)點(diǎn)更新而對緊湊二進(jìn)制形 式的整個改變的新值,其中新值是以其相應(yīng)的緊湊二進(jìn)制形式來表達(dá)的, 并且包括對二進(jìn)制形式的不限于被更新節(jié)點(diǎn)的任何影響。參數(shù) "newValueLen"(新值長度)用于表達(dá)由于節(jié)點(diǎn)更新而對緊湊二進(jìn)制形 式進(jìn)行的整個改變的新值的以字節(jié)為單位的長度,其中新值是以其相應(yīng)的 緊湊二進(jìn)制形式來表達(dá)的。因而,此更新的新值長度為21個字節(jié),即從 目的地偏移量字節(jié)222到字節(jié)243處節(jié)點(diǎn)的末尾。在此示例中,禾擁16字 節(jié)表達(dá)的表示舊節(jié)點(diǎn)值的字節(jié)串被替換為表示新節(jié)點(diǎn)值以及該節(jié)點(diǎn)值對二 進(jìn)制形式的其余部分的影響的21字節(jié)的新串。
基于修改請求中XPath所標(biāo)識的節(jié)點(diǎn)的數(shù)目,單次用戶更新操作可能 導(dǎo)致多個改變元組。根據(jù)一個實(shí)施例,這些組的改變元組被表示在XML 改變文檔中,XML改變文檔在這里被稱為"atom-diff-XML",其中 "atom"在這里指的是本原改變操作(primitive change operation)。如上 所述,表示由于修改請求而導(dǎo)致的對緊湊二進(jìn)制形式的改變的atom-diff-XML 可基于相應(yīng)存儲能力被應(yīng)用到基本存儲裝置。例如,如果存儲裝置 支持分段更新,那么atom-diff-XML中表示的本原改變操作被直接轉(zhuǎn)化成 下層基本存儲構(gòu)造。如果存儲裝置只支持覆寫能力(而沒有增大/減小長度 的能力),那么atom-diff-XML中表示的整體所請求改變通過覆寫第一改 變(基于文檔順序)之后的所有內(nèi)容而被應(yīng)用到下層基本存儲構(gòu)造。
除了節(jié)點(diǎn)更新操作之外,與參考圖2描述的示例一樣,節(jié)點(diǎn)可被插入 或刪除。插入新節(jié)點(diǎn)到XML文檔中會向緊湊二進(jìn)制形式添加字節(jié)。在考 慮到新節(jié)點(diǎn)對周圍節(jié)點(diǎn)的影響(如果有的話)以及周圍節(jié)點(diǎn)的相應(yīng)二進(jìn)制 表示的情況下,目的地偏移量標(biāo)識新節(jié)點(diǎn)被插入在字節(jié)串中的何處。類似 地,與節(jié)點(diǎn)插入操作相對應(yīng)的新值和新值長度考慮了新節(jié)點(diǎn)和新節(jié)點(diǎn)對緊
13湊二進(jìn)制形式的整體影響。即使新節(jié)點(diǎn)被添加,也可能存在被改變長度參 數(shù)("老"長度)的相應(yīng)值,因?yàn)樾鹿?jié)點(diǎn)可能影響周圍節(jié)點(diǎn)的緊湊二進(jìn)制 表示。因而,在這種場景中的被改變長度參數(shù)將表示受新節(jié)點(diǎn)插入影響的 任何周圍節(jié)點(diǎn)(如果有的話)的舊表示。同樣,從XML文檔中刪除節(jié)點(diǎn)
可能將x個字節(jié)替換為y個字節(jié),因?yàn)閷?jié)點(diǎn)的刪除可能對其二進(jìn)制表示 將由該y個字節(jié)構(gòu)成的其他節(jié)點(diǎn)的二進(jìn)制表示有影響。總之,不論是對 XML文檔進(jìn)行節(jié)點(diǎn)更新、刪除還是添加,改變元組的值都反映了對節(jié)點(diǎn) 的改變以及節(jié)點(diǎn)改變對其他節(jié)點(diǎn)的緊湊二進(jìn)制表示的影響(如果有的 話)。
因此,描述了用于在無需在存儲器中以DOM樹形式將整個目標(biāo)XML 文檔具體化的情況下應(yīng)用用戶更新語句的技術(shù),從而與其他技術(shù)相比改進(jìn) 了性能和可縮放性。
硬件概述
圖3是示出本發(fā)明的實(shí)施例可在其上實(shí)現(xiàn)的計算機(jī)系統(tǒng)300的框圖。 計算機(jī)系統(tǒng)300包括用于傳輸信息的總線302或其他通信機(jī)構(gòu)以及與總線 302相耦合用于處理信息的處理器304。計算機(jī)系統(tǒng)300還包括諸如隨機(jī) 訪問存儲器(RAM)或其他動態(tài)存儲設(shè)備之類的主存儲器306,其耦合到 總線302,用于存儲信息和處理器304要執(zhí)行的指令。主存儲器306還可 用于存儲在處理器304執(zhí)行指令期間的臨時變量或其他中間信息。計算機(jī) 系統(tǒng)300還包括只讀存儲器(ROM) 308或其他靜態(tài)存儲設(shè)備,其耦合到 總線302,用于存儲靜態(tài)信息和處理器304的指令。提供了諸如磁盤或光 盤之類的存儲設(shè)備310,其耦合到總線302,用于存儲信息和指令。
計算機(jī)系統(tǒng)300可以經(jīng)由總線302耦合到顯示器312,例如陰極射線 管(CRT),用于向計算機(jī)用戶顯示信息。包括字母數(shù)字和其他鍵的輸入 設(shè)備313被耦合到總線302,用于向處理器304傳輸信息和命令選擇。另 一類用戶輸入設(shè)備是光標(biāo)控制裝置316,例如鼠標(biāo)、軌跡球或光標(biāo)方向 鍵,用于向處理器304傳輸方向信息和命令選擇,并用于控制顯示器312 上的光標(biāo)移動。該輸入設(shè)備一般具有兩個軸(第一軸(例如x)和第二軸 (例如y))上的兩個自由度,其允許設(shè)備指定平面中的位置。本發(fā)明涉及使用計算機(jī)系統(tǒng)300來實(shí)現(xiàn)這里描述的技術(shù)。根據(jù)本發(fā)明
的一個實(shí)施例,這些技術(shù)由計算機(jī)系統(tǒng)300響應(yīng)于處理器304執(zhí)行包含在 主存儲器306中的一條或多條指令的一個或多個序列而執(zhí)行。這種指令可 以被從另一計算機(jī)可讀介質(zhì)(如存儲設(shè)備310)讀取到主存儲器306中。 對包含在主存儲器306中的指令序列的執(zhí)行使得處理器304執(zhí)行這里描述 的過程步驟。在替換實(shí)施例中,可以使用硬線電路來替代軟件指令或與軟 件指令相組合以實(shí)現(xiàn)本發(fā)明。因此,本發(fā)明的實(shí)施例并不限于硬件電路和 軟件的任何特定組合。
這里所用的術(shù)語"機(jī)器可讀介質(zhì)"指參與提供使得機(jī)器以特定方式工 作的數(shù)據(jù)的任何介質(zhì)。在利用計算機(jī)系統(tǒng)300實(shí)現(xiàn)的實(shí)施例中,例如,在 向處理器304提供指令以供執(zhí)行時,涉及了各種機(jī)器可讀介質(zhì)。這種介質(zhì) 可以采取許多形式,包括但不限于非易失性介質(zhì)、易失性介質(zhì)和傳輸介 質(zhì)。非易失性介質(zhì)例如包括光盤或磁盤,如存儲設(shè)備310。易失性介質(zhì)包 括動態(tài)存儲器,如主存儲器306。傳輸介質(zhì)包括同軸電纜、銅線和光纖, 包括含總線302的線路。傳輸介質(zhì)也可以采取聲波或光波的形式,例如在 無線電波和紅外數(shù)據(jù)通信期間生成的聲波或光波。
機(jī)器可讀介質(zhì)的常見形式例如包括軟盤、柔性盤、硬盤、磁帶或任何
其他磁介質(zhì),CD-ROM、任何其他光介質(zhì),穿孔卡、紙帶、任何其他具有 孔圖案的物理介質(zhì),RAM、 PROM和EPROM、 FLASH-EPROM、任何其
他存儲器芯片或卡盤,下文中描述的載波,或者計算機(jī)可以讀取的任何其 他介質(zhì)。
各種形式的機(jī)器可讀介質(zhì)可用于將一條或多條指令的一個或多個序列 傳送到處理器304以供執(zhí)行。例如,指令可以首先承載在遠(yuǎn)程計算機(jī)的磁 盤上。遠(yuǎn)程計算機(jī)可以將指令加載到其動態(tài)存儲器中,并利用調(diào)制解調(diào)器 經(jīng)由電話線發(fā)送指令。計算機(jī)系統(tǒng)300本地的調(diào)制解調(diào)器可以接收電話線 上的數(shù)據(jù),并使用紅外發(fā)送器來將數(shù)據(jù)轉(zhuǎn)換為紅外信號。紅外檢測器可以 接收在紅外信號中攜帶的數(shù)據(jù),并且適當(dāng)?shù)碾娐房梢詫?shù)據(jù)置于總線302 上??偩€302將數(shù)據(jù)傳送到主存儲器306,處理器304從主存儲器306取 得指令并執(zhí)行指令。主存儲器306接收的指令可以可選地在處理器304執(zhí) 行之前或之后存儲在存儲設(shè)備310上。計算機(jī)系統(tǒng)300還包括耦合到總線302的通信接口 318。通信接口 318提供到與本地網(wǎng)絡(luò)322相連接的網(wǎng)絡(luò)鏈路320的雙向數(shù)據(jù)通信耦合。 例如,通信接口 318可以是綜合業(yè)務(wù)數(shù)字網(wǎng)絡(luò)(ISDN)卡或調(diào)制解調(diào)器, 以提供與相應(yīng)類型電話線的數(shù)字通信連接。又例如,通信接口 318可以是 局域網(wǎng)(LAN)卡,以提供與兼容LAN的數(shù)據(jù)通信連接。也可以實(shí)現(xiàn)無 線鏈路。在任何這種實(shí)現(xiàn)方式中,通信接口 318發(fā)送并接收電的、電磁的 或光信號,這些信號攜帶了表示各種類型信息的數(shù)字?jǐn)?shù)據(jù)流。
網(wǎng)絡(luò)鏈路320 —般通過一個或多個網(wǎng)絡(luò)提供到其他數(shù)據(jù)設(shè)備的數(shù)據(jù)通 信。例如,網(wǎng)絡(luò)鏈路320可以通過本地網(wǎng)絡(luò)322提供與主機(jī)計算機(jī)323或 由因特網(wǎng)服務(wù)供應(yīng)商(ISP) 326操作的數(shù)據(jù)設(shè)備的連接。ISP 326進(jìn)而通 過全球分組數(shù)據(jù)通信網(wǎng)絡(luò)(現(xiàn)在通常稱為"因特網(wǎng)")328提供數(shù)據(jù)通信 服務(wù)。本地網(wǎng)絡(luò)322和因特網(wǎng)328都使用攜帶數(shù)字?jǐn)?shù)據(jù)流的電的、電磁的 或光信號。經(jīng)過各種網(wǎng)絡(luò)的信號和在網(wǎng)絡(luò)鏈路320上并經(jīng)過通信接口 318 的信號(這些信號攜帶去往和來自計算機(jī)系統(tǒng)300的數(shù)字?jǐn)?shù)據(jù))是傳輸信 息的載波的示例性形式。
計算機(jī)系統(tǒng)300可以通過(一個或多個)網(wǎng)絡(luò)、網(wǎng)絡(luò)鏈路320和通信 接口 318發(fā)送消息并接收數(shù)據(jù),其中包括程序代碼。在因特網(wǎng)示例中,服 務(wù)器330可以通過因特網(wǎng)328、 ISP 326、本地網(wǎng)絡(luò)322和通信接口 318發(fā) 送針對應(yīng)用程序的請求代碼。
接收到的代碼可以在接收時被處理器304執(zhí)行,和/或被存儲在存儲設(shè) 備310或其他非易失性存儲介質(zhì)中以供以后執(zhí)行。以這種方式,計算機(jī)系 統(tǒng)300可以獲得載波形式的應(yīng)用代碼。
在以上說明書中,已參考對于不同實(shí)現(xiàn)方式可能不同的許多具體細(xì)節(jié) 描述了本發(fā)明的實(shí)施例。因而,關(guān)于本發(fā)明是什么以及申請人希望本發(fā)明 是什么的唯一和排他指示是根據(jù)本申請授權(quán)的那套采取其授權(quán)時的特定形 式的權(quán)利要求,包括任何后續(xù)的更正。這里針對這種權(quán)利要求中包含的術(shù) 語明確闡述的任何限定都應(yīng)當(dāng)決定這種術(shù)語在權(quán)利要求中使用時的含義。 因此,在權(quán)利要求中沒有明確記載的限定、要素、性質(zhì)、特征、優(yōu)點(diǎn)或?qū)?性都不應(yīng)當(dāng)以任何方式限制這種權(quán)利要求的范圍。因此,說明書和附圖被 認(rèn)為是說明性的而不是限制性的。
1權(quán)利要求
1. 一種方法,包括執(zhí)行涉及用于對存儲在數(shù)據(jù)庫中的XML數(shù)據(jù)進(jìn)行更新的指令的由機(jī)器執(zhí)行的操作,其中由機(jī)器執(zhí)行的操作是以下之中的至少一個A)經(jīng)由傳輸介質(zhì)發(fā)送所述指令;B)經(jīng)由傳輸介質(zhì)接收所述指令;C)將所述指令存儲到機(jī)器可讀存儲介質(zhì)上;以及D)執(zhí)行所述指令;其中所述指令是在被一個或多個處理器執(zhí)行時使所述一個或多個處理器執(zhí)行以下步驟的指令接收對以緊湊二進(jìn)制形式存儲在數(shù)據(jù)庫中的XML文檔進(jìn)行修改的請求;計算表征對所述XML文檔的緊湊二進(jìn)制形式的改變的參數(shù),其中所述改變反映所述修改;以及基于所述參數(shù)來對所述XML文檔的緊湊二進(jìn)制形式進(jìn)行所請求的修改。
2. 如權(quán)利要求1所述的方法,其中所述指令是在被一個或多個處理器 執(zhí)行時使所述一個或多個處理器執(zhí)行以下步驟的指令基于所述請求,識別所述XML文檔的被請求修改的一個或多個節(jié) 點(diǎn),包括識別所述緊湊二進(jìn)制形式內(nèi)要應(yīng)用第一改變的起始位置。
3. 如權(quán)利要求2所述的方法,其中計算所述參數(shù)包括計算-表示所述起始位置的目的地偏移量參數(shù),其中所述起始位置被識別為從所述XML文檔的緊湊二進(jìn)制形式的開頭起的字節(jié)數(shù)目偏移量。
4. 如權(quán)利要求2所述的方法,其中計算所述參數(shù)包括計算表征對所述 一個或多個節(jié)點(diǎn)中的全部節(jié)點(diǎn)的修改的單個XML文檔。
5. 如權(quán)利要求2所述的方法,其中對所述XML文檔的修改包括至少 一個節(jié)點(diǎn)插入操作或節(jié)點(diǎn)更新操作,并且計算所述參數(shù)包括目的地偏移量參數(shù),該目的地偏移量參數(shù)指定所述起始位置,其中所述起始位置被識別為從所述XML文檔的緊湊二進(jìn)制形式的開頭起的字節(jié) 數(shù)目偏移量;被改變長度參數(shù),該被改變長度參數(shù)指定所述XML文檔的緊湊二進(jìn) 制形式的用于表示與經(jīng)歷所述節(jié)點(diǎn)插入操作或節(jié)點(diǎn)更新操作的節(jié)點(diǎn)相關(guān)聯(lián) 的舊二進(jìn)制值的字節(jié)的數(shù)目,其中所述舊二進(jìn)制值是由于所述節(jié)點(diǎn)插入操 作或節(jié)點(diǎn)更新操作而被替換的值;新值參數(shù),該新值參數(shù)表示由于所述節(jié)點(diǎn)插入操作或節(jié)點(diǎn)更新操作而 得到的新二進(jìn)制值,其中所述新二進(jìn)制值是在所述XML文檔的緊湊二進(jìn) 制形式中替換所述舊二進(jìn)制值的值;以及新值長度參數(shù),該新值長度參數(shù)指定用于表示所述XML文檔的緊湊 二進(jìn)制形式的該部分的新值的字節(jié)的數(shù)目。
6.如權(quán)利要求5所述的方法,其中對所述XML文檔的緊湊二進(jìn)制形 式進(jìn)行改變包括從所述起始位置處開始,用所述新值來替換所述舊值。
7,如權(quán)利要求1所述的方法,其中計算所述參數(shù)包括計算除了所請求的修改對表示來自所述XML文檔的、基于所述請求 中的路徑名稱表達(dá)而識別以便更新的一個或多個節(jié)點(diǎn)的影響之外,所請求 的修改還如何影響所述XML文檔的緊湊二進(jìn)制形式。
8. 如權(quán)利要求1所述的方法,其中對所述XML文檔的緊湊二進(jìn)制形 式進(jìn)行所請求的修改包括直接對存儲在持續(xù)存儲裝置上的緊湊二進(jìn)制形式 進(jìn)行所請求的修改。
9. 如權(quán)利要求8所述的方法,其中對所述XML文檔的緊湊二進(jìn)制形 式進(jìn)行所請求的修改包括在不構(gòu)造所述XML文檔的對象樹的情況下進(jìn)行 所請求的修改。
全文摘要
XML文檔可以按緊湊二進(jìn)制形式被表示,該緊湊二進(jìn)制形式以可使用形式維持XML數(shù)據(jù)的所有特征。響應(yīng)于對以緊湊二進(jìn)制形式存儲的XML文檔進(jìn)行修改(例如,插入、刪除或更新節(jié)點(diǎn))的請求,所請求的修改的某個表示被計算,以便直接應(yīng)用到XML文檔的二進(jìn)制形式。因而,所請求的修改被直接應(yīng)用到持續(xù)存儲的二進(jìn)制形式,而無需構(gòu)造對象樹或?qū)ML文檔構(gòu)造或具體化為相應(yīng)的文本形式。考慮到用來編碼文檔的二進(jìn)制形式的性質(zhì),識別實(shí)際需要改變的字節(jié),其中包括識別在二進(jìn)制表示中何處需要進(jìn)行相應(yīng)的實(shí)際改變。
文檔編號G06F17/30GK101443766SQ200780017653
公開日2009年5月27日 申請日期2007年4月24日 優(yōu)先權(quán)日2006年5月18日
發(fā)明者尼廷·古塔, 尼普安·阿格爾沃, 拉維·穆爾蒂, 斯萬散科蘭·查卓瑟卡, 艾瑞克·塞德勒 申請人:甲骨文國際公司