偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

利用DB2 pureXML管理XML數(shù)據(jù)實(shí)踐

數(shù)據(jù)庫(kù) 數(shù)據(jù)庫(kù)運(yùn)維
本文為使用DB2 pureXML來(lái)有效的解決商業(yè)問(wèn)題和在企業(yè)應(yīng)用程序中高性能的管理XML數(shù)據(jù)提供了原理和指南。在樣例中舉例說(shuō)明了基于真實(shí)世界金融應(yīng)用場(chǎng)景的最佳實(shí)踐,并示范了如果執(zhí)行這個(gè)指南。這個(gè)例子可以很容易被應(yīng)用于其它類型的XML應(yīng)用程序。下面是一些本文中的最佳實(shí)踐的描述。

XML 數(shù)據(jù)用于提高性能和存儲(chǔ)有效性的存儲(chǔ)選項(xiàng)

◆對(duì) DB2 DMS 表空間啟用自動(dòng)存儲(chǔ)。

◆為 XML 數(shù)據(jù)使用更大的頁(yè)大小,比如 16KB 或 32KB 。

◆如果性能分析需要,就為 XML 數(shù)據(jù)選擇一個(gè)不同的表空間頁(yè)大小。

◆很多 XML 文檔足夠小并且能和其它 non-XML 數(shù)據(jù)存在數(shù)據(jù)頁(yè)上,就為 XML 文檔使用內(nèi) 嵌存儲(chǔ)。否則文檔存放在表之外,類似于 LOBs,并且通過(guò)區(qū)域索引來(lái)訪問(wèn)。

◆使用壓縮來(lái)減少 XML 文檔以 inline 方式存放時(shí)的空間大小。

在 DB2 數(shù)據(jù)庫(kù)中添加 XML 數(shù)據(jù)的技術(shù)

◆為了提高你在使用 insert、import 或 load 添加數(shù)據(jù)時(shí)的性能,

◆使用使用較大頁(yè)大小的 DMS 表空間,比如 16KB 或 32KB 。

◆提供足夠的緩沖池空間以支持 XML 區(qū)域索引和路徑索引的讀取。

◆如果你有多個(gè)用戶定義的 XML 索引,通常最好在添加數(shù)據(jù)之前定義它們。

◆如果有必要,把行抽取選中的 XML 元素值放入到和 XML 文檔相同的關(guān)系列中。關(guān)系列 中存放的數(shù)據(jù)允許簡(jiǎn)單、SQL-only 的形式來(lái)訪問(wèn)重要的數(shù)據(jù)或經(jīng)常訪問(wèn)數(shù)據(jù)條目、可以定義 主鍵、外鍵或其它約束、以及可以定義多列(組合鍵)關(guān)系索引。

◆如果更小的片段更適合數(shù)據(jù)訪問(wèn)的粒度,就把大型 XML 文檔分割成更小的片段。

◆定義觸發(fā)器來(lái)對(duì)插入和更新 XML 數(shù)據(jù)進(jìn)行自動(dòng)驗(yàn)證

有效查詢并更新 XML 文檔的技術(shù):

◆使用 SQL/XML 函數(shù) XMLTABLE 或 XMLQUERY 來(lái)從 XML 文檔中抽取數(shù)據(jù)。

◆在SQL WHERE 子句中使用 XMLEXISTE 謂詞來(lái)指定對(duì) XML 數(shù)據(jù)的謂詞 ,通過(guò)檢查更少的行來(lái)提高查詢性能。

◆使用一個(gè)完全指定的 XML 路徑,而不要使用通配符 * 或 // 來(lái)定位到期望的 XML 元素 。這樣做可以提供更好的性能,因?yàn)?DB2 可以跳過(guò) XML 文檔中不相關(guān)的部分直接找到期望的 XML 元素。

◆出于增加商業(yè)洞察力和最大化一個(gè)混合數(shù)據(jù)庫(kù)服務(wù)器的價(jià)值的需要,你在查詢中需要要 對(duì) XML 和關(guān)系數(shù)據(jù)進(jìn)行連接。

◆當(dāng)在一個(gè) XML 文檔中更新多個(gè)元素時(shí),把更新合并到一個(gè)轉(zhuǎn)換描述中以獲得最佳的更新 性能

◆在查詢中聲明名稱空間,更新 XML 索引以匹配你的 XML 商業(yè)數(shù)據(jù)。這個(gè)讓你能從多個(gè) 或復(fù)雜的域中處理 XML 文檔。

為什么使用 XML

XML 提供了一個(gè)普通而具有彈性的方法來(lái)在不同的系統(tǒng)、應(yīng)用程序和組織之間交換數(shù)據(jù)。 使用 XML,數(shù)據(jù)是在一個(gè)可擴(kuò)展自描述格式下進(jìn)行維護(hù),以提供給所有涉及的商業(yè)需求。 XML 文檔是用標(biāo)簽來(lái)描述它們包含的數(shù)據(jù)值,并且通過(guò)嵌套標(biāo)簽來(lái)表示數(shù)據(jù)條目間的層次關(guān)系。 XML 可以描述高度結(jié)構(gòu)化的數(shù)據(jù)并通過(guò) XML 模式來(lái)保持結(jié)構(gòu),但是它也能描述半結(jié)構(gòu)化的數(shù) 據(jù),這些數(shù)據(jù)普遍存在于內(nèi)容為導(dǎo)向的應(yīng)用程序。

以服務(wù)為導(dǎo)向的架構(gòu)(SOA)、企業(yè)應(yīng)用程序整合(EAI)、企業(yè)信息整合(EII)、Web 服 務(wù)、企業(yè)消息總線和很多依賴于 XML 作為底層數(shù)據(jù)交換技術(shù)的標(biāo)準(zhǔn)化成就。

就像行業(yè)這樣的機(jī)構(gòu)使用標(biāo)準(zhǔn)化的 XML 模式來(lái)促進(jìn)信息交換并且發(fā)展那些模式來(lái)滿足變化 中的商業(yè)需求。這些努力包括在保險(xiǎn)行業(yè)中的 ACORD、金融行業(yè)中的 FpML 和 FIXML、供應(yīng) 鏈管理中的 違規(guī)廣告、零售商業(yè)中的 ARTS、衛(wèi)生保健中的 HL7、商業(yè)報(bào)告里的 XBRL 和在印 刷行業(yè)中用于授權(quán)、管理和發(fā)布文檔的 DITA 以及整個(gè)網(wǎng)絡(luò)。

