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

用于將xml文檔加載到存儲(chǔ)器中的方法和機(jī)制的制作方法

文檔序號(hào):6569913閱讀:238來源:國知局
專利名稱:用于將xml文檔加載到存儲(chǔ)器中的方法和機(jī)制的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及數(shù)據(jù)庫系統(tǒng),且特定來說涉及用于將XML文檔加載到存儲(chǔ)器中的技術(shù)。
技術(shù)背景本部分中描述的方法是可以從事的方法,但不一定是先前已設(shè)想或從事的方法。因 此,除非另外指示,否則不應(yīng)假定本部分中描述的任何方法僅由于其包含在本部分中而 成為現(xiàn)有技術(shù)。結(jié)構(gòu)化數(shù)據(jù)符合類型定義。舉例來說,針對(duì)"人"類型的類型定義可定義例如"名 字"、"生日"、"身高"、"體重"和"性別"等不同屬性。特定類型的每個(gè)"實(shí)例"包括 用于由特定類型定義的屬性中的每一者的單獨(dú)值。舉例來說,"人"類型的實(shí)例可能包 括例如"弗萊德布朗"、"1980年1月1日"、"72英寸"、"240磅"和"男"等值。每個(gè) 屬性也具有類型。舉例來說,"名字"屬性可能是"字符串"類型,"生日"屬性可能是 "日期"類型,且"性別"屬性可能是"枚舉"類型。結(jié)構(gòu)化數(shù)據(jù)可能包括同一類型的 多個(gè)不同實(shí)例??墒褂貌煌椒▽⒔Y(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫中。 一種此類方法稱為"基于語句的路 徑加載"。根據(jù)基于語句的路徑加載方法,客戶端應(yīng)用程序解析包括一類型的一個(gè)或一 個(gè)以上實(shí)例的結(jié)構(gòu)化數(shù)據(jù)。結(jié)構(gòu)化數(shù)據(jù)內(nèi)的值對(duì)應(yīng)于所述類型的屬性??蛻舳藨?yīng)用程序 產(chǎn)生結(jié)構(gòu)化査詢語言(SQL)語句,例如插入命令,其在由數(shù)據(jù)庫服務(wù)器執(zhí)行時(shí)促使數(shù) 據(jù)庫服務(wù)器將值插入到數(shù)據(jù)庫表的相應(yīng)列中。不幸的是,由于其繁重地使用SQL引擎, 因此基于語句的路徑加載常常在性能和存儲(chǔ)器消耗方面出現(xiàn)問題。用于將結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫中的另一方法稱為"直接路徑加載"。通過直接路 徑加載,將結(jié)構(gòu)化數(shù)據(jù)內(nèi)的值直接存儲(chǔ)到數(shù)據(jù)庫中而不促使SQL引擎加載每一行數(shù)據(jù)。 通過咨詢與結(jié)構(gòu)化數(shù)據(jù)相關(guān)聯(lián)的控制文件,客戶端應(yīng)用程序可確定結(jié)構(gòu)化數(shù)據(jù)的實(shí)例的 數(shù)據(jù)類型。如果對(duì)客戶端應(yīng)用程序定義所述類型的結(jié)構(gòu),那么基于所述結(jié)構(gòu),客戶端應(yīng) 用程序可產(chǎn)生對(duì)應(yīng)于所述類型的屬性的陣列??蛻舳藨?yīng)用程序可用對(duì)應(yīng)于所述屬性的值 來填充陣列。 一旦陣列填滿,那么客戶端應(yīng)用程序就可將陣列轉(zhuǎn)換為符合數(shù)據(jù)庫的數(shù)據(jù) 塊格式的數(shù)據(jù)流??蛻舳藨?yīng)用程序接著可將數(shù)據(jù)串流到數(shù)據(jù)庫服務(wù)器,所述數(shù)據(jù)庫服務(wù) 器可將數(shù)據(jù)直接寫入到數(shù)據(jù)庫中的一個(gè)或一個(gè)以上數(shù)據(jù)塊中。直接路徑加載展現(xiàn)出的性4能優(yōu)于基于語句的路徑加載的性能。由控制文件指示的一些類型可以是對(duì)客戶端應(yīng)用程序定義的標(biāo)準(zhǔn)類型,例如標(biāo)量類 型是標(biāo)準(zhǔn)類型的一個(gè)實(shí)例。然而,由控制文件指示的一些類型可能不在對(duì)客戶端應(yīng)用程 序定義的類型中。未對(duì)客戶端應(yīng)用程序定義的類型稱為相對(duì)于客戶端應(yīng)用程序的"不透 明類型",因?yàn)檫@些類型的內(nèi)部結(jié)構(gòu)對(duì)于客戶端應(yīng)用程序是模糊的或未知的。不透明類 型的內(nèi)部結(jié)構(gòu)(包含不透明類型的屬性的數(shù)目和類型)常常僅僅對(duì)實(shí)施不透明類型的程 序定義。不透明類型實(shí)施程序可以在客戶端應(yīng)用程序和數(shù)據(jù)庫服務(wù)器兩者的外部。不透明類型可以是XML類型。XML類型的一實(shí)例提供于第10/259,278號(hào)共同待決 美國專利申請(qǐng)案中。XML方案是描述層級(jí)結(jié)構(gòu)的元數(shù)據(jù)。XML方案的實(shí)例包括符合由 XML方案描述的結(jié)構(gòu)的數(shù)據(jù)。通過結(jié)構(gòu)中表達(dá)的XML元素,XML方案定義一個(gè)或一 個(gè)以上類型。XML文檔是含有一個(gè)或一個(gè)以上符合XML方案的XML元素的文檔。不幸的是, 維持表示XML文檔的XML元素的陣列所需的存儲(chǔ)器的量可能較大。此外,在存儲(chǔ)器中 維持XML文檔的控制文件也需要大量的存儲(chǔ)器,例如在一些情況下,維持XML文檔的 控制文件所需的存儲(chǔ)器的量可能是用以在存儲(chǔ)器中維持相應(yīng)XML文檔的存儲(chǔ)器量的十 倍。因此,客戶端應(yīng)用程序在將XML文檔傳送到持久存儲(chǔ)裝置時(shí)需要大量的存儲(chǔ)器來 將XML文檔加載到存儲(chǔ)器中。此外,以此方式將XML文檔傳送到持久存儲(chǔ)裝置對(duì)于客 戶端應(yīng)用程序來說是CPU非常密集型的,這可能導(dǎo)致性能降級(jí)。因此,一種避免上述問題的用于將XML文檔加載到存儲(chǔ)器中以用于將XML文檔傳 送到持久存儲(chǔ)裝置的方法是有利的。 發(fā)明內(nèi)容無


