謝培基,余金山
(華僑大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,福建 泉州 362021)
數(shù)據(jù)倉(cāng)庫(kù)技術(shù)是在數(shù)據(jù)庫(kù)基礎(chǔ)上發(fā)展而來(lái)的新一代信息管理技術(shù),主要用于支持企業(yè)信息集成、數(shù)據(jù)挖掘、企業(yè)決策支持等的應(yīng)用。在數(shù)據(jù)倉(cāng)庫(kù)建設(shè)過(guò)程中,由于各工具廠商采用不同的元數(shù)據(jù)標(biāo)準(zhǔn)和不同的元數(shù)據(jù)管理策略,使得依靠這些工具進(jìn)行數(shù)據(jù)集成、數(shù)據(jù)共享顯得十分困難。為了統(tǒng)一數(shù)據(jù)倉(cāng)庫(kù)開發(fā)商元數(shù)據(jù)管理策略,實(shí)現(xiàn)元數(shù)據(jù)的交流和數(shù)據(jù)的集成,2001年OMG組織在其已制定的規(guī)范 UML、MOF、XMI的基礎(chǔ)上提出公共倉(cāng)庫(kù)元模型(CWM)。CWM是OMG制定的一個(gè)互操作標(biāo)準(zhǔn),為數(shù)據(jù)倉(cāng)庫(kù)和業(yè)務(wù)分析領(lǐng)域中使用的元數(shù)據(jù)定義了一種通用語(yǔ)言和交換機(jī)制[1]。CWM不僅提供了極受歡迎的描述數(shù)據(jù)倉(cāng)庫(kù)與業(yè)務(wù)分析元數(shù)據(jù)的公共元模型,而且還提供了基于XML的交換工具。CWM本質(zhì)上是一種交換技術(shù),其目的是促進(jìn)多個(gè)廠商的不同軟件工具間的元數(shù)據(jù)交換活動(dòng)。
本文基于CWM的元數(shù)據(jù)管理策略,介紹了元數(shù)據(jù)管理的三種主要策略,并對(duì)此三種策略進(jìn)行比較,分析各策略的功能與復(fù)雜度,總結(jié)基于CWM的元數(shù)據(jù)管理策略的優(yōu)勢(shì),進(jìn)而給出基于CWM元數(shù)據(jù)管理策略改進(jìn)的元數(shù)據(jù)管理體系結(jié)構(gòu),最后討論了元倉(cāng)庫(kù)的設(shè)計(jì)。
元數(shù)據(jù)管理策略為元數(shù)據(jù)集成、共享和重用制定目標(biāo)和需求。成功進(jìn)行元數(shù)據(jù)集成的關(guān)鍵之一是建立一個(gè)有效的元數(shù)據(jù)管理策略。從元數(shù)據(jù)的發(fā)展歷史[2]來(lái)看,元數(shù)據(jù)管理策略包括三種:搭建元數(shù)據(jù)橋、搭建元數(shù)據(jù)中央存儲(chǔ)庫(kù)、構(gòu)建元數(shù)據(jù)倉(cāng)庫(kù)。
(1)搭建元數(shù)據(jù)橋[3]:是一種能夠?qū)⒁粋€(gè)產(chǎn)品的元數(shù)據(jù)轉(zhuǎn)換成另一個(gè)產(chǎn)品所要求的格式的軟件。使用元數(shù)據(jù)橋?qū)崿F(xiàn)不同工具間的元數(shù)據(jù)集成是一種點(diǎn)到點(diǎn)的元數(shù)據(jù)體系結(jié)構(gòu)。在這種結(jié)構(gòu)中,每一對(duì)被集成的工具之間都需要一個(gè)獨(dú)立、雙向的橋,對(duì)于n個(gè)產(chǎn)品要實(shí)現(xiàn)元數(shù)據(jù)交換必須建立n×(n-I)個(gè)元數(shù)據(jù)橋。這種方式集成元數(shù)據(jù)大幅增加了開發(fā)和維護(hù)費(fèi)用,而且通常將一種格式的元數(shù)據(jù)轉(zhuǎn)換為另一種格式時(shí),都會(huì)有一定的信息損失。
(2)搭建元數(shù)據(jù)中央存儲(chǔ)庫(kù)[4]:是具有特定目的的數(shù)據(jù)庫(kù),它存儲(chǔ)、控制并能操作環(huán)境中其他所有相關(guān)軟件產(chǎn)品的元數(shù)據(jù)。軟件產(chǎn)品從中央存儲(chǔ)庫(kù)中檢索、使用元數(shù)據(jù),每個(gè)產(chǎn)品必須實(shí)現(xiàn)它自己的存儲(chǔ)庫(kù)訪問(wèn)層(另一種形式的橋)。通過(guò)使用元數(shù)據(jù)中央存儲(chǔ)庫(kù)可以在一定程度上解決定義全局可用且被廣泛理解的元數(shù)據(jù)的需要但并沒(méi)有完全消除問(wèn)題,它仍然需要使用到元數(shù)據(jù)橋,使得成本無(wú)法降低很多,也沒(méi)有消除受制于特定的廠商的問(wèn)題。
由于點(diǎn)到點(diǎn)的體系結(jié)構(gòu)和中央存儲(chǔ)庫(kù)的集成體系結(jié)構(gòu)并沒(méi)有形成一個(gè)統(tǒng)一的元數(shù)據(jù)標(biāo)準(zhǔn),所以其方案成本都相對(duì)昂貴。
(3)構(gòu)建元數(shù)據(jù)倉(cāng)庫(kù):即是基于CWM的元數(shù)據(jù)管理策略。元數(shù)據(jù)倉(cāng)庫(kù)的功能包括對(duì)元數(shù)據(jù)源的ETL、元數(shù)據(jù)的Warehouse以及終端用戶的各種分析、挖掘、報(bào)告工具。通過(guò)構(gòu)建基于CWM的元數(shù)據(jù)倉(cāng)庫(kù),使得各軟件產(chǎn)品元數(shù)據(jù)有一個(gè)一致的標(biāo)準(zhǔn)(CWM標(biāo)準(zhǔn)),各軟件工具之間只需要建立一個(gè)與元數(shù)據(jù)倉(cāng)庫(kù)連接的 “橋”(即CWM適配器)就能實(shí)現(xiàn)元數(shù)據(jù)的交換或共享。元數(shù)據(jù)倉(cāng)庫(kù)與元數(shù)據(jù)存儲(chǔ)庫(kù)都要求建立通用的元數(shù)據(jù)標(biāo)準(zhǔn),但二者相比有所不同:①元數(shù)據(jù)存儲(chǔ)庫(kù)的刷新周期相對(duì)于元數(shù)據(jù)倉(cāng)庫(kù)來(lái)說(shuō)要慢,元數(shù)據(jù)倉(cāng)庫(kù)的元數(shù)據(jù)是準(zhǔn)實(shí)時(shí)的,而元數(shù)據(jù)存儲(chǔ)庫(kù)的元數(shù)據(jù)通常的刷新周期在1天以上;②元數(shù)據(jù)倉(cāng)庫(kù)所集成的元數(shù)據(jù)不斷變化,其保存元數(shù)據(jù)的更新情況。而元數(shù)據(jù)存儲(chǔ)庫(kù)則是將所有不同時(shí)期的元數(shù)據(jù)都存儲(chǔ)下來(lái)。
通過(guò)對(duì)上述三種元數(shù)據(jù)管理策略的分析,得出如圖1所示的三種策略的對(duì)比圖。
圖1 元數(shù)據(jù)管理策略對(duì)比
基于CWM的元數(shù)據(jù)管理策略使得元數(shù)據(jù)的交換有了一個(gè)統(tǒng)一的具體通用標(biāo)準(zhǔn),解決了用元數(shù)據(jù)橋式的元數(shù)據(jù)交換帶來(lái)的元數(shù)據(jù)的雜亂無(wú)章、不可理解性,以及為了讀懂接收的元數(shù)據(jù),對(duì)交換的元數(shù)據(jù)進(jìn)行從一種格式到另一種格式的轉(zhuǎn)換所帶來(lái)的一定數(shù)量的元數(shù)據(jù)的丟失,破壞了元數(shù)據(jù)的完整性、準(zhǔn)確性。
比較三種元數(shù)據(jù)的功能復(fù)雜度,CWM元數(shù)據(jù)管理策略中使用的CWM元倉(cāng)庫(kù)既滿足了性能的要求,又能夠提供很廉價(jià)的存放元數(shù)據(jù)的場(chǎng)所;而對(duì)于元數(shù)據(jù)中央存儲(chǔ)庫(kù),雖然性能上偏優(yōu),但元數(shù)據(jù)在獲得庫(kù)所提供的復(fù)雜性能的同時(shí)也會(huì)受到它的限制,例如庫(kù)本身的復(fù)雜性和資源需求,導(dǎo)致人員培訓(xùn)費(fèi)用的增加等。
通過(guò)對(duì)三種元數(shù)據(jù)管理策略的分析比較可以發(fā)現(xiàn),搭建基于CWM的元數(shù)據(jù)倉(cāng)庫(kù)的管理策略存在較多的優(yōu)點(diǎn),它能夠以較少的代價(jià)提供豐富的數(shù)據(jù)管理功能,即持續(xù)存儲(chǔ)、允許并發(fā)、對(duì)數(shù)據(jù)倉(cāng)庫(kù)環(huán)境中復(fù)雜元數(shù)據(jù)提供事物訪問(wèn),而相對(duì)于一個(gè)完善的基于元數(shù)據(jù)中央存儲(chǔ)庫(kù)的元數(shù)據(jù)管理系統(tǒng)來(lái)說(shuō),基于CWM的元數(shù)據(jù)管理系統(tǒng)在功能上還存在一些不足,如版本化、生命周期的管理等。針對(duì)基于CWM的元數(shù)據(jù)管理策略不足,本文給出了一種如圖2所示改進(jìn)的元數(shù)據(jù)管理體系結(jié)構(gòu)。
該系統(tǒng)結(jié)構(gòu)主要由元倉(cāng)庫(kù)、可操作的數(shù)據(jù)存儲(chǔ)器、建模工具、元數(shù)據(jù)管理工具及其他一些數(shù)據(jù)庫(kù)應(yīng)用工具或軟件產(chǎn)品等模塊組成。
(1)元倉(cāng)庫(kù):是整個(gè)架構(gòu)的核心,是一個(gè)全局共享元數(shù)據(jù)的以CWM編碼的關(guān)系型數(shù)據(jù)庫(kù),主要用于存儲(chǔ)管理各以CWM為元數(shù)據(jù)標(biāo)準(zhǔn)的工具產(chǎn)生的元數(shù)據(jù)和以CWM規(guī)范建模和操作過(guò)程中所產(chǎn)生的元數(shù)據(jù)以及從各類型數(shù)據(jù)庫(kù)提取的元數(shù)據(jù)。
(2)建模工具:可供用戶對(duì)可操作的數(shù)據(jù)存儲(chǔ)器中的某一主題建立元模型實(shí)例,直接收集元數(shù)據(jù),然后存入到元倉(cāng)庫(kù)中,作為其他工具所需要元數(shù)據(jù)的數(shù)據(jù)源。
(3)元數(shù)據(jù)管理工具:可供對(duì)元倉(cāng)庫(kù)中的元數(shù)據(jù)進(jìn)行增刪改查操作,方便用戶對(duì)元倉(cāng)庫(kù)的更新和維護(hù)。但元倉(cāng)庫(kù)中的元數(shù)據(jù)一般的用戶很難讀懂,很難將一堆雜亂的元數(shù)據(jù)聯(lián)系起來(lái)理解其實(shí)際意義,應(yīng)當(dāng)將其與建模工具相結(jié)合,用圖形化的形式顯示這些元數(shù)據(jù)的元數(shù)據(jù)模型。
(4)與元倉(cāng)庫(kù)連接的各軟件工具、應(yīng)用程序都支持CWM標(biāo)準(zhǔn),它們都實(shí)現(xiàn)了相同的用于元數(shù)據(jù)交換的公共接口,這也意味著任何支持CWM的軟件組件都能夠很容易地理解其他支持CWM的組件的元數(shù)據(jù)實(shí)例,并且能通過(guò)標(biāo)準(zhǔn)的CWM元數(shù)據(jù)接口集來(lái)訪問(wèn)元數(shù)據(jù)。在這些支持CWM的工具與元倉(cāng)庫(kù)的元數(shù)據(jù)交流中,同樣需要一個(gè)元數(shù)據(jù)“橋”,這個(gè)橋可以用一個(gè)CWM適配器的輕量級(jí)的橋代替。
(5)CWM適配器是一個(gè)軟件,它可以理解CWM元模型以及擁有該適配器的軟件產(chǎn)品內(nèi)部的元模型和專有的元數(shù)據(jù)接口。適配器的公共端實(shí)現(xiàn)CWM的標(biāo)準(zhǔn)接口,另一端則連接到產(chǎn)品的特定接口。針對(duì)某一軟件產(chǎn)品或工具寫適應(yīng)它的適配器只需要編寫一次,所以它相對(duì)于其他的元數(shù)據(jù)橋節(jié)省了很多開銷。
在元數(shù)據(jù)管理體系結(jié)構(gòu)中,CWM編碼的元倉(cāng)庫(kù)是整個(gè)架構(gòu)的核心。因?yàn)镃WM本身是一個(gè)面向?qū)ο蟮脑P?,而各軟件產(chǎn)品或工具的元數(shù)據(jù)大部分是建立在關(guān)系數(shù)據(jù)庫(kù)之上,且目前面向?qū)ο蟮臄?shù)據(jù)庫(kù)管理系統(tǒng)不普及[5],因而無(wú)法使用面向?qū)ο蟮腄BMS來(lái)創(chuàng)建一個(gè)元倉(cāng)庫(kù),因此,需要將CWM的面向?qū)ο笤P陀成涞揭粋€(gè)關(guān)系數(shù)據(jù)庫(kù)中,建立基于關(guān)系數(shù)據(jù)庫(kù)的元倉(cāng)庫(kù)。在將CWM面向?qū)ο蟮母拍钣成涞疥P(guān)系表上同時(shí)又要保持元數(shù)據(jù)本身的邏輯結(jié)構(gòu)不變,需要解決CWM中數(shù)據(jù)類型、類、繼承和關(guān)聯(lián)等在關(guān)系數(shù)據(jù)庫(kù)中的映射問(wèn)題。在CWM中大量使用了UML的繼承特性,CWM的21個(gè)元模型包[6]中就存在著大量的泛化層次結(jié)構(gòu),因此,選擇如何實(shí)現(xiàn)泛化層次在元倉(cāng)庫(kù)的開發(fā)是最關(guān)鍵的。為此,下面首先分析了繼承模式的幾種映射策略,選擇了一種實(shí)現(xiàn)方便、節(jié)約存儲(chǔ)空間的方法來(lái)實(shí)現(xiàn)元倉(cāng)庫(kù)的建立,然后討論對(duì)象關(guān)系映射中數(shù)據(jù)類型、關(guān)聯(lián)的映射問(wèn)題。
從類到表的映射并不是簡(jiǎn)單的一一對(duì)應(yīng)關(guān)系,因?yàn)橐粋€(gè)子類可以繼承父類的一些特性和操作,而繼承是UML和面向?qū)ο笙到y(tǒng)的一個(gè)主要特征,它把類組織成逆向的樹形結(jié)構(gòu) (即泛化層次),因此必須考慮泛化層次的對(duì)象的映射問(wèn)題。以圖3所示的CWM關(guān)系型包中的Relational::Trigger的泛化層次為例,給出幾種對(duì)象關(guān)系映射策略。
圖3 Relational::Trigger的泛化層次
(1)整個(gè)泛化層次結(jié)構(gòu)映射成一張表
將一個(gè)完整的泛化層次結(jié)構(gòu)映射成一張表,層次結(jié)構(gòu)中所有類的屬性都存放在這個(gè)表中,每個(gè)實(shí)例對(duì)應(yīng)表中的一行。為了表明一個(gè)對(duì)象實(shí)例是屬于哪個(gè)類的,必須添加一個(gè)屬性“對(duì)象類別”O(jiān)ID,這種映射對(duì)應(yīng)的表如表1所示。這種映射策略的優(yōu)點(diǎn)是結(jié)構(gòu)相對(duì)簡(jiǎn)單,只有一個(gè)單一的表,其缺點(diǎn)是存儲(chǔ)空間浪費(fèi)大、利用率低、類層次間的耦合非常高,當(dāng)泛化層次結(jié)構(gòu)中的某一個(gè)類要增加屬性時(shí),必須將一個(gè)新屬性增加到表中,這將影響到泛化層次中的所有類。
表1 整個(gè)泛化層次映射成一張表
(2)每個(gè)類映射成一張包含該類繼承屬性的表
使用這種映射策略,是將每個(gè)類映射成一張表,在表中既包含該類的屬性又包括其父類的屬性,如表2所示。這種映射策略的優(yōu)點(diǎn)是對(duì)單個(gè)類的查詢操作比較簡(jiǎn)單,但是同樣會(huì)造成存儲(chǔ)空間的浪費(fèi),且類層次間的耦合性較高,當(dāng)父類的結(jié)構(gòu)改變時(shí),子類的結(jié)構(gòu)也要跟著改變。此外在實(shí)現(xiàn)上不方便,因?yàn)镸odelElement有兩個(gè)子類 (Trigger類和 A類),Trigger有一個(gè) ID,A也有一個(gè)ID,它們都是ModelElement的子類。如果這兩個(gè)表的主鍵相同,父類是無(wú)法識(shí)別這兩個(gè)子類的,所以這兩個(gè)ID一定不能相同,因此也就不能使用ID自動(dòng)生成策略。
表2 每個(gè)類映射成一張表(包含該類的屬性又包括其父類的屬性)
(3)每個(gè)類映射成一張只包含該類特有屬性的表對(duì)各個(gè)表進(jìn)行連接
使用這種策略子類對(duì)應(yīng)的表ID應(yīng)該參考父類對(duì)應(yīng)的表的ID,即進(jìn)行主鍵連接,對(duì)應(yīng)的表結(jié)構(gòu)如表3所示。這種策略的優(yōu)點(diǎn)是存儲(chǔ)空間比較小,類間的耦合性比較低,查詢的時(shí)候不用找很多的表,缺點(diǎn)是要進(jìn)行表連接,每當(dāng)增加一個(gè)子類還應(yīng)添加一個(gè)表。
表3 每個(gè)類映射成一張表進(jìn)行連接
由上分析可以得出:(1)第一種策略是將整個(gè)泛化層次映射成一個(gè)表結(jié)構(gòu)。由于CWM元模型包中的泛化層次樹形結(jié)構(gòu)很深,所以會(huì)使得元組很龐大,浪費(fèi)大量的存儲(chǔ)空間,且每次讀取時(shí)需要讀入很多不必要的屬性,因此不適合用這種策略建立元倉(cāng)庫(kù);(2)第二種策略同樣也會(huì)造成存儲(chǔ)空間的浪費(fèi),在實(shí)現(xiàn)上也不方便,亦不適合采用;(3)第三種策略是將每個(gè)類映射成一個(gè)表,每個(gè)表只包含該類含有的屬性,這種方法可節(jié)省存儲(chǔ)空間,雖然查詢操作涉及多個(gè)表的連接操作,連接操作將多個(gè)連接的表組成一個(gè)表較耗時(shí),但在計(jì)算機(jī)速度不斷提高且不要求實(shí)時(shí)性的情況下適宜選用這種策略。所以本文使用第三種策略來(lái)實(shí)現(xiàn)CWM元模型包中各泛化層次結(jié)構(gòu)的映射問(wèn)題,建立元倉(cāng)庫(kù)。
每個(gè)CWM屬性可以是以下三類中的一種:簡(jiǎn)單數(shù)據(jù)類型、枚舉數(shù)據(jù)類型和基于類的數(shù)據(jù)類型。這些CWM的數(shù)據(jù)類型集必須映射到相應(yīng)的T-SQL語(yǔ)言支持的數(shù)據(jù)類型上,如果沒(méi)有直接對(duì)應(yīng)的T-SQL數(shù)據(jù)類型,元倉(cāng)庫(kù)必須創(chuàng)建數(shù)據(jù)結(jié)構(gòu)使其能模仿所要求的類型。如簡(jiǎn)單的數(shù)據(jù)類型映射規(guī)則是:只要將CWM簡(jiǎn)單數(shù)據(jù)類型映射到CORBA IDL類型碼,而后映射到T-SQL數(shù)據(jù)類型即可。
枚舉數(shù)據(jù)類型映射規(guī)則是將每個(gè)CWM枚舉數(shù)據(jù)類型用一個(gè)創(chuàng)建的表表示。枚舉數(shù)據(jù)類型表中的行只有一列,名為_EnumLiteral,它包含枚舉文字值。當(dāng)基于枚舉數(shù)據(jù)類型的列值變化時(shí),新的取值按照該表確定以保持列數(shù)據(jù)的完整性。
基于類的數(shù)據(jù)類型映射規(guī)則,則需要?jiǎng)?chuàng)建一個(gè)基于類的類型的實(shí)例,然后將該實(shí)例的鍵存放在一個(gè)向表示擁有該類屬性的類的表增加的基礎(chǔ)列中。
關(guān)聯(lián)是UML中表示類的實(shí)例間的關(guān)系的一種方法,有一對(duì)一、一對(duì)多、多對(duì)多三種關(guān)聯(lián)。
對(duì)于一對(duì)一關(guān)聯(lián)映射規(guī)則,只要在如圖4所示的兩個(gè)關(guān)聯(lián)類各對(duì)應(yīng)的表中增加一列。
圖4 1:1關(guān)聯(lián)映射
一對(duì)多的關(guān)聯(lián)映射規(guī)則,僅僅需要改變關(guān)聯(lián)的多端的固定表,在該固定表中增加一列,以存放一端的一個(gè)實(shí)例的標(biāo)識(shí)值。如果關(guān)聯(lián)的多端是有序的,則需要在多端的固定表中增加一列,以存儲(chǔ)記錄多端實(shí)例次序的順序值,如圖5所示。
圖5 1:N關(guān)聯(lián)映射
多對(duì)多關(guān)聯(lián)映射規(guī)則需要將關(guān)聯(lián)單獨(dú)映射成一張關(guān)系表,如圖6所示。
本文分析了三種典型的元數(shù)據(jù)管理策略,并進(jìn)行了詳細(xì)的比較,提出了基于CWM管理策略的元數(shù)據(jù)管理體系結(jié)構(gòu),解決了多個(gè)廠商的產(chǎn)品之間的元數(shù)據(jù)交換使用繁瑣而復(fù)雜的軟件工具來(lái)實(shí)現(xiàn)交換的問(wèn)題。CWM為數(shù)據(jù)倉(cāng)庫(kù)和商業(yè)智能環(huán)境下的元數(shù)據(jù)交換制定了一個(gè)標(biāo)準(zhǔn),元倉(cāng)庫(kù)是對(duì)其的映射實(shí)現(xiàn),用元倉(cāng)庫(kù)來(lái)存放管理元數(shù)據(jù),做到元數(shù)據(jù)存儲(chǔ)、管理和交換的協(xié)調(diào)統(tǒng)一。
[1]吳曉淵,寧洪.基于CWM的企業(yè)數(shù)據(jù)集成研究[C].中國(guó)計(jì)算機(jī)大會(huì),2005.
[2]VADUVA A,DITTRICH K R.Metadata management for data warehousing: between vision and reality[C].2001 Int′1 Database Engineering&Amp; Application Symp,2001.
[3]楊華甫,鄧守城,高張.CWM中基于元模式的數(shù)據(jù)集成研究與實(shí)現(xiàn)[J].現(xiàn)代計(jì)算機(jī),2008(8).
[4]聶茹,張虹.數(shù)據(jù)倉(cāng)庫(kù)元數(shù)據(jù)管理模式的分析與比較[J].計(jì)算機(jī)應(yīng)用研究,2005,22(2).
[5]馬思紅.淺談面向?qū)ο髷?shù)據(jù)庫(kù)的技術(shù)和發(fā)展[J].安徽農(nóng)業(yè)科學(xué),2007,35(24).
[6]INMON W H.Buildingthedatawarehouse[M].John Wiley&Sons Inc.2005.