這類具體行業(yè)創(chuàng)新(比如管理需求)在驅(qū)動(dòng) XML 發(fā)展。越來(lái)越多的企業(yè)事務(wù)通過(guò)基于網(wǎng)絡(luò) 接口和電子表格來(lái)操作。政府代理和商業(yè)企業(yè)對(duì)保留原始訂單、請(qǐng)求、申明、交易或簽名承擔(dān) 更多的責(zé)任。 XML 提供了一個(gè)簡(jiǎn)單的方法來(lái)抓取并維護(hù)和那些電子交易相關(guān)的數(shù)據(jù)。事實(shí)上 ,XML 文檔常常在基于消息的事務(wù)系統(tǒng)中表現(xiàn)事務(wù)記錄。

XML 和關(guān)系數(shù)據(jù)的優(yōu)缺點(diǎn)

作為一個(gè)自描述數(shù)據(jù)格式,XML 允許不同的數(shù)據(jù)(有模式或沒(méi)有)在不犧牲搜索或聚合能 力的情況下被同時(shí)存在一個(gè)文檔中或某一行中。應(yīng)用程序可以在對(duì)底層數(shù)據(jù)庫(kù)模式不進(jìn)行任何 改變的情況下發(fā)展他們自己的 XML 模式。然而,對(duì)于 XML 的這種擴(kuò)展意味著比起存儲(chǔ)在關(guān)系 表中的數(shù)據(jù)在檢查和解釋 XML 數(shù)據(jù)時(shí)會(huì)花費(fèi)更多的 CPU 和 I/O 資源 – 這可能不切實(shí)際。

對(duì)更多的剛性模式定義,關(guān)系模式需要更少的解釋并允許更多的優(yōu)化數(shù)據(jù)操作。就像這樣 ,他可以提供非常高的性能,不過(guò)卻不能滿足應(yīng)用程序需要的模式彈性。關(guān)系型數(shù)據(jù)模型非常 適合有穩(wěn)定數(shù)據(jù)結(jié)構(gòu)和可預(yù)知訪問(wèn)形式的應(yīng)用程序。 XML 更適合有復(fù)雜多變數(shù)據(jù)結(jié)構(gòu)以及混 有結(jié)構(gòu)化和非結(jié)構(gòu)化信息的應(yīng)用程序。

在某些情況下,XML 提供的性能好處超過(guò)了關(guān)系模型正好是因?yàn)樗膹椥浴jP(guān)系型數(shù)據(jù)庫(kù) 經(jīng)常需要標(biāo)準(zhǔn)化來(lái)使商業(yè)數(shù)據(jù)適應(yīng)簡(jiǎn)單平坦的結(jié)構(gòu)。對(duì)復(fù)雜商業(yè)數(shù)據(jù)的標(biāo)準(zhǔn)化需要在數(shù)據(jù)存取 的時(shí)候進(jìn)行轉(zhuǎn)化,并經(jīng)常在關(guān)系型數(shù)據(jù)庫(kù)中導(dǎo)致多路的連接需求。 XML 可以在一個(gè)文檔中更 自然的表現(xiàn)復(fù)雜的商業(yè)對(duì)象以及對(duì)象間的所有關(guān)系。在一個(gè) XML 文檔中的層次本質(zhì)上就是預(yù) 先計(jì)算的相關(guān)數(shù)據(jù)條目之間的連接。

在選擇一個(gè)數(shù)據(jù)模式時(shí)的另外一個(gè)考慮是應(yīng)用程序使用數(shù)據(jù)。就算數(shù)據(jù)源自 XML,如果數(shù) 據(jù)后來(lái)的處理取決于存儲(chǔ)在表格中的數(shù)據(jù)—例如,在一個(gè)數(shù)據(jù)倉(cāng)庫(kù)中應(yīng)用關(guān)系行在線分析處理 (OLAP)的數(shù)據(jù)—那么把這些數(shù)據(jù)存入關(guān)系格式而非 XML 可能是正確的選擇。

關(guān)系數(shù)據(jù)模式問(wèn)題的 XML 解決方案

為了最大的可能范圍,存儲(chǔ)數(shù)據(jù)的模型應(yīng)該和你數(shù)據(jù)的最高值和最關(guān)鍵的使用模式相匹配 。如果數(shù)據(jù)被模式化成為自然表格,比起 XML 這通常表現(xiàn)為關(guān)系型格式更好。然而,有些情 況下關(guān)系型模式不是最好的選擇而且有時(shí)用來(lái)存儲(chǔ)數(shù)據(jù)甚至是很差的選擇。下面是用 XML 表 現(xiàn)比用關(guān)系型格式更好一些情況。

當(dāng)模式不穩(wěn)定時(shí)

關(guān)系型數(shù)據(jù)的問(wèn)題:如果數(shù)據(jù)模式經(jīng)常改變,那么在關(guān)系表結(jié)果中表現(xiàn)的數(shù)據(jù),更改關(guān)系 模式將產(chǎn)生成本和開銷。一些模式的表格更改在關(guān)系型數(shù)據(jù)庫(kù)中是無(wú)痛的,比如在表中增加一 個(gè)新列、把模式的其它表加入進(jìn)來(lái),還有就是刪除一列或更改一列的類型。不過(guò)模式的其它表 要更改(比如把一個(gè)表正常化進(jìn)多個(gè)表中)會(huì)非常困難。首先要改變表然后應(yīng)用程序需要改變 訪問(wèn)的 SQL 語(yǔ)句。

XML 數(shù)據(jù)解決方案:模式中易變的那一部分可以作為一個(gè)單獨(dú)的 XML 列存在。 XML 天然 的自描述和易擴(kuò)展功能可以無(wú)縫的處理模式變化和改進(jìn)。 XML 文檔格式中的改變是在不需要 在數(shù)據(jù)庫(kù)中更改表或者列并且通常不需要破壞現(xiàn)有 XML 查詢。

當(dāng)數(shù)據(jù)是自然的層次時(shí)