附圖的圖式中借助于實(shí)例而不是限制來說明本發(fā)明的實(shí)施例,且附圖中相同參考標(biāo)號(hào)指代類似元件,其中圖1是說明根據(jù)本發(fā)明實(shí)施例可將XML文檔加載到存儲(chǔ)器中并傳送到持久存儲(chǔ)裝 置的系統(tǒng)的框圖;圖2是說明根據(jù)本發(fā)明實(shí)施例產(chǎn)生和使用分區(qū)的功能步驟的流程圖;以及 圖3是說明可在上面實(shí)施本發(fā)明實(shí)施例的計(jì)算機(jī)系統(tǒng)的框圖。
具體實(shí)施方式
在以下描述中,出于解釋的目的,陳述許多特定細(xì)節(jié)以提供對(duì)本文論述的本發(fā)明實(shí) 施例的詳盡理解。然而將明了.可在沒有這些特定細(xì)節(jié)的情況下實(shí)踐本文論述的本發(fā)明 實(shí)施例。在其它實(shí)例中,以框圖形式展示眾所周知的結(jié)構(gòu)和裝置,以免不必要地混淆本 文論述的本發(fā)明實(shí)施例。功能概述提供一種用于將XML文檔加載到存儲(chǔ)器中的方法。根據(jù)本文論述的實(shí)施例,可將 大XML文檔的XML元素單獨(dú)加載到客戶端應(yīng)用程序的存儲(chǔ)器中的一個(gè)或一個(gè)以上單獨(dú) 邏輯單元(本文中個(gè)別地表示為分區(qū))中,且隨后可處理存儲(chǔ)器中的分區(qū)(例如,可將 分區(qū)持久存儲(chǔ)在數(shù)據(jù)庫中)而不處理整個(gè)XML文檔。以此方式,客戶端應(yīng)用程序處理 XML文檔所需的存儲(chǔ)器量可最小化,因?yàn)樵谌我庖粋€(gè)時(shí)間僅一部分XML文檔維持在存 儲(chǔ)器中。在一實(shí)施例中,實(shí)施XML類型的實(shí)體用客戶端應(yīng)用程序注冊(cè)一個(gè)或一個(gè)以上與 XML類型相關(guān)聯(lián)的例行程序。通過使用這些例行程序,客戶端應(yīng)用程序?qū)⒁粋€(gè)或一個(gè) 以上陣列元素(其每一者表示XML文檔的一個(gè)XML元素)加載到維持在存儲(chǔ)器中的陣 列的第 分區(qū)中。分區(qū)是用于將數(shù)據(jù)從存儲(chǔ)器傳送到例如數(shù)據(jù)庫的持久存儲(chǔ)裝置的邏輯 單位。根據(jù)一實(shí)施例,分區(qū)可持有數(shù)據(jù)結(jié)構(gòu)的一部分,例如陣列,且可維持識(shí)別出所述 分區(qū)表示數(shù)據(jù)結(jié)構(gòu)的哪- 部分的信息。舉例來說,特定分區(qū)可含有識(shí)別陣列中特定分區(qū) 開始的第一位置的開始點(diǎn)識(shí)別符,以及識(shí)別陣列中特定分區(qū)結(jié)束的第二位置的結(jié)束點(diǎn)識(shí) 別符。一旦確定維持在分區(qū)中的數(shù)據(jù)量超過第一閾值,客戶端應(yīng)用程序就調(diào)用與XML類 型相關(guān)聯(lián)的例行程序來產(chǎn)生陣列中的新分區(qū)。隨后,客戶端應(yīng)用程序?qū)ML文檔的XML 元素加載到陣列的新分區(qū)的陣列元素中。一旦確定維持在客戶端應(yīng)用程序的存儲(chǔ)器中的數(shù)據(jù)量超過第二閾值,客戶端應(yīng)用程 序就將維持在存儲(chǔ)器中的分區(qū)(例如新近最少使用的分區(qū))的陣列元素持久存儲(chǔ)到數(shù)據(jù) 庫。除非已將整個(gè)XML文檔加載到所述單一分區(qū)中,否則存儲(chǔ)XML文檔的一部分而不 持久存儲(chǔ)整個(gè)XML文檔??蛻舳藨?yīng)用程序?qū)⒁源朔绞嚼^續(xù)處理XML文檔的XML元素, 直到最后的XML元素經(jīng)處理為止。當(dāng)XML文檔的最后XML元素加載到陣列的分區(qū)中 時(shí),客戶端應(yīng)用程序?qū)⒕S持在存儲(chǔ)器中的任何分區(qū)持久存儲(chǔ)到數(shù)據(jù)庫,因而促使將整個(gè) XML文檔持久存儲(chǔ)在數(shù)據(jù)庫中。描述了實(shí)施例的高級(jí)概數(shù)之后,下文將描述實(shí)施例的結(jié)構(gòu)的概述。結(jié)構(gòu)概述圖1是說明根據(jù)本發(fā)明實(shí)施例可將XML文檔加載到存儲(chǔ)器中并傳送到持久存儲(chǔ)裝 置的系統(tǒng)IOO的框圖。系統(tǒng)IOO包括客戶端應(yīng)用程序102、數(shù)據(jù)庫服務(wù)器104、數(shù)據(jù)庫 106以及類型實(shí)施程序108A-N。客戶端應(yīng)用程序102、數(shù)據(jù)庫服務(wù)器104以及類型實(shí)施 程序108A-N彼此以通信方式耦合。數(shù)據(jù)庫服務(wù)器104以通信方式耦合到數(shù)據(jù)庫106。客戶端應(yīng)用程序102讀取或另外接收半結(jié)構(gòu)化數(shù)據(jù)118作為輸入。半結(jié)構(gòu)化數(shù)據(jù)118 是符合替代定義的結(jié)構(gòu)而不是單一定義結(jié)構(gòu)的數(shù)據(jù)。半結(jié)構(gòu)化數(shù)據(jù)U8包括一類型的實(shí) 例。舉例來說,半結(jié)構(gòu)化數(shù)據(jù)118可包括符合XML方案(例如,XML文檔)的一個(gè)或 一個(gè)以上XML實(shí)例。半結(jié)構(gòu)化數(shù)據(jù)118還包括類型的識(shí)別信息。舉例來說,可將類型 識(shí)別為XML類型。半結(jié)構(gòu)化數(shù)據(jù)118不指示類型的結(jié)構(gòu)。不對(duì)客戶端應(yīng)用程序102定 義類型的結(jié)構(gòu)??蛻舳藨?yīng)用程序102在客戶端應(yīng)用程序地址空間114中產(chǎn)生陣列116A??蛻舳藨?yīng) 用程序地址空間114包括經(jīng)分配以供客戶端應(yīng)用程序102使用的存儲(chǔ)器區(qū)段??蛻舳藨?yīng) 用程序102通過將陣列元素添加到陣列來填充陣列116A。每個(gè)陣列元素可表示XML文 檔的一個(gè)XML元素??擅看翁畛潢嚵?16A的一個(gè)分區(qū),如下文進(jìn)一步#細(xì)解釋。用于 填充陣列U6A的值中的 些值可在半結(jié)構(gòu)化數(shù)據(jù)118中指定,且其它值可從半結(jié)構(gòu)化 數(shù)據(jù)中指定的值中導(dǎo)出。如加載不透明類型專利中所解釋,類型實(shí)施程序108A-N可向客戶端應(yīng)用程序102 注冊(cè)例行程序,其在調(diào)用時(shí)執(zhí)行涉及陣列U6A的操作。舉例來說,例行程序中的一者 或一者以上可將值存儲(chǔ)在陣列116A的特定分區(qū)中,或可產(chǎn)生新的分區(qū)。經(jīng)調(diào)用的例行 程序可向客戶端應(yīng)用程序102返回一個(gè)或一個(gè)以上指針,所述一個(gè)或一個(gè)以上指針指向 客戶端應(yīng)用程序地址空間114內(nèi)可找到陣列116A的分區(qū)的一個(gè)或一個(gè)以上填充元素的 一個(gè)或一個(gè)以上地址。通過使用所述一個(gè)或一個(gè)以上指針,客戶端應(yīng)用程序102可定位 并讀取陣列116A的分區(qū)的填充行。以此方式,客戶端應(yīng)用程序102可確定加載到特定 分區(qū)中的數(shù)據(jù)量。類型的屬性的一者或一者以上可為指示一個(gè)或一個(gè)以上其它屬性的嵌套類型。舉例 來說,母體類型可能指示作為標(biāo)量類型的第一屬性,以及作為"購買訂單"子類型的第 二屬性。"購買訂單"類型也可能指示若干屬性。在此情況下,與母體類型相關(guān)聯(lián)的例 行程序可調(diào)用與子類型相關(guān)聯(lián)的例行程序??蛻舳藨?yīng)用程序102不需要知道或調(diào)用與子 類型相關(guān)聯(lián)的例行程序。當(dāng)調(diào)用例行程序來描述母體類型的結(jié)構(gòu)時(shí),所述例行程序調(diào)用 另一例行程序來描述子類型的結(jié)構(gòu)。當(dāng)調(diào)用例行程序來產(chǎn)生母體類型的陣列時(shí),所述例 行程序調(diào)用另一例行程序來產(chǎn)生子類型的陣列。當(dāng)調(diào)用例行程序來填充母體類型的陣列時(shí),所述例行程序調(diào)用另一例行程序來填充子類型的陣列。所產(chǎn)生的每個(gè)陣列可能與一 個(gè)或一個(gè)以上分區(qū)相關(guān)聯(lián),如下文所解釋。為了保持母體類型的陣列與任何子類型的陣 列之間的關(guān)系,產(chǎn)生將母體陣列的一行與子陣列的相應(yīng)行鏈接的設(shè)定識(shí)別符并將其存儲(chǔ) 在母體陣列中。分區(qū)的陣列元素的設(shè)定識(shí)別符可存儲(chǔ)在所述分區(qū)中。陣列可彼此獨(dú)立地填充,但在任何 一 個(gè)時(shí)間將僅填充任何 一 個(gè)陣列的單 一 分區(qū),如 下文所解釋??煞峭角要?dú)立地加載和串流陣列。基于分區(qū)的填充行,客戶端應(yīng)用程序102產(chǎn)生數(shù)據(jù)流。陣列的分區(qū)的數(shù)據(jù)流可獨(dú)立 于另一陣列的另一分區(qū)的數(shù)據(jù)流而產(chǎn)生。數(shù)據(jù)流符合數(shù)據(jù)庫106內(nèi)數(shù)據(jù)塊的格式。因此, 客戶端應(yīng)用程序102產(chǎn)生的數(shù)據(jù)流可直接寫入到數(shù)據(jù)庫106而不促使SQL引擎加載每一 行數(shù)據(jù)。客戶端應(yīng)用程序102將數(shù)據(jù)串流到數(shù)據(jù)庫服務(wù)器104。基于一個(gè)陣列產(chǎn)生的流 可獨(dú)立于基于另一陣列產(chǎn)生的流而發(fā)送到數(shù)據(jù)庫服務(wù)器。數(shù)據(jù)庫服務(wù)器104將從客戶端 應(yīng)用程序102接收的數(shù)據(jù)直接寫入到數(shù)據(jù)庫106中的一個(gè)或一個(gè)以上數(shù)據(jù)塊中。數(shù)據(jù)塊是存儲(chǔ)數(shù)據(jù)庫記錄的原子存儲(chǔ)單位。當(dāng)數(shù)據(jù)庫讀取或?qū)懭雭碜詳?shù)據(jù)庫的記錄 時(shí),從持久存儲(chǔ)裝置讀取或?qū)懭氲匠志么鎯?chǔ)裝置的最小數(shù)據(jù)單位是數(shù)據(jù)庫塊。通常,數(shù) 據(jù)塊存儲(chǔ)在緩沖系統(tǒng)的緩沖器中的存儲(chǔ)器中。數(shù)據(jù)塊不僅可含有記錄而且可含有用于處 理數(shù)據(jù)塊內(nèi)的數(shù)據(jù)的控制信息。關(guān)于如何將XML元素加載到維持在存儲(chǔ)器中的陣列中的額外細(xì)節(jié)提供于加載不透 明類型專利中。描述可實(shí)施一實(shí)施例的說明性結(jié)構(gòu)之后,下文將進(jìn)一步詳細(xì)描述產(chǎn)生和 使用分區(qū)的過程。產(chǎn)生和使用分區(qū)圖2是說明根據(jù)本發(fā)明實(shí)施例產(chǎn)生和使用分區(qū)的功能步驟的流程圖。通過執(zhí)行圖2 的功能步驟,可通過建立特定閾值來減少將XML文檔加載到存儲(chǔ)器中的存儲(chǔ)器要求, 所述閾值在被超過時(shí)觸發(fā)對(duì)維持在存儲(chǔ)器中的分區(qū)的處理。可使用直接路徑加載技術(shù)從 存儲(chǔ)器持久存儲(chǔ)分區(qū)。因此,本文描述的技術(shù)提供用于將大XML文檔加載到存儲(chǔ)器中 的較可縮放的方法。此外,由于存儲(chǔ)器限制而先前無法加載到存儲(chǔ)器中的某些XML文 檔可使用圖2的技術(shù)加載到存儲(chǔ)器中,因?yàn)樵趩我粫r(shí)間僅XML文檔的若干部分被加載 到存儲(chǔ)器中。將參看圖l解釋圖2的功能步驟。在步驟210中,類型實(shí)施程序向客戶端應(yīng)用程序102注冊(cè)一個(gè)或一個(gè)以上例行程序, 如上文所描述。舉例來說,類型實(shí)施程序108A可向客戶端應(yīng)用程序102A注冊(cè)例行程 序IIOAA-AN。例行程序UOAA-AN中的一者或一者以上可執(zhí)行以下功能(a)在由客 戶端應(yīng)用程序102維持在存儲(chǔ)器中的陣列內(nèi)產(chǎn)生新分區(qū),以及(b)將表示XML文檔的8XML元素的行填充到陣列的特定分區(qū)中。在向客戶端應(yīng)用程序102注冊(cè)一個(gè)或一個(gè)以 上例行程序之后,處理進(jìn)行到步驟220。在步驟220中,客戶端應(yīng)用程序102處理XML文檔。在步驟220中,客戶端應(yīng)用 程序102可通過將XML文檔的XML元素加載到維持在存儲(chǔ)器中的一個(gè)或一個(gè)以上分區(qū) 中,并將分區(qū)從存儲(chǔ)器持久存儲(chǔ)到數(shù)據(jù)庫106,來處理XML文檔??稍趯⒄麄€(gè)XML文 檔加載到存儲(chǔ)器中之前從存儲(chǔ)器持久存儲(chǔ)分區(qū),以使額外存儲(chǔ)器可用于將XML文檔的 更多XML元素加載到存儲(chǔ)器中的分區(qū)中。下文將進(jìn)一步詳細(xì)描述步驟220的執(zhí)行。在步驟222中,客戶端應(yīng)用程序102可通過如上所述調(diào)用與XML文檔的XML類型 相關(guān)聯(lián)的例行程序在存儲(chǔ)器中產(chǎn)生一個(gè)或一個(gè)以上陣列,來處理XML文檔。可針對(duì)單 一 XML文檔產(chǎn)生多個(gè)陣列。舉例來說,當(dāng)調(diào)用例行程序來產(chǎn)生針對(duì)具有子類型的母體 類型的陣列時(shí),所述例行程序調(diào)用另一例行程序來產(chǎn)生子類型的陣列。 一旦在用于XML 文檔的存儲(chǔ)器中產(chǎn)生陣列,客戶端應(yīng)用程序102就可通過如上所述調(diào)用與XML文檔的 XML類型相關(guān)聯(lián)的例行程序來產(chǎn)生陣列的分區(qū)??蛻舳藨?yīng)用程序102將陣列元素每次 僅加載到特定陣列的一個(gè)分區(qū)。在存儲(chǔ)器中產(chǎn)生分區(qū)和陣列之后,客戶端應(yīng)用程序102從XML文檔讀取XML元素。 客戶端應(yīng)用程序102接著將XML元素加載到維持在存儲(chǔ)器中的適當(dāng)分區(qū)中。客戶端應(yīng) 用程序102接著可執(zhí)行步驟224和226。在執(zhí)行步驟224和226之后,客戶端應(yīng)用程序 102接著可重復(fù)執(zhí)行(a)將XML元素從XML文檔加載到存儲(chǔ)器中的分區(qū)中,以及(b) 執(zhí)行步驟224和226,直到XML文檔的所有XML元素都已加載到存儲(chǔ)器中的分區(qū)中為 止?;蛘?,客戶端應(yīng)用程序102可在將兩個(gè)或兩個(gè)以上XML元素從XML文檔讀取到分 區(qū)中之后執(zhí)行步驟224和226中的一者或一者以上。在步驟224中,客戶端應(yīng)用程序102確定陣列的特定分區(qū)("完全分區(qū)")中維持的 數(shù)據(jù)量是否超過閾值("分區(qū)大小閾值")。如果客戶端應(yīng)用程序102確定陣列的完全分 區(qū)中維持的數(shù)據(jù)量確實(shí)超過分區(qū)大小閾值,那么客戶端應(yīng)用程序102通過如上所述調(diào)用 與XML文檔的XML類型相關(guān)聯(lián)的一個(gè)或一個(gè)以上例行程序來產(chǎn)生陣列的新分區(qū)。隨后, 當(dāng)客戶端應(yīng)用程序?qū)ML文檔的XML元素加載到陣列中時(shí),客戶端應(yīng)用程序102將 XML元素加載到陣列的新分區(qū)中而不是陣列的完全分區(qū)中。在一實(shí)施例中,客戶端應(yīng)用程序102可使用由客戶端應(yīng)用程序102調(diào)用的被例行程 序返回以產(chǎn)生分區(qū)的指向分區(qū)的指針來確定是否已超過一特定分區(qū)的完全分區(qū)閾值。通 過使用指向分區(qū)的指針,客戶端應(yīng)用程序102可定位并讀取分區(qū)的行,以確定特定分區(qū) 中維持的數(shù)據(jù)量是否超過分區(qū)大小閾值。分區(qū)大小閾值可由用戶配置,或者其可基于客戶端應(yīng)用程序102的總存儲(chǔ)器量而動(dòng) 態(tài)確定??芍辽俨糠只趯⒈患虞d到數(shù)據(jù)庫106內(nèi)的分區(qū)或位置(被加載入所述分區(qū)的數(shù)據(jù) 將最終存儲(chǔ)在其中)中的數(shù)據(jù)類型來動(dòng)態(tài)地確定(在步驟222或步驟224中)所產(chǎn)生的 每個(gè)分區(qū)的大小。舉例來說,分區(qū)的大小可基于XML文檔內(nèi)重復(fù)元素的存在。重復(fù)元 素是XML文檔內(nèi)相同XML元素的多個(gè)實(shí)例。為了說明,如果XML文檔對(duì)應(yīng)于賬單, 那么賬單的行式項(xiàng)目可為重復(fù)元素,因?yàn)樾惺巾?xiàng)目是相同類型的數(shù)據(jù)(在此情況下為賬 單的項(xiàng)目)的多個(gè)實(shí)例。有利的做法是將對(duì)應(yīng)于那些行式項(xiàng)目的XML元素存儲(chǔ)在單一 分區(qū)中以使數(shù)據(jù)庫106內(nèi)存儲(chǔ)加載到分區(qū)中的數(shù)據(jù)所需的表格量最少。因此,可確定分 區(qū)的大小以確保加載到分區(qū)中的XML數(shù)據(jù)將被存儲(chǔ)在數(shù)據(jù)庫106中的最少量的表格中。 而且,可至少部分基于XML文檔內(nèi)的重復(fù)XML元素的數(shù)目來確定分區(qū)的大小,進(jìn)而增 加加載到分區(qū)中的所有XML元素將存儲(chǔ)在同一表格中或以類似方式存儲(chǔ)在數(shù)據(jù)庫106 中的可能性。另外,當(dāng)客戶端應(yīng)用程序102調(diào)用例行程序以將XML文檔的XML元素添加到陣列 的分區(qū)時(shí),例行程序的邏輯可在確定如何將XML元素添加到陣列時(shí)考慮XML文檔的 XML方案。舉例來說,如果將陣列的第一分區(qū)的陣列元素映射到第一表格,且請(qǐng)求將 添加到陣列的XML元素映射到第二表格,那么例行程序的邏輯可產(chǎn)生新分區(qū),且促使 將XML元素添加到新分區(qū)。以此方式,例行程序可考慮XML方案的XML元素到數(shù)據(jù) 庫106內(nèi)的表格之間的映射,以確定應(yīng)將XML元素添加到陣列的現(xiàn)有分區(qū)還是應(yīng)替代 地產(chǎn)生新分區(qū),其中當(dāng)客戶端應(yīng)用程序102調(diào)用例行程序以將XML元素添加到陣列的 分區(qū)時(shí)應(yīng)添加XML元素。在步驟226中,客戶端應(yīng)用程序102確定維持在客戶端應(yīng)用程序102的存儲(chǔ)器中的 數(shù)據(jù)量是否超過閾值("存儲(chǔ)器大小閾值")。如果客戶端應(yīng)用程序102確定客戶端應(yīng)用 程序102的存儲(chǔ)器確實(shí)超過存儲(chǔ)器大小閾值,那么客戶端應(yīng)用程序持久存儲(chǔ)維持在存儲(chǔ) 器中的分區(qū),例如,客戶端應(yīng)用程序102可將維持在存儲(chǔ)器中的新近最少使用的分區(qū)持 久存儲(chǔ)到數(shù)據(jù)庫106,但可使用其它算法來確定由客戶端應(yīng)用程序102維持在存儲(chǔ)器中 的哪一分區(qū)應(yīng)持久存儲(chǔ)到數(shù)據(jù)庫106。在將單一分區(qū)的陣列元素持久存儲(chǔ)在數(shù)據(jù)庫106 中時(shí),客戶端應(yīng)用程序持久存儲(chǔ)XML文檔的一部分而不持久存儲(chǔ)整個(gè)XML文檔(除非 整個(gè)XML文檔可存儲(chǔ)在單一分區(qū)內(nèi))。在步驟226中,如果客戶端應(yīng)用程序102確定XML文檔的最后XML元素已加載到 存儲(chǔ)器中分區(qū)的陣列元素中,那么客戶端應(yīng)用程序102可促使將維持在存儲(chǔ)器中的所有分區(qū)都持久存儲(chǔ)在數(shù)據(jù)庫106中。以此方式,在整個(gè)XML文檔已經(jīng)處理之后,存儲(chǔ)器 中的所有分區(qū)持久存儲(chǔ)到數(shù)據(jù)庫106以促使持久存儲(chǔ)XML文檔的當(dāng)前未持久存儲(chǔ)的任 何部分。當(dāng)分區(qū)準(zhǔn)備好被持久存儲(chǔ)到數(shù)據(jù)庫106時(shí),客戶端應(yīng)用程序102可從經(jīng)填充分區(qū)產(chǎn) 生數(shù)據(jù)流。數(shù)據(jù)流符合數(shù)據(jù)庫106內(nèi)數(shù)據(jù)塊的格式。因此,由客戶端應(yīng)用程序102產(chǎn)生 的數(shù)據(jù)流可例如使用單一批次插入SQL操作直接寫入到數(shù)據(jù)庫106而不促使SQL引擎 加載每一行數(shù)據(jù)。客戶端應(yīng)用程序102將數(shù)據(jù)串流到數(shù)據(jù)庫服務(wù)器104?;谝粋€(gè)陣列 產(chǎn)生的流可獨(dú)立于基于另一陣列產(chǎn)生的流而發(fā)送到數(shù)據(jù)庫服務(wù)器。數(shù)據(jù)庫服務(wù)器104將 從客戶端應(yīng)用程序102接收的數(shù)據(jù)直接寫入到數(shù)據(jù)庫106中的一個(gè)或一個(gè)以上數(shù)據(jù)塊 中。作為寫入的結(jié)果,對(duì)應(yīng)于數(shù)據(jù)庫表中的隱藏列的陣列列中的值存儲(chǔ)在相應(yīng)的隱藏列 中。由分區(qū)維持的額外信息可連同陣列元素一起被轉(zhuǎn)移到數(shù)據(jù)庫106,所述額外信息例 如(a)分區(qū)的開始點(diǎn)識(shí)別符,(b)分區(qū)的結(jié)束點(diǎn)識(shí)別符,以及(c)如果分區(qū)與母體陣 列相關(guān)聯(lián),那么一個(gè)或一個(gè)以上設(shè)定識(shí)別符。以此方式,當(dāng)XML元素持久存儲(chǔ)在數(shù)據(jù) 庫106中時(shí)可維持XML文檔的XML元素之間的關(guān)系。在實(shí)施例中,每個(gè)分區(qū)具有其自身的存儲(chǔ)器單位。分區(qū)的所有陣列元素均使用來 自分區(qū)的存儲(chǔ)器單位的存儲(chǔ)器。當(dāng)構(gòu)造新分區(qū)時(shí),產(chǎn)生新的存儲(chǔ)器單位。當(dāng)分區(qū)轉(zhuǎn)移到 持久存儲(chǔ)裝置(例如數(shù)據(jù)庫106)時(shí),由所述分區(qū)占用的存儲(chǔ)器可釋放。此存儲(chǔ)器可由 后續(xù)分區(qū)使用,進(jìn)而使對(duì)存儲(chǔ)器中的XML文檔執(zhí)行操作所需的存儲(chǔ)器量最少。在一實(shí)施例中,替代于將整個(gè)控制文件加載到存儲(chǔ)器中,可僅將控制文件的對(duì)應(yīng)于 當(dāng)前由客戶端應(yīng)用程序102處理的XML元素的一部分加載到存儲(chǔ)器中。客戶端應(yīng)用程 序102可調(diào)用例行程序來確定應(yīng)將控制文件的哪些部分加載到存儲(chǔ)器中。實(shí)施機(jī)制在一實(shí)施例中,客戶端應(yīng)用程序102、數(shù)據(jù)庫服務(wù)器104、數(shù)據(jù)庫106以及類型實(shí) 施程序108A-108N每一者可實(shí)施在計(jì)算機(jī)系統(tǒng)上。圖3是說明上面可實(shí)施本發(fā)明實(shí)施例 的計(jì)算機(jī)系統(tǒng)300的框圖。計(jì)算機(jī)系統(tǒng)300包含用于傳送信息的總線302或其它通信機(jī) 制,以及用于處理信息的與總線302耦合的處理器304。計(jì)算機(jī)系統(tǒng)300還包含主存儲(chǔ) 器306,例如隨機(jī)存取存儲(chǔ)器(RAM)或其它動(dòng)態(tài)存儲(chǔ)裝置,其耦合到總線302以用于 存儲(chǔ)將由處理器304執(zhí)行的信息和指令。主存儲(chǔ)器306還可用于在將由處理器304執(zhí)行 的指令的執(zhí)行期間存儲(chǔ)臨時(shí)變量或其它中間信息。計(jì)算機(jī)系統(tǒng)300進(jìn)一步包含耦合到總 線302的用于為處理器304存儲(chǔ)靜態(tài)信息和指令的只讀存儲(chǔ)器(ROM) 308或其它靜態(tài)存儲(chǔ)裝置。提供例如磁盤或光盤等存儲(chǔ)裝置310,且其耦合到總線302用于存儲(chǔ)信息和 指令。計(jì)算機(jī)系統(tǒng)300可經(jīng)由總線302耦合到顯示器312 (例如陰極射線管(CRT))以用 于向計(jì)算機(jī)用戶顯示信息。包含字母數(shù)字和其它鍵的輸入裝置314耦合到總線302以用 于將信息和命令選擇傳送到處理器304。另一類型的用戶輸入裝置是光標(biāo)控制316,例 如鼠標(biāo)、跟蹤球或光標(biāo)方向鍵,其用于將方向信息和命令選擇傳送到處理器304且用于 控制顯示器312上的光標(biāo)移動(dòng)。此輸入裝置通常具有在兩個(gè)軸(第一軸(例如x)和第 二軸(例如y))上的兩個(gè)自由度,其允許裝置指定平面中的位置。本發(fā)明涉及使用計(jì)算機(jī)系統(tǒng)300來實(shí)施本文描述的技術(shù)。根據(jù)本發(fā)明的一個(gè)實(shí)施例, 計(jì)算機(jī)系統(tǒng)300響應(yīng)于處理器304執(zhí)行維持在主存儲(chǔ)器306中的一個(gè)或一個(gè)以上指令的 一個(gè)或一個(gè)以上序列來執(zhí)行所述技術(shù)。這些指令可從另一機(jī)器可讀媒體(例如存儲(chǔ)裝置 310)讀取到主存儲(chǔ)器306中。維持在主存儲(chǔ)器306中的指令序列的執(zhí)行促使處理器304 執(zhí)行本文描述的過程步驟。在替代實(shí)施例中,可代替軟件指令或與軟件指令組合來使用 硬連線電路以實(shí)施本發(fā)明。因此,本發(fā)明的實(shí)施例不限于硬件電路與軟件的任何特定組合。本文使用的術(shù)語"機(jī)器可讀媒體"指代參與提供促使機(jī)器以特定方式操作的數(shù)據(jù)的 任何媒體。在使用計(jì)算機(jī)系統(tǒng)300實(shí)施的實(shí)施例中,涉及各種機(jī)器可讀媒體以(例如) 將指令提供到處理器304供執(zhí)行。此媒體可采用許多形式,包含(但不限于)非易失性 媒體、易失性媒體以及傳輸媒體。非易失性媒體包含(例如)光盤或磁盤,例如存儲(chǔ)裝 置310。易失性媒體包含動(dòng)態(tài)存儲(chǔ)器,例如主存儲(chǔ)器306。傳輸媒體包含同軸電纜、銅 線以及光纖,包含包括總線302的電線。傳輸媒體也可采用聲波或光波的形式,例如在 無線電波和紅外線數(shù)據(jù)通信期間產(chǎn)生的那些波。所有這些媒體必須確實(shí)地使得由媒體載 運(yùn)的指令能夠由將指令讀取到機(jī)器中的物理機(jī)制檢測到。機(jī)器可讀媒體的常用形式包含(例如)軟盤、柔性盤、硬盤、磁帶或任何其它磁性 媒體、CD-ROM、任何其它光學(xué)媒體、穿孔卡、紙帶、任何其它具有孔圖案的物理媒體、 RAM、 PROM和EPROM、快閃EPROM、任何其它存儲(chǔ)器芯片或盒式磁盤、下文描述 的載波,或計(jì)算機(jī)可從其中進(jìn)行讀取的任何其它媒體。各種形式的機(jī)器可讀媒體可參與將一個(gè)或一個(gè)以上指令的一個(gè)或一個(gè)以上序列載 運(yùn)到處理器304供執(zhí)行。舉例來說,指令可初始載運(yùn)在遠(yuǎn)程計(jì)算機(jī)的磁盤上。遠(yuǎn)程計(jì)算 機(jī)可將指令加載到其動(dòng)態(tài)存儲(chǔ)器中并使用調(diào)制解調(diào)器經(jīng)由電話線發(fā)送指令。計(jì)算機(jī)系統(tǒng) 300本地的調(diào)制解調(diào)器可接收電話線上的數(shù)據(jù)并使用紅外發(fā)射器將數(shù)據(jù)轉(zhuǎn)換為紅外信號(hào)。紅外檢測器可接收紅外信號(hào)中載運(yùn)的數(shù)據(jù),且適當(dāng)電路可將數(shù)據(jù)放置在總線302上。 總線302將數(shù)據(jù)載運(yùn)到主存儲(chǔ)器306,處理器304從主存儲(chǔ)器306檢索并執(zhí)行指令。主 存儲(chǔ)器306接收的指令可視需要在由處理器304執(zhí)行之前或之后存儲(chǔ)在存儲(chǔ)裝置310上。計(jì)算機(jī)系統(tǒng)300還包含耦合到總線302的通信接口 318。通信接口 318提供耦合到 網(wǎng)絡(luò)鏈路320的雙向數(shù)據(jù)通信,網(wǎng)絡(luò)鏈路320連接到本地網(wǎng)絡(luò)322。舉例來說,通信接 口 318可為綜合服務(wù)數(shù)字網(wǎng)絡(luò)(ISDN)卡或調(diào)制解調(diào)器以提供到達(dá)相應(yīng)類型的電話線的 數(shù)據(jù)通信連接。作為另一實(shí)例,通信接口 318可為局域網(wǎng)(LAN)卡以提供到達(dá)兼容LAN 的數(shù)據(jù)通信連接。也可實(shí)施無線鏈路。在任何此種實(shí)施方案中,通信接口318發(fā)送和接 收電、電磁或光學(xué)信號(hào),其載運(yùn)表示各種類型的信息的數(shù)字?jǐn)?shù)據(jù)流。網(wǎng)絡(luò)鏈路320通常提供通過一個(gè)或一個(gè)以上網(wǎng)絡(luò)到其它數(shù)據(jù)裝置的數(shù)據(jù)通信。舉例 來說,網(wǎng)絡(luò)鏈路320可提供通過本地網(wǎng)絡(luò)322到主機(jī)計(jì)算機(jī)324或到由因特網(wǎng)服務(wù)提供 商(ISP) 326操作的數(shù)據(jù)設(shè)備的連接。ISP326又通過現(xiàn)在通常稱為"因特網(wǎng)"328的全 球分組數(shù)據(jù)通信網(wǎng)絡(luò)提供數(shù)據(jù)通信服務(wù)。本地網(wǎng)絡(luò)322和因特網(wǎng)328均使用載運(yùn)數(shù)字?jǐn)?shù) 據(jù)流的電、電磁或光學(xué)信號(hào)。通過各種網(wǎng)絡(luò)的信號(hào)以及網(wǎng)絡(luò)鏈路320上和通過通信接口 318的信號(hào)(其載運(yùn)到達(dá)和來自計(jì)算機(jī)系統(tǒng)300的數(shù)字?jǐn)?shù)據(jù))是傳送信息的載波的示范 性形式。計(jì)算機(jī)系統(tǒng)300可通過網(wǎng)絡(luò)、網(wǎng)絡(luò)鏈路320和通信接口 318發(fā)送消息和接收數(shù)據(jù)(包 含程序碼)。在因特網(wǎng)實(shí)例中,服務(wù)器330可能通過因特網(wǎng)328、 ISP 326、本地網(wǎng)絡(luò)322 和通信接口 318傳輸所請(qǐng)求的應(yīng)用程序碼。所接收的碼當(dāng)被接收時(shí)可由處理器304執(zhí)行,和/或存儲(chǔ)在存儲(chǔ)裝置310或其它非易 失性存儲(chǔ)裝置中用于稍后執(zhí)行。以此方式,計(jì)算機(jī)系統(tǒng)300可獲得載波形式的應(yīng)用程序 碼。在以上說明書中,已參考可在實(shí)施方案之間變化的許多特定細(xì)節(jié)描述了本發(fā)明的實(shí) 施例。因此,關(guān)于本發(fā)明的本質(zhì)是什么以及本申請(qǐng)人期望本發(fā)明的本質(zhì)是什么的唯一且 專門指示是本申請(qǐng)案所發(fā)布的一組權(quán)利要求(以此類權(quán)利要求發(fā)布的特定形式),包含 任何后續(xù)修正。本文針對(duì)此類權(quán)利要求中所含有的術(shù)語而明確陳述的任何定義將決定權(quán) 利要求中所使用的此類術(shù)語的含義。因此,權(quán)利要求中未明確敘述的限制、元件、特性、 特征、優(yōu)點(diǎn)或?qū)傩跃粦?yīng)以任何方式限制此權(quán)利要求的范圍。因此,應(yīng)在說明性而非限 制性的意義上看待說明書和附圖。1權(quán)利要求
1.一種方法,其包括執(zhí)行涉及指令的機(jī)器執(zhí)行操作,其中所述機(jī)器執(zhí)行操作是以下幾者中的至少一者A)經(jīng)由傳輸媒體發(fā)送所述指令;B)經(jīng)由傳輸媒體接收所述指令;C)將所述指令存儲(chǔ)到機(jī)器可讀存儲(chǔ)媒體上;以及D)執(zhí)行所述指令;其中所述指令是當(dāng)由一個(gè)或一個(gè)以上處理器執(zhí)行時(shí)引起以下操作的指令在客戶端處,存儲(chǔ)表示存儲(chǔ)器中的分區(qū)中維持的至少一個(gè)XML元素的數(shù)據(jù),所述至少一個(gè)XML元素僅對(duì)應(yīng)于XML文檔的一部分;以及在確定所述客戶端的所述存儲(chǔ)器中維持的數(shù)據(jù)量超過閾值時(shí),向數(shù)據(jù)庫服務(wù)器傳輸將所述分區(qū)中的數(shù)據(jù)存儲(chǔ)在所述數(shù)據(jù)庫中的請(qǐng)求。
2. 根據(jù)權(quán)利要求1所述的方法,其中所述分區(qū)是第一分區(qū),其中所述閾值是第一閾值, 且其中所述指令的執(zhí)行進(jìn)一步引起在確定所述第一分區(qū)中維持的數(shù)據(jù)量超過第二閾值時(shí),(a)產(chǎn)生所述陣列的不同 于所述第一分區(qū)的新分區(qū),以及(b)隨后將陣列元素加載到所述陣列的所述新分 區(qū)中。
3. 根據(jù)權(quán)利要求1所述的方法,其中所述指令的執(zhí)行進(jìn)一步引起至少部分基于(a)所述客戶端的可用存儲(chǔ)器或(b)所述數(shù)據(jù)庫內(nèi)所述分區(qū)的所 述陣列元素將被存儲(chǔ)的位置,來確定所述分區(qū)的大小。
4. 根據(jù)權(quán)利要求1所述的方法,其中所述指令的執(zhí)行進(jìn)一步引起至少部分基于所述XML文檔內(nèi)的重復(fù)XML元素的數(shù)目來確定所述分區(qū)的大小。
5. 根據(jù)權(quán)利要求1所述的方法,其中所述請(qǐng)求指定存儲(chǔ)符合由所述數(shù)據(jù)庫服務(wù)器管理 的數(shù)據(jù)庫的數(shù)據(jù)塊格式的數(shù)據(jù)流。
6. 根據(jù)權(quán)利要求1所述的方法,其中使用單一批次INSERT SQL操作來執(zhí)行持久存儲(chǔ) 所述分區(qū)的所述陣列元素。
7. 根據(jù)權(quán)利要求1所述的方法,其中持久存儲(chǔ)所述分區(qū)的所述陣列元素進(jìn)一步包括-確定所述分區(qū)是所述客戶端的所述存儲(chǔ)器中維持的分區(qū)集合中的最不新近分區(qū)。
8. 根據(jù)權(quán)利要求1所述的方法,其中所述指令的執(zhí)行進(jìn)一步引起在持久存儲(chǔ)所述分區(qū)的所述陣列元素之后,停止在所述客戶端的所述存儲(chǔ)器中維持所述分區(qū)。
9. 一種方法,其包括執(zhí)行涉及指令的機(jī)器執(zhí)行操作,其中所述機(jī)器執(zhí)行操作是以下幾 者中的至少一者A) 經(jīng)由傳輸媒體發(fā)送所述指令;B) 經(jīng)由傳輸媒體接收所述指令;C) 將所述指令存儲(chǔ)到機(jī)器可讀存儲(chǔ)媒體上;以及D) 執(zhí)行所述指令;其中所述指令是在由一個(gè)或一個(gè)以上處理器執(zhí)行時(shí)引起以下操作的指令-在客戶端處,將一個(gè)或一個(gè)以上陣列元素加載到存儲(chǔ)器中維持的陣列的分區(qū) 中,其中所述一個(gè)或一個(gè)以上陣列元素的每個(gè)陣列元素表示XML文檔的一個(gè) XML元素;以及在確定所述客戶端的所述存儲(chǔ)器中維持的數(shù)據(jù)量超過閾值時(shí),將所述分區(qū)的所 述陣列元素持久存儲(chǔ)在數(shù)據(jù)庫中而不持久存儲(chǔ)所述整個(gè)XML文檔。
全文摘要
本發(fā)明提供一種用于將XML文檔加載到存儲(chǔ)器中的方法和設(shè)備??蛻舳藢⒁粋€(gè)或一個(gè)以上陣列元素加載到存儲(chǔ)器中維持的陣列的第一分區(qū)中。每個(gè)陣列元素表示XML文檔的一個(gè)XML元素。在確定所述第一分區(qū)中維持的數(shù)據(jù)量超過第一閾值時(shí),所述客戶端隨后將陣列元素加載到所述陣列的新分區(qū)中。在確定所述客戶端的所述存儲(chǔ)器中維持的數(shù)據(jù)量超過第二閾值時(shí),將新近最少使用的分區(qū)的陣列元素持久存儲(chǔ)在數(shù)據(jù)庫中而不持久存儲(chǔ)所述整個(gè)XML文檔。當(dāng)將所述XML文檔的最后XML元素加載到所述陣列的分區(qū)中時(shí),將所述分區(qū)持久存儲(chǔ)在所述數(shù)據(jù)庫中,進(jìn)而促使將所述整個(gè)XML文檔存儲(chǔ)在所述數(shù)據(jù)庫中。
文檔編號(hào)G06F17/22GK101326519SQ200680046090
公開日2008年12月17日 申請(qǐng)日期2006年11月29日 優(yōu)先權(quán)日2005年12月22日
發(fā)明者尼普恩·阿加瓦爾, 拉維·穆爾蒂, 納米特·賈殷, 西瓦桑卡蘭·錢德拉塞卡爾 申請(qǐng)人:甲骨文國際公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
阿图什市| 将乐县| 海晏县| 阳新县| 丰宁| 九寨沟县| 汝阳县| 左权县| 永嘉县| 武威市| 仁怀市| 丰原市| 泸水县| 永福县| 景宁| 灌云县| 龙川县| 华阴市| 肃北| 治多县| 保定市| 大连市| 奉贤区| 宜丰县| 浦东新区| 连城县| 吉安市| 西平县| 宿迁市| 宜川县| 景泰县| 平安县| 镶黄旗| 建宁县| 南昌市| 峡江县| 乐东| 梁河县| 成安县| 丰台区| 泽普县|