關(guān)系型數(shù)據(jù)的相關(guān)問(wèn)題:天然分層或遞歸數(shù)據(jù)在關(guān)系模式中常常很難表現(xiàn)。例如包括原料 賬單、工程對(duì)象或生物學(xué)數(shù)據(jù)。一個(gè)原料清單可以存進(jìn)一個(gè)關(guān)系型數(shù)據(jù)庫(kù),不過(guò)可能需要遞歸 SQL 來(lái)把它部分或全部重新構(gòu)建。

XML 數(shù)據(jù)解決方案:因?yàn)?XML 是一個(gè)層次型數(shù)據(jù)庫(kù)模式,它可以非常自然的表現(xiàn)本身就是 層次型的商業(yè)數(shù)據(jù)。如果相同數(shù)據(jù)表現(xiàn)為表格形式需要,使用 XML 可以用簡(jiǎn)單、導(dǎo)行的數(shù)據(jù) 訪問(wèn)來(lái)代替復(fù)雜的一系列操作。

當(dāng)數(shù)據(jù)表現(xiàn)商業(yè)對(duì)象時(shí)

關(guān)系型數(shù)據(jù)的問(wèn)題:如果應(yīng)用程序數(shù)據(jù)要表現(xiàn)商業(yè)對(duì)象,比如保險(xiǎn)保單,它經(jīng)常從保留有 數(shù)據(jù)條目和一個(gè)詳細(xì)聲明的組合中得到好處,而不是把它們分散到一系列表中。這對(duì)一個(gè)保單 的那些本身沒(méi)有有效商業(yè)含義并且只能在有上下文的完整表單中被解釋的單獨(dú)的數(shù)據(jù)條目來(lái)說(shuō) 尤其如此。通過(guò)數(shù)十個(gè)關(guān)系型表來(lái)正?;@個(gè)保單意味著應(yīng)用程序處理一個(gè)復(fù)雜的并且對(duì)于他 們的商業(yè)來(lái)說(shuō)是不成體系的數(shù)據(jù)。這增加了負(fù)載和出錯(cuò)的幾率。

XML 數(shù)據(jù)的解決方案:XML 讓你可以表現(xiàn)非常復(fù)雜的商業(yè)對(duì)象比如緊密相關(guān)的文檔以及截 然不同的文檔同時(shí)還抓取所有組成商業(yè)對(duì)象的數(shù)據(jù)條目之間的關(guān)系。以一個(gè)在表中單獨(dú)一行里 的 XML 文檔來(lái)表現(xiàn)每個(gè)保單(商業(yè)對(duì)象)為應(yīng)用程序開發(fā)人員提供了非常直觀的存儲(chǔ)模型并 可以快速進(jìn)行應(yīng)用程序開發(fā)。

當(dāng)對(duì)象有稀疏的屬性時(shí)

關(guān)系型數(shù)據(jù)的問(wèn)題:某些程序有非常多的可能屬性,它們大多數(shù)很稀疏,例如,可以適應(yīng) 非常少的對(duì)象。一類例子是一個(gè)產(chǎn)品編目,這里不同產(chǎn)品屬性數(shù)目非常多,包括:大小、顏色 、重量、長(zhǎng)度、高度、原料、款式、編織方法、伏特、決議、放水以及無(wú)止境的其它屬性。對(duì) 于任何產(chǎn)品,只和這些屬性的子集相關(guān)。一個(gè)可能的關(guān)系型方法是存儲(chǔ)這些數(shù)據(jù)時(shí)一個(gè)屬性一 列,這意味著表中包含 NULL 值得單元占非常大的比例。這是不期望的并且是低效率的。對(duì)這 些稀疏數(shù)據(jù)的另一個(gè)不同的關(guān)系型方法是一個(gè)有 3 列的表,對(duì)每個(gè)產(chǎn)品 ID 存儲(chǔ)了幾對(duì)名字 / 值。這意味著屬性的名字不是列名不過(guò)是在 VARCHAR 列中的值。這使得關(guān)系型數(shù)據(jù)不能精 確的估計(jì)可選約束和生成一個(gè)有效的查詢計(jì)劃。要定義并執(zhí)行一個(gè)約束同樣非常困難,比如對(duì) 一個(gè)特定屬性的唯一性約束。

XML 數(shù)據(jù)解決方案:XML 的美妙之處就是元素和屬性是可選的,例如,如果不需要應(yīng)用一 個(gè)特定的產(chǎn)品他們完全可以省略。無(wú)論是 NULL 值還是名稱以及值都不需要。 XML 模式可以 定義非常多的可選元素,卻對(duì)所有對(duì)象只使用它們中的一部分。在一個(gè)關(guān)系型表中每一行必須 有相同的列, XML 列中的 XML 文檔每一行可以有不同的元素。同樣,如果這個(gè)元素只有很小 的百分比,這個(gè)可選元素的 XML 索引可能非常小。這對(duì)每一行都有嚴(yán)格輸入的關(guān)系型索引的 一個(gè)很明顯的優(yōu)勢(shì)。

當(dāng)數(shù)據(jù)需要交換時(shí)

關(guān)系數(shù)據(jù)的問(wèn)題:如果你從關(guān)系表中導(dǎo)出一批記錄并把它們發(fā)送到另外一個(gè)應(yīng)用程序或組 織中,接收者不能在沒(méi)有額外數(shù)據(jù)來(lái)描述這一列的情況下解釋數(shù)據(jù)。如果你的關(guān)系模式從你上 次發(fā)送數(shù)據(jù)開始已經(jīng)改變的情況下,尤其如此。

XML 數(shù)據(jù)解決方案:XML 是自描述數(shù)據(jù)。 XML 標(biāo)簽是描述它們嵌套值的元數(shù)據(jù)。

DB2 pureXML 超過(guò)其它存儲(chǔ)選項(xiàng)的優(yōu)勢(shì)

因?yàn)?XML 已經(jīng)日益變成企業(yè)運(yùn)營(yíng)的關(guān)鍵,XML 文檔是一種資產(chǎn)共享、保持、搜索、保護(hù)和 更新并保持完全的事務(wù)一致性?;谒挠猛?,XML 數(shù)據(jù)也可能需要與其它數(shù)據(jù)進(jìn)行轉(zhuǎn)換、審 計(jì)和整合。為了達(dá)到這些要求,把 XML 數(shù)據(jù)在 DB2 數(shù)據(jù)庫(kù)中存成自然層次格式,這有很多好 處,包括:

◆注意 XML 數(shù)據(jù)的內(nèi)部結(jié)構(gòu)。這對(duì)在數(shù)據(jù)庫(kù)中以字符或二進(jìn)制大對(duì)象(CLIBs 或 BLOBs) 的形式來(lái)存儲(chǔ) XML 文檔具有優(yōu)勢(shì)。準(zhǔn)確的說(shuō),你可以很容易使用 XQuery、XPath 和 SQL/XML 利用 XML 結(jié)構(gòu)來(lái)查詢 XML 數(shù)據(jù),而且你可以通過(guò)對(duì) XML 數(shù)據(jù)創(chuàng)建索引來(lái)提高查詢性能。另 外,你可以很容易的使用 SQL、XQuery 和 XSLT 來(lái)更新、轉(zhuǎn)換并發(fā)布 XML 數(shù)據(jù)。

◆維護(hù) XML 數(shù)據(jù)的層次和靈活的性質(zhì)。這在分解(切割)XML 文檔到關(guān)系型表中,在這里 管理員映射 XML 元素和屬性到關(guān)系列中。在分解后,XML 文檔之被存儲(chǔ)在這些表中并且沒(méi)有 最初的標(biāo)簽。分解常常需要大量的表,而且實(shí)際使用中非常復(fù)雜。查詢分解后的 XML 文檔可 能需要復(fù)雜的 SQL 連接,這很難開發(fā)和調(diào)試。改變 XML 模式常常會(huì)破壞對(duì)關(guān)系數(shù)據(jù)庫(kù)模式的 映射。這會(huì)使維護(hù)變得昂貴和耗時(shí),并違背了出于靈活性而選擇 XML 的初衷。這也是為什么 DB2 pureXML 允許你適應(yīng)一個(gè) XML 列來(lái)存儲(chǔ)和查詢基于不同 XML 模式的 XML 文檔,或一個(gè) XML 模式的不同版本。

◆在一個(gè)數(shù)據(jù)庫(kù)中整合 XML 文檔和關(guān)系數(shù)據(jù)。這比在兩個(gè)數(shù)據(jù)庫(kù)中分別存儲(chǔ)關(guān)系數(shù)據(jù)和 XML 文檔 -XML-only 數(shù)據(jù)庫(kù)更有優(yōu)勢(shì)。后者需要技巧和人力來(lái)操作并維護(hù)兩個(gè)數(shù)據(jù)庫(kù)系統(tǒng)而 不僅僅是一個(gè)。同樣,從兩個(gè)數(shù)據(jù)庫(kù)中聯(lián)合數(shù)據(jù),通常需要應(yīng)用程序有額外的邏輯,而這常常 很困難且效率低。當(dāng)你在一個(gè) DB2 數(shù)據(jù)庫(kù)中同時(shí)存儲(chǔ) XML 和關(guān)系數(shù)據(jù)時(shí),可以在查詢中聯(lián)合 兩種類型的數(shù)據(jù),甚至可以根據(jù)需要把一種轉(zhuǎn)數(shù)據(jù)換成另外一種。這樣做更加劃算而且比起使 用兩個(gè)不同的數(shù)據(jù)庫(kù),它提供了更好的性能。

DB2 pureXML 的最佳實(shí)踐:概述

DB2 pureXML 功能提供了在存儲(chǔ)、索引、驗(yàn)證和查詢 XML 數(shù)據(jù)上成熟的能力 – 并完全整 合了 DB2 關(guān)系型數(shù)據(jù)管理功能。本文描述了以有效并高效的方式使用 pureXML 的原則。本文 的目標(biāo)不是介紹 pureXML 功能或者它們?nèi)绾喂ぷ鳌O喾幢疚奶峁┝吮WC高性能 pureXML 的指 南,也示范了如何開發(fā) pureXML 功能來(lái)有效的解決特定的商業(yè)問(wèn)題。

我們使用一個(gè)現(xiàn)實(shí)世界的應(yīng)用程序場(chǎng)景來(lái)安排最佳實(shí)踐和本文中的例子。這是來(lái)自金融行 業(yè)的場(chǎng)景而且是基于 XML 格式的叫做 FpML(金融產(chǎn)品標(biāo)記語(yǔ)言)的“金融衍生交易”的交易 和管理。你不需要一個(gè)金融專家來(lái)理解這個(gè)場(chǎng)景。雖然我們只使用這個(gè)特定的場(chǎng)景,最佳實(shí)踐 同樣應(yīng)用到其它 XML 使用情況,比如 XML 表格處理、訂單管理系統(tǒng)、XML 在健康保健和電子 病歷,和其它情況

本文的主題是根據(jù)數(shù)據(jù)庫(kù)對(duì)象的生命周期粗略組織的。我們這個(gè)章節(jié)從查看應(yīng)用程序需要 的數(shù)據(jù)和表開始。然后我們討論 DB2 對(duì) XML 數(shù)據(jù)(第 4 章)的存儲(chǔ)選項(xiàng)。之后 , 第 5 章 提供了添加 XML 數(shù)據(jù)到 DB2 數(shù)據(jù)庫(kù)的竅門和技巧。在第 6 章我們提供了更有效查詢 XML 數(shù) 據(jù)的指南和例子。為了提高查詢性能,定義和使用 XML 索引的最佳實(shí)踐在第 7 章中進(jìn)行了介 紹。 XML 名稱空間和 XML 更新在第 8 章和第 9 章中分別有所討論。第 10 章和 11 章涵蓋 了對(duì)數(shù)據(jù)庫(kù)管理員(DBAs)以及應(yīng)用程序開發(fā)的附加的主題。最后,12 章以總結(jié)最重要的指 南作為結(jié)束。

簡(jiǎn)單場(chǎng)景:FpML 形式中的金融衍生交易

一個(gè)“金融衍生交易”是一個(gè)基于(起源于)其它一些金融資產(chǎn)的金融交易,比如股票、 指數(shù)、利率、流通、或其它的。在一個(gè)金融衍生交易中,根據(jù)影響底層資產(chǎn)的市場(chǎng)條件,當(dāng)事 人雙方同意交易現(xiàn)金。通常情況下,一方利用交易以減輕風(fēng)險(xiǎn);另外一方利用這個(gè)交易來(lái)獲得 立即的收入(通過(guò)費(fèi)用或額外費(fèi)用)或?qū)ξ磥?lái)市場(chǎng)情況將提供收益進(jìn)行投機(jī)。讓我們看一個(gè)例 子:

YourWord Investments 和 MyGlobal Back 達(dá)成了一個(gè)外匯兌換交易。他們商議在 10 月 25 號(hào) YourWord 將支付 71,900,000 人民幣給 MyGlobal,并且 MyGlobal 將支付 10,000,000 美元給 YourWorld 。如果 1 美元兌換人民幣從現(xiàn)在到 10 月 25 日其間低于 7.19,MyGlobal 將從這次交易中獲利 .MyGlobal 可能會(huì)使用這個(gè)交易來(lái)避免美元下降的風(fēng)險(xiǎn) 。 YourWorld 可以投機(jī)美元將增值,或從 MyGlobal 收取進(jìn)行交易的前期費(fèi)用。

衍生交易的奇妙之處是(a)有很多不同的類型和變化,(b)一個(gè)特定交易的狀態(tài)往往需 要單獨(dú)談判而且很復(fù)雜,(c)一個(gè)衍生交易的生命周期可以是從幾天到數(shù)年的范圍而且它們 的條件可以隨時(shí)間而改變。金融企業(yè)發(fā)現(xiàn)在定義一個(gè)可以捕捉到衍生交易高度變化標(biāo)準(zhǔn)的數(shù)據(jù) 格式時(shí)需要 XML 的靈活性和可擴(kuò)展性。結(jié)果就是,他們開發(fā)了 FpML 。 FpML 本質(zhì)上是定義 了 XML 元素和屬性如何用來(lái)描述金融衍生交易的一個(gè) XML 模式。 International Swaps and Derivatives Association, Inc (ISDA) 代表一個(gè)投資銀行組織管理 FpML 標(biāo)準(zhǔn)使市場(chǎng)在場(chǎng)外 進(jìn)行衍生交易。更多金融衍生交易和 FpML 的信息參考【 8 】和【 9 】。

樣本數(shù)據(jù)和表

本文的樣本數(shù)據(jù)庫(kù)由 3 個(gè)表組成,見(jiàn)清單 1。


清單 1. 定義樣本表

create table trades (tradeId integer, tradedoc 

XML); 
 create table parties(partyInfo XML); 
 create table currencies(symbol char(4), name varchar(30), USDvalue double, 
                        lastUpdated 

timestamp);

所有的表定義和命令以使用樣本數(shù)據(jù)來(lái)填充它們,以及需要本文中顯示的其它語(yǔ)句可以在 中以文本文件的形式下載。

TRADES 表包含 FpML 文檔和每個(gè)文檔的交易 ID 。每個(gè)交易文檔涉及兩個(gè)交易方使文檔中 用 PRTYID 元素的值。更多關(guān)于各個(gè)部分詳細(xì)信息都以 XML 格式存放在 PARTIES 表中。我們 可以從一個(gè) TRADES 和 PARTIES 之間的 XML 到 XML 連接中找到相關(guān)交易的詳細(xì)資料,反之 亦然。很多 FpML 交易通過(guò)標(biāo)記來(lái)引用具體貨幣。額外的貨幣信息在關(guān)系型中可以在 CURRENCIES 表中,如清單 2 所示。我們需要 XML 到關(guān)系型表的連接來(lái)把相關(guān)交易和貨幣信 息聯(lián)系起來(lái)。

清單 2. currency表中的內(nèi)容

SYMBOL NAME                           USDVALUE 

  LASTUPDATED 
 ------ ------------------------------ --------   ------------------- 
 USD    US Dollar                         1.000   2008-02-05-15.15.57 
 EUR    Euro                              1.460   2008-02-05-15.15.59 
 GBP    Great Britain Pounds              1.960   2008-02-05-15.16.23 
 JPY    Japanese Yen                      0.009   2008-02-05-15.15.53 
 CNY    Chinese Yuan (Renminbi, RMB)      7.190   2008-02-05-

15.16.13


我們的 PARTIES 表包含 3 行,每一行有一個(gè) XML 文檔。他們描述了與金融衍生交易的例 子有關(guān)的各參與方。下表顯示 3 個(gè)締約方的 XML 文檔:

清單 3. Parties 表的內(nèi)容

<Party> 
   <PtyID>510026</PtyID> 
   <ShortName>MIB</ShortName> 
   <Name>MyGlobal International Bank</Name> 
   <Status>Active</Status> 
   <Address> 
       <Street>498 Wall Street</Street> 
       <City>New York</City> 
       <Country>USA</Country> 
   </Address> 
   <Rating> 
      <RatingDate>2006-05-16</RatingDate> 
      <RatingValue>Baa1</RatingValue> 
   </Rating> 
 </Party>
 
 <Party> 
   <PtyID>67781</PtyID> 
   <ShortName>NVB</ShortName> 
   <Name>National Village Bank</Name> 
   <Status>Active</Status> 
   <Address> 
       <Street>1805 Back Street</Street> 
       <PostalCode>EC3M 4TD</PostalCode> 
       <City>London</City> 
       <Country>UK</Country> 
   </Address> 
   <Rating> 
      <RatingDate>2006-06-01</RatingDate> 
      <RatingValue>Aa</RatingValue> 
   </Rating> 
 </Party>
	
<Party> 
   <PtyID>99114</PtyID> 
   <ShortName>YWI</ShortName> 
   <Name>YourWorld Investments</Name> 
   <Status>Active</Status> 
   <Address> 
       <POBox>98765</POBox> 
       <PostalCode>100027</PostalCode> 
       <City>Beijing</City> 
       <Country>China</Country> 
   </Address> 
   <Rating> 
      <RatingDate>2007-01-15</RatingDate> 
      <RatingValue>Aaa</RatingValue> 
   </Rating> 
   <Rating> 
      <RatingDate>2005-04-21</RatingDate> 
      <RatingValue>Aa</RatingValue> 
   </Rating> 
 </Party>

清單 4 顯示 FpML 文檔表現(xiàn)先前我們描述過(guò)的 YourWorld Investment 和 MyGlobal International Bank 之間的貨幣兌換交易。交易以 tradeHeader 元素開始,以“ party1 ”和“ party2 ”標(biāo)記兩個(gè)交易方,并把他們和他們的交易 IDs 以及交易日期聯(lián)系起 來(lái)。在 FpML 文檔的最底部,“ party1 ”和“ party2 ”是映射到具體的標(biāo)識(shí)符“ 510026 ”和“ 99114 ”他們引用 PARTIES 表中交易方信息。交易具體的主要部分在 fxSingleLeg 元素中。 FX 是聲明外匯交易,有兩個(gè)元素叫 exchangedCurrency1 和 exchangedCurrency1 。第一個(gè)表示 YourWorld 支付 CNY 71,900,000 給 MyGlobal,第二個(gè)顯示 MyGlobal 支付 10,000,000 給 YourWorld.

為了更清楚的表示,我們已經(jīng)從 FpML 樣本數(shù)據(jù)刪除了所有名稱空間。我們將在本文后面 部分重新訪問(wèn)名稱空間。

清單 4. FpML格式中的一個(gè)利率衍生工具

<FpML> 
  <trade> 
   <tradeHeader> 
        <partyTradeIdentifier> 
          <partyReference href="party1"/> 
          <tradeId tradeIdScheme="http://www.MyGlobal.com/trade-id">MyGlobal941</tradeId> 
        </partyTradeIdentifier> 
        <partyTradeIdentifier> 
           <partyReference href="party2"/> 
           <tradeId tradeIdScheme="http://www.YourWorld.com/trade-id">YWI0089</tradeId> 
        </partyTradeIdentifier> 
        <tradeDate>2001-10-23Z</tradeDate> 
     </tradeHeader> 
     <fxSingleLeg> 
        <exchangedCurrency1> 
           <payerPartyReference href="party2"/> 
           <receiverPartyReference href="party1"/> 
           <paymentAmount> 
              <currency>CNY</currency> 
              <amount>71900000</amount> 
           </paymentAmount> 
        </exchangedCurrency1> 
        <exchangedCurrency2> 
           <payerPartyReference href="party1"/> 
           <receiverPartyReference href="party2"/> 
           <paymentAmount> 
              <currency>USD</currency> 
              <amount>10000000</amount> 
           </paymentAmount> 
        </exchangedCurrency2> 
        <valueDate>2001-10-25Z</valueDate> 
        <exchangeRate> 
           <quotedCurrencyPair> 
              <currency1>CNY</currency1> 
              <currency2>USD</currency2> 
              <quoteBasis>Currency2PerCurrency1</quoteBasis> 
           </quotedCurrencyPair> 
           <rate>7.91</rate> 
        </exchangeRate> 
     </fxSingleLeg> 
  </trade> 
  <party id="party1"> 
      <partyId>510026</partyId> 
  </party> 
  <party id="party2"> 
     <partyId>99114</partyId> 
  </party> 
 </FpML>

清單 5 顯示一個(gè) FpML 文檔的其它例子。這個(gè)文檔是一個(gè) “隔夜拆借存款”。 National Village Bank 對(duì)來(lái)自于 YourWorld Investment 的 25,000,000 歐元存款支付 3% 固定貸款 利率。

清單 5. 在 FpML 中的一個(gè)“隔夜拆借存款”例子

<FpML> 
  <trade> 
    <tradeHeader> 
       <partyTradeIdentifier> 
          <partyReference href="party1"/> 
          <tradeId tradeIdScheme="http://www.YourWorld.com/trade-id">YWI7623</tradeId> 
       </partyTradeIdentifier> 
       <partyTradeIdentifier> 
         <partyReference href="party2"/> 
         <tradeId tradeIdScheme="http://www.NationalV.com/swaps/trade-id">69197</tradeId> 
       </partyTradeIdentifier> 
       <tradeDate>2002-02-14Z</tradeDate> 
    </tradeHeader> 
    <termDeposit> 
        <productType>Overnight Term Deposit</productType> 
        <initialPayerReference href="party1"/> 
        <initialReceiverReference href="party2"/> 
        <startDate>2002-03-15Z</startDate> 
        <maturityDate>2002-03-16Z</maturityDate> 
        <dayCountFraction>ACT/360</dayCountFraction> 
        <principal> 
           <currency>GBP</currency> 
           <amount>35000000.00</amount> 
        </principal> 
        <fixedRate>0.03</fixedRate> 
    </termDeposit> 
  </trade> 
  <party id="party1"> 
     <partyId>99114</partyId> 
  </party> 
  <party id="party2"> 
     <partyId>67781</partyId> 
  </party> 
 </FpML>

這兩個(gè)列子(清單 4 和清單 5)讓你對(duì) FpML 衍生數(shù)據(jù)有了一個(gè)概念。 FpML 模式定義了 大約 1800 個(gè)不同的 XML 元素和超過(guò) 600 種類型。任何一個(gè)實(shí)例文檔都只包含了其中的一部 分。然而,一個(gè)關(guān)系型數(shù)據(jù)庫(kù)模式在沒(méi)有 XML 列的情況下需要至少 400 到 500 個(gè)表才能顯 示任意可能的 FpML 文檔。這是令人恐怖的復(fù)雜度,而且通常被認(rèn)為不可管理。這是為什么 XML 是必須的。

OurTRADES 表包含了 5 個(gè) FpML 文檔,包括上面的兩個(gè)。完整的數(shù)據(jù)樣例可以在一個(gè) DB2 命令行(CLP)腳本中下載。

為 XML 存儲(chǔ)選擇正確的存儲(chǔ)選項(xiàng)

正確的配置存儲(chǔ)選項(xiàng)對(duì)于最大化 DB2 數(shù)據(jù)庫(kù)性能非常重要。在這個(gè)章節(jié),我們討論數(shù)據(jù)庫(kù) 的表空間類型、XML 數(shù)據(jù)在數(shù)據(jù)庫(kù)中存儲(chǔ)的頁(yè)面大小、以及在數(shù)據(jù)庫(kù)中存儲(chǔ) XML 數(shù)據(jù)的方法 。

提示:在 DB2 9.5 中 XML 在一個(gè) DB2 表空間中消耗的存儲(chǔ)空間是原始 XML 數(shù)據(jù)以文本 格式在操作系統(tǒng)中占用空間的 0.7 到 1.5 倍。要得到更精確的評(píng)估,比如插入 1000 個(gè)有代 表性的文檔到一個(gè)空表中并抓取一個(gè) DB2 表的快照來(lái)查看這個(gè)表已使用的頁(yè)數(shù)。

為 XML 數(shù)據(jù)選擇表空間類型和頁(yè)大小

數(shù)據(jù)庫(kù)管理表空間(DMS)提供了比系統(tǒng)管理 ( 操作系統(tǒng)管理 ) 表空間(SMS)更高的性 能。這對(duì)關(guān)系型數(shù)據(jù)尤其如此,對(duì) XML 讀寫訪問(wèn)上更是如此。最新創(chuàng)建的表空間默認(rèn)是 DMS 。推薦使用 DMS 表空間與自動(dòng)存儲(chǔ),所以 DMS 容器根據(jù)需要增長(zhǎng)而不需要人工干預(yù)。如果一 個(gè) XML 文檔太大而不能放入這個(gè)表空間的單個(gè)頁(yè)面中,DB2 會(huì)把這個(gè)文檔分別存入多個(gè)域中 ,這樣就存入多個(gè)頁(yè)面中了。很顯然你的應(yīng)用程序可以讓 DB2 處理最大 2G 的 XML 文檔。

通常,一個(gè)文檔的域的數(shù)目越低性能越好,尤其對(duì)于插入和讀取整個(gè)文檔。如果文檔不能 放入一個(gè)頁(yè)面中,每個(gè)文檔拆分的數(shù)目取決于頁(yè)大?。?KB,8KB,16KB 或 32KB)。你的表空 間頁(yè)大小越大,每個(gè)文檔可能被拆分的數(shù)目就越小。例如,假設(shè)一個(gè)文檔跨了 40 個(gè) 4k 頁(yè)。 相同的文檔在 8KB 表空間中可能只需要 20 頁(yè),或 10 個(gè) 16KB 頁(yè),5 個(gè) 32KB 頁(yè),因?yàn)槎?個(gè)小的文檔可以存儲(chǔ)在一個(gè)頁(yè)面中所以不會(huì)有空間浪費(fèi)。

提示:大多數(shù) XML 應(yīng)用程序最好在 16KB 和 32KB 頁(yè)面上運(yùn)行。如果大多數(shù)文檔非常?。?比如小于 4KB)16KB 頁(yè)面可以提供良好的性能,因此在一個(gè)頁(yè)面中存放多個(gè)文檔。更大的文 檔最好使用 32KB 頁(yè)面保存。對(duì)于我們的 FpML 場(chǎng)景,需要 16KB 頁(yè)面。如果你對(duì)關(guān)系型數(shù)據(jù) 和 XML 數(shù)據(jù)使用同樣的頁(yè)面,或者數(shù)據(jù)和索引也存放在相同頁(yè)面,16KB 頁(yè)面同樣可以做很好 的折衷,而且你會(huì)發(fā)現(xiàn) 32KB 頁(yè)面對(duì)關(guān)系數(shù)據(jù)和索引有的訪問(wèn)有負(fù)面影響。這這種情況下,你 可以考慮使用其它的頁(yè)面大小。

XML 和關(guān)系數(shù)據(jù)使用不同的表空間和頁(yè)大小

在清單 1 中的 CREATE TABLE 語(yǔ)句把表中的 XML 數(shù)據(jù)和關(guān)系型數(shù)據(jù)都存在了相同表空間 里。這意味著它們使用相同的頁(yè)面大小和緩沖池。在表空間中,關(guān)系數(shù)據(jù)是存儲(chǔ)在基本數(shù)據(jù)頁(yè) 面上,同時(shí) XML 數(shù)據(jù)是存在另外的 XML 數(shù)據(jù)域(XDA)里的頁(yè)面中。這是因?yàn)榫拖翊髮?duì)象 (LOBs),XML 文檔可能很大,不能放在表的一個(gè)數(shù)據(jù)頁(yè)中的一行里。這種默認(rèn)的規(guī)劃對(duì)于大 多數(shù)應(yīng)用場(chǎng)景提供了很好的性能。這個(gè)選項(xiàng),叫做“基礎(chǔ)內(nèi)嵌表”,將在下面章節(jié)中進(jìn)行介紹 ,你應(yīng)該對(duì)在同時(shí)存儲(chǔ) XML 文檔和關(guān)系型數(shù)據(jù)的數(shù)據(jù)頁(yè)面上選擇這個(gè)選項(xiàng)。然而,默認(rèn)情況 下關(guān)系型數(shù)據(jù)和 XML 數(shù)據(jù)是分開存儲(chǔ)的。

提示:如果你已經(jīng)完成了性能分析并發(fā)現(xiàn)你需要對(duì) XML 數(shù)據(jù)使用一個(gè)大頁(yè)面,而關(guān)系型數(shù) 據(jù)和索引需要小頁(yè)面,你可以使用不同的表空間來(lái)滿足它們。在你定義一個(gè)表的時(shí)候,你可以 指定“長(zhǎng)型”數(shù)據(jù)到一個(gè)有不同頁(yè)面大小的單獨(dú)的表空間。長(zhǎng)型數(shù)據(jù)包括 LOB 和 XML 數(shù)據(jù)。

下面的例子定義了兩個(gè)緩沖池和兩個(gè)表空間,緩沖池和表空間都分別有 4KB 頁(yè)和 32KB 頁(yè) 。注意,一個(gè)表空間總是需要一個(gè)匹配頁(yè)大小的緩沖池。我們的 3 個(gè)表所在的 relData 表空 間是 4KB 頁(yè)面。所有的列都存在這個(gè)表空間中,除了 XML 列。它們被存儲(chǔ)在 xmlData 表空 間的 32KB 頁(yè)面中。

清單 6. XML 和關(guān)系型數(shù)據(jù)存放在不同頁(yè)大小的表空間中的例子

create bufferpool bp4k pagesize 4k; 
 create bufferpool bp32k pagesize 32k; 
 create tablespace relData 
 pagesize 4K bufferpool bp4k; 
 create tablespace xmlData 
 pagesize 32K bufferpool bp32k; 
 create table trades (tradeId integer, tradedoc XML) 
     in relData 	
     long in xmlData; 
 create table parties(partyInfo XML) in relData long in xmlData; 
 create table currencies(symbol char(4), name varchar(30), USDvalue double, 
                        lastUpdated timestamp) in relData;


除非明確指定,新表空間都是創(chuàng)建為有大行 IDs 的 DMS 表空間。這意味著一個(gè) 4KB 頁(yè)大 小的表空間可以存儲(chǔ)多達(dá) 2TB 的數(shù)據(jù)并支持在 32KB 大小的頁(yè)面存放 2335 行記錄。

內(nèi)置并壓縮 XML 數(shù) 據(jù)

DB2 VERSION 9.5 也允許你“內(nèi)置”存儲(chǔ) XML 數(shù)據(jù)并壓縮。

提示:如果某些或你的所有 XML 文檔都足夠小,就可以在基礎(chǔ)表頁(yè)面里把它們放進(jìn)相應(yīng)的 行對(duì)象中,就可以把 XML 數(shù)據(jù)內(nèi)置到關(guān)系行中。這樣做也提供了對(duì) XML 數(shù)據(jù)的更直接訪問(wèn)并 避免了重定向到 XDA 對(duì)象中。如果在 XML 列中的一些文檔仍然太大而不能內(nèi)置,它們通常被 存儲(chǔ)在“外部” XDA 對(duì)象中。內(nèi)置可以顯著的減少域索引,因?yàn)榍度胛臋n不需要任何域索引 輸入。它們總是組成一個(gè)單獨(dú)的內(nèi)置域。嵌入文檔也可以使用普通的 DB2 深度行壓縮來(lái)壓縮 ,如圖 7 所示:

清單 7. 嵌入及壓縮 XML 存儲(chǔ)的定義

create table trades (tradeId integer, tradedoc XML in line length 16000) 
     in relData compress yes;

在這個(gè)例子中,XML 列使用 INLINE LENGTH 16000 定義 . 這意味著任何等于或小于 16000 字節(jié)的文檔都將以嵌入方式存儲(chǔ)。這里指定的大小是參照 XML 在 DB2 中解析后的大小 ,不是 XML 文本文檔在你文件系統(tǒng)中的大小。嵌入長(zhǎng)度必須小于頁(yè)面大小減去本頁(yè)中其它列 之后的大小。

提示:通常你應(yīng)該尋求嵌入最多或全部文檔。如果你在表中只有一個(gè) XML 字段,達(dá)到這個(gè) 目的的最簡(jiǎn)單的方法是設(shè)置內(nèi)置長(zhǎng)度為這一行中的最大可能值。 DB2 不會(huì)允許你定義一個(gè)太 長(zhǎng)的嵌入長(zhǎng)度。選擇一個(gè)較大的嵌入長(zhǎng)度將不會(huì)浪費(fèi)任何空間,因?yàn)橹挥写鎯?chǔ)文檔真正需要的 空間才會(huì)被使用。然而,指定一個(gè)較大的內(nèi)置長(zhǎng)度可以阻止你在以后添加新列到這個(gè)表中。

嵌入 XML 數(shù)據(jù)總是以這個(gè)表的關(guān)系型列存放在相同表空間中,并且不能存在一個(gè)有不同頁(yè) 面大小的其它表空間中。

因?yàn)槲覀兊臉颖颈硎径x時(shí)指定了 COMPRESS YES,關(guān)系數(shù)據(jù)和內(nèi)置 XML 文檔會(huì)被壓縮。 以 60%-70% 的比例壓縮內(nèi)置 XML 數(shù)據(jù)并不罕見(jiàn)。下面的語(yǔ)句可以用來(lái)檢查 PRODUCT 表的壓 縮比率:

清單 8. 用來(lái)檢查數(shù)據(jù)壓縮率的管理函數(shù)

select 

tabname,pages_saved_percent,bytes_saved_percent 
 from table(sysproc.admin_get_tab_compress_info('MYSCHEMA','TRADES','ESTIMATE'))
      as t

提示:

如果你的系統(tǒng)是 I/O 限制而非 CPU 限制,壓縮 XML 數(shù)據(jù)可以提供極大的性能提升。然而 ,要注意內(nèi)置文檔會(huì)顯著的增加在你頁(yè)面中的行的大小。這反過(guò)來(lái)減少了每一頁(yè)中的行數(shù)。只 訪問(wèn)表中關(guān)系列的查詢現(xiàn)在需要讀取比沒(méi)有嵌入文檔要多很多的頁(yè)面。這會(huì)造成比沒(méi)有使用 XML 嵌入文檔情況下更多的 I/O 以及更低的查詢性能。如果你的查詢通常總是查詢 XML 列, 那么對(duì)你沒(méi)有影響,然而,如果你有很多不涉及 XML 列的查詢,你應(yīng)或許不應(yīng)該選擇“內(nèi)置 ”存儲(chǔ)。

【編輯推薦】

  1. 數(shù)據(jù)庫(kù)中的pureXML優(yōu)點(diǎn)介紹
  2. 超越關(guān)系型數(shù)據(jù)庫(kù) pureXML技術(shù)應(yīng)用及展望
  3. 用DB2 pureXML執(zhí)行不區(qū)分大小寫的高效搜索
責(zé)任編輯:彭凡 來(lái)源: ITPUB空間
相關(guān)推薦

2011-11-30 21:46:24

ibmdwDB2 pureXML

2010-08-09 17:52:38

DB2 pureXML

2010-08-20 12:49:49

DB2 pureXML

2009-01-18 16:33:09

pureXMLDB2 pureXMLXML

2009-09-22 12:25:04

ibmdwDB2

2009-03-10 10:31:26

DB2XMLpureXML

2009-11-23 19:57:01

ibmdwDB2

2009-03-11 14:59:17

數(shù)據(jù)庫(kù)DB2數(shù)據(jù)庫(kù)分區(qū)

2010-09-06 15:00:40

DB2 9 XML

2009-03-03 12:58:14

pureXML大小寫DB2

2010-11-01 11:13:57

DB2表管理

2010-11-01 12:11:43

DB2表空間

2010-08-26 16:15:25

DB2數(shù)據(jù)庫(kù)管理

2010-08-11 09:14:33

DB2數(shù)據(jù)類型

2010-07-29 14:41:12

DB2 9 XML

2010-08-26 10:37:40

DB2Q復(fù)制

2009-06-25 10:30:30

2010-08-04 08:52:35

2010-11-04 11:07:56

DB2管理命令

2013-04-23 14:36:54

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)