覃嗣鳳,顧 平,張 超
(廣西大學(xué)計(jì)算機(jī)與電子信息學(xué)院,廣西 南寧 530004)
隨著軟件應(yīng)用規(guī)模和復(fù)雜度不斷擴(kuò)大,生產(chǎn)效率低、可移植性差和系統(tǒng)維護(hù)更新跟不上軟件技術(shù)發(fā)展等問題逐漸突顯出來(lái)[1]。在此背景下,OMG(Object Management Group,對(duì)象管理組織)提出了一種全新的以模型為中心的軟件開發(fā)方法MDA(Model Driven Architecture)。MDA 以模型為中心,主要定義了3 種模型[2]:計(jì)算無(wú)關(guān)模型(Computation Independent Model,CIM)、平臺(tái)無(wú)關(guān)模型(Platform Independent Model,PIM)、平臺(tái)相關(guān)模型(Platform Specific Model,PSM)。MDA 的主要思想是以模型作為整個(gè)軟件開發(fā)過(guò)程的核心,不同開發(fā)階段使用不同抽象層次的模型對(duì)系統(tǒng)進(jìn)行分析,旨在降低系統(tǒng)中業(yè)務(wù)與技術(shù)的耦合,提高系統(tǒng)的可移植性和可維護(hù)性[3]。
MDA 方法提出后,人們根據(jù)模型驅(qū)動(dòng)思想,由需求分析模型開始,逐步得到設(shè)計(jì)模型,最后自動(dòng)生成數(shù)據(jù)庫(kù)模型,以降低人為原因而導(dǎo)致數(shù)據(jù)庫(kù)系統(tǒng)與需求的差異。目前,已有很多關(guān)系數(shù)據(jù)庫(kù)模型自動(dòng)生成方法的研究,如參考文獻(xiàn)[4-7]等,它們的基本思想是:首先建立與平臺(tái)無(wú)關(guān)的UML 類圖PIM 模型,然后定義類圖PIM 模型到關(guān)系型數(shù)據(jù)庫(kù)PSM 模型的轉(zhuǎn)換規(guī)則,將類圖PIM 轉(zhuǎn)換成關(guān)系型PSM,最后生成數(shù)據(jù)庫(kù)實(shí)現(xiàn)代碼。
HBase 數(shù)據(jù)庫(kù)是當(dāng)下應(yīng)用廣泛且非常適合大數(shù)據(jù)處理的非關(guān)系型數(shù)據(jù)庫(kù),HBase 數(shù)據(jù)庫(kù)依托于谷歌Hadoop 集群,具有高性能、高可靠性、高可擴(kuò)展性和靈活的數(shù)據(jù)模型等優(yōu)點(diǎn)。由于HBase 自身的巨大優(yōu)勢(shì),越來(lái)越多的Web 應(yīng)用開始嘗試在其上構(gòu)建數(shù)據(jù)中心,傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)到HBase 數(shù)據(jù)庫(kù)的遷移以及HBase 數(shù)據(jù)模型的設(shè)計(jì)等都成為了比較熱門的研究問題。
本文以MDA 方法為思想,以UML 類圖模型為基礎(chǔ),研究HBase 數(shù)據(jù)模型的自動(dòng)生成方法,讓數(shù)據(jù)庫(kù)設(shè)計(jì)人員從手工的設(shè)計(jì)中解脫出來(lái),更專注需求分析,從而得到HBase 數(shù)據(jù)模型。這種建模方法不易產(chǎn)生設(shè)計(jì)人員與客戶之間對(duì)數(shù)據(jù)庫(kù)理解上的差異,并且為NoSQL 數(shù)據(jù)模型的自動(dòng)化開發(fā)提供了一個(gè)啟發(fā)式的方案。
HBase[8]是一個(gè)稀疏的、分布式的、持久化的多維有序映射,是目前比較流行的NoSQL 數(shù)據(jù)庫(kù)。HBase 是一種專門為半結(jié)構(gòu)化數(shù)據(jù)和水平可擴(kuò)展性設(shè)計(jì)的數(shù)據(jù)庫(kù)。類似于關(guān)系型數(shù)據(jù)庫(kù),HBase 使用表作為頂級(jí)結(jié)構(gòu)來(lái)存儲(chǔ)數(shù)據(jù)。
HBase 模式里的邏輯實(shí)體概括在HBase 表里,數(shù)據(jù)按行存儲(chǔ),行由行健RowKey 唯一標(biāo)識(shí),RowKey 按照字典序進(jìn)行排序。HBase 表中,行里的數(shù)據(jù)按照列簇ColumnFamily 分組歸類,一張表中至少有一個(gè)列簇。一個(gè)列簇下包含若干屬性相關(guān)并且訪問模式相似的列Column。RowKey、ColumnFamily 和Column 一起確定一個(gè)數(shù)據(jù)單元Cell,存儲(chǔ)在單元里的數(shù)據(jù)稱為單元值Value,即應(yīng)用系統(tǒng)需要持久化的數(shù)據(jù)。單元值沒有數(shù)據(jù)類型,視為字節(jié)數(shù)組。存儲(chǔ)在HBase 數(shù)據(jù)庫(kù)里的數(shù)據(jù)單元有時(shí)間版本,時(shí)間版本用時(shí)間戳TimeStamp 標(biāo)識(shí)。HBase 邏輯數(shù)據(jù)模型如圖1 所示。
圖1 HBase 邏輯數(shù)據(jù)模型
目前,MDA 還處于發(fā)展階段,模型轉(zhuǎn)換方法也有很多種,例如手動(dòng)轉(zhuǎn)換方法、基于規(guī)則的轉(zhuǎn)換方法[9]、基于關(guān)系代數(shù)的轉(zhuǎn)換方法[10]和基于元模型映射的轉(zhuǎn)換方法[11]等。本文使用基于元模型的轉(zhuǎn)換方法實(shí)現(xiàn)UML 類圖到HBase 數(shù)據(jù)模型的自動(dòng)轉(zhuǎn)換。
基于元模型的轉(zhuǎn)換方法以元對(duì)象設(shè)施[12](Meta Object Facility,MOF)為基礎(chǔ)。MOF 是OMG 的一個(gè)標(biāo)準(zhǔn),是為了統(tǒng)一各種建模結(jié)構(gòu)而誕生的。MOF 框架共分為4 層,從上到下稱為:M3 層(元元模型層)、M2 層(元模型層)、M1 層(模型層)、M0 層(實(shí)例層)?;谠P偷哪P娃D(zhuǎn)換方法的基本思想是:以M2 層元模型間元素的映射作為轉(zhuǎn)換規(guī)則,通過(guò)實(shí)現(xiàn)M2 層元模型間的轉(zhuǎn)換來(lái)實(shí)現(xiàn)M1 層模型的轉(zhuǎn)換,即模型轉(zhuǎn)換規(guī)則是在M2 層的元模型間定義的,而實(shí)際的轉(zhuǎn)換卻發(fā)生在M1 層。
ATL[13]是Atlas 轉(zhuǎn)換語(yǔ)言的簡(jiǎn)稱,是ATLAS 研究組為回應(yīng)OMG 的MOF/QVT 提案而創(chuàng)立的模型轉(zhuǎn)換語(yǔ)言。ATL 模型轉(zhuǎn)換框架是一種基于元模型映射方法的具體實(shí)現(xiàn),ATL 屬于開源的項(xiàng)目,其模型轉(zhuǎn)換的層次結(jié)構(gòu)如圖2 所示[14]。
圖2 ATL 模型轉(zhuǎn)換框架
圖2 中Ma、Mb對(duì)應(yīng)MOF 框架的模型層M1,MMa、MMb對(duì)應(yīng)元模型層M2,MMM 屬于元元模型層M3。其中,Ma是源模型,而Mb是目標(biāo)模型,Ma、Mb分別符合其元模型MMa、MMb。同時(shí)MMa和MMb都符合唯一的元元模型MMM。Mt是一個(gè)模型轉(zhuǎn)換實(shí)例,它符合模型轉(zhuǎn)換的元模型MMt,MMt也符合元元模型MMM。
在ATL 框架中,唯一的元模型是Ecore,相當(dāng)于MOF。MMa和MMb是由Ecore 創(chuàng)建的元模型。Ma和Mb是符合這些元模型的模型實(shí)例。MMt已經(jīng)由ATL定義,Mt則是需要自行編寫的模型轉(zhuǎn)換程序。所以,一個(gè)完整的ATL 模型轉(zhuǎn)換框架需要4 個(gè)部分:源元模型MMa、目標(biāo)元模型MMb、源模型Ma和模型轉(zhuǎn)換程序Mt。生成目標(biāo)模型Mb。
在本文中,UML 類圖和HBase 數(shù)據(jù)模型是一個(gè)具體的模型,對(duì)應(yīng)于ATL 模型轉(zhuǎn)換框架中的Ma和Mb,要實(shí)現(xiàn)基于元模型的UML 類圖到HBase 的轉(zhuǎn)換,首先要構(gòu)建類圖元模型MMa和HBase 元模型MMb,然后設(shè)計(jì)源元模型各元素到目標(biāo)元模型各元素的模型轉(zhuǎn)換規(guī)則Mt,最后以此轉(zhuǎn)換規(guī)則實(shí)現(xiàn)具體的UML 類圖到HBase 數(shù)據(jù)模型的轉(zhuǎn)換。
類圖[15]是描述類、接口、協(xié)作以及它們之間關(guān)系的圖,在軟件結(jié)構(gòu)設(shè)計(jì)階段,類圖是不可或缺的模型。在數(shù)據(jù)庫(kù)的設(shè)計(jì)過(guò)程中,人們常用類圖作為數(shù)據(jù)庫(kù)設(shè)計(jì)的藍(lán)圖,即用類圖為數(shù)據(jù)庫(kù)建立邏輯數(shù)據(jù)模型。本文主要研究需要持久化的實(shí)體類及實(shí)體類之間的關(guān)系,實(shí)體類之間的關(guān)系主要有普通關(guān)聯(lián)關(guān)系、泛化關(guān)系、聚合關(guān)系和組合關(guān)系等。本文類圖元模型如圖3所示。
圖3 類圖元模型
從類圖元模型可知:UML 類圖中的任何一個(gè)元素都是ModelElement,并且有一個(gè)name;DataType 是UML 類圖原始數(shù)據(jù)類型;Class 代表類,Class 中包含一個(gè)實(shí)體類標(biāo)識(shí)符persistentTag,Class 中有多個(gè)Attribute,還可以有多個(gè)父類parent;Attribute 是類的屬性,由類識(shí)別屬性標(biāo)識(shí)符OIDTag、列簇標(biāo)識(shí)符colFamilyTag、多值屬性標(biāo)識(shí)符multiValueTag 等組成,Attribute 有type 類型,type 可以是DataType 類型或者Class 類型;Association 是類之間的關(guān)聯(lián)關(guān)系,由關(guān)聯(lián)的多重性、組合關(guān)系標(biāo)識(shí)符isComposition 組成,Association 有關(guān)聯(lián)源端sourceClass 和目標(biāo)端targetClass。
以上是本文建立的UML 類圖元模型,本文定義的任何類圖模型都必須滿足這些規(guī)則。在ATL 模型轉(zhuǎn)換框架中,需要用Ecore 來(lái)定義元模型,Ecore 元模型最終以XMI 格式存儲(chǔ)。根據(jù)它的語(yǔ)法,將圖3 定義的類圖元模型轉(zhuǎn)換為XMI 文件,文件名稱為“UMLClass”,文件內(nèi)容片段如圖4 所示。
圖4 類圖元模型XMI 文件內(nèi)容
ATL 模型轉(zhuǎn)換框架中,還需要定義目標(biāo)元模型MMb,即HBase 數(shù)據(jù)庫(kù)元模型。由上文的介紹可知,HBase 數(shù)據(jù)模型中主要包含5 個(gè)元素:HTable、RowKey、TimeStamp、ColumnFamily、Column。其中時(shí)間戳TimeStamp 只是一種時(shí)間維度,是為保留同一種數(shù)據(jù)多個(gè)時(shí)間版本而進(jìn)行的數(shù)據(jù)庫(kù)設(shè)置,因此HBase數(shù)據(jù)庫(kù)模式的設(shè)計(jì)可以不用考慮這一項(xiàng)。HBase 數(shù)據(jù)庫(kù)元模型如圖5 所示:HBase 由HTable 組成,HTable 由一個(gè)行健RowKey、一到多個(gè)列簇Column-Family 組成,而每一個(gè)列簇ColumnFamily 下有多個(gè)列Column。HBase 模型中所有的模型元素定義了name屬性。
圖5 HBase 數(shù)據(jù)庫(kù)元模型
HBase 數(shù)據(jù)庫(kù)元模型相對(duì)應(yīng)的XMI 文件內(nèi)容片段如圖6 所示,文件名為“HBase”。
圖6 HBase 元模型XMI 文件內(nèi)容
由于需求在不斷地變化,源模型也會(huì)相應(yīng)發(fā)生改變,因此有必要在UML 類圖模型和HBase 數(shù)據(jù)庫(kù)模型之間建立映射規(guī)則,當(dāng)需求發(fā)生變更時(shí),僅需要對(duì)源模型進(jìn)行修改,即可自動(dòng)生成新的數(shù)據(jù)庫(kù)目標(biāo)模型。在HBase 數(shù)據(jù)庫(kù)中,實(shí)體的容器是表,表中的每行代表實(shí)體的一個(gè)實(shí)例,故可以將實(shí)體類轉(zhuǎn)換成HBase 數(shù)據(jù)庫(kù)中的表,具體的轉(zhuǎn)換規(guī)則由下文給出。
2.4.1 基本轉(zhuǎn)換
1)類數(shù)據(jù)類型的轉(zhuǎn)換:UML 類圖元模型中的DataType 代表了在類圖中所定義的基本數(shù)據(jù)類型,由于HBase 中的數(shù)據(jù)是沒有數(shù)據(jù)類型的,所有的數(shù)據(jù)都以字節(jié)數(shù)組的方式存儲(chǔ),所以不用考慮類圖數(shù)據(jù)類型到HBase 數(shù)據(jù)類型的轉(zhuǎn)換。
2)類的轉(zhuǎn)換:將類映射為HBase 中的表時(shí),需要對(duì)類之間的繼承關(guān)系進(jìn)行分析處理。由于HBase 數(shù)據(jù)庫(kù)面向列存儲(chǔ)的特點(diǎn),可以將超類的屬性下移,即每個(gè)子類對(duì)應(yīng)的數(shù)據(jù)庫(kù)表中既包含該子類的屬性,也包含該子類所繼承的屬性。一般情況下,并不是所有的類都需要持久化到數(shù)據(jù)庫(kù)的,只有實(shí)體類才需要持久化。因此,在類中添加persistenceTag 標(biāo)識(shí)符,persistenceTag 為true 則該類為需要持久化的類,將該類轉(zhuǎn)換為HBase 數(shù)據(jù)庫(kù)中的表,類名轉(zhuǎn)換成表名。
3)類識(shí)別屬性的轉(zhuǎn)換:類的識(shí)別屬性可以唯一地精確識(shí)別出類的一個(gè)實(shí)例(也就是表中的一行),故將類中的識(shí)別屬性映射為HBase 表的行健RowKey。一個(gè)類經(jīng)常由多個(gè)屬性識(shí)別出來(lái),則將多個(gè)識(shí)別屬性拼接起來(lái),成為HBase 中的RowKey。
4)類非識(shí)別屬性的轉(zhuǎn)換:類中的普通屬性是用來(lái)描述類的基本特征的,可以將所有基本數(shù)據(jù)類型的非識(shí)別屬性映射為HBase 表中的列Column。屬性之間的相關(guān)性(即屬性被同時(shí)訪問的可能性)使用標(biāo)識(shí)符ColFamilyTag 標(biāo)記,ColFamilyTag 將列劃分為不同列簇下的列,列簇名為ColFamilyTag 的值。對(duì)于如Address 等多值類型的屬性,由于HBase 數(shù)據(jù)庫(kù)不像傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)那樣有范式約束,故可以將Address 的屬性展開,分別轉(zhuǎn)換為同一列簇下的不同列。
基本轉(zhuǎn)換如圖7 所示:User 類中,識(shí)別屬性u(píng)ser_name 轉(zhuǎn)換為行健RowKey;User 表中user_email、user_add 等基本用戶信息因?yàn)樵L問模式相似,被一起訪問到的概率大,所以被劃分到同一列簇user_Infor 下面,user_password 因?yàn)楸粏为?dú)訪問的機(jī)會(huì)更多,劃分給另一列簇user_Acc。由于HBase 是無(wú)數(shù)據(jù)類型數(shù)據(jù)庫(kù),所以這里不用考慮數(shù)據(jù)類型之間的轉(zhuǎn)換。
圖7 基本轉(zhuǎn)換
2.4.2 關(guān)聯(lián)關(guān)系的轉(zhuǎn)換
關(guān)聯(lián)的多重性可以分為一對(duì)一關(guān)聯(lián)、一對(duì)多關(guān)聯(lián)、多對(duì)多關(guān)聯(lián)3 種。在傳統(tǒng)關(guān)系數(shù)據(jù)庫(kù)模式設(shè)計(jì)當(dāng)中,為了減少數(shù)據(jù)冗余和使數(shù)據(jù)庫(kù)結(jié)構(gòu)更加合理,人們總結(jié)出多種規(guī)范的關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)模式,如第一范式、第二范式、第三范式和BCNF 范式等。這些規(guī)范將一對(duì)一關(guān)聯(lián)、一對(duì)多關(guān)聯(lián)建模為外鍵,而將多對(duì)多關(guān)聯(lián)建模為連接表,以使2 張表產(chǎn)生聯(lián)系。而像HBase、MongoDB 等NoSQL 數(shù)據(jù)庫(kù)是數(shù)據(jù)模式非常靈活的數(shù)據(jù)庫(kù),而且沒有外鍵約束和表間的連接操作。為了設(shè)計(jì)出最能滿足實(shí)際情況的數(shù)據(jù)庫(kù),往往會(huì)違反范式的約束將數(shù)據(jù)進(jìn)行反規(guī)范化處理,從而提高數(shù)據(jù)庫(kù)的性能。
1)普通關(guān)聯(lián)關(guān)系的轉(zhuǎn)換:通常情況下,HBase 中的表可以設(shè)計(jì)為高表和寬表2 類[16]。前者指表中列少而行多的情況,后者指列多而行少的情況。在一對(duì)一或一對(duì)多聯(lián)系中,可以把表設(shè)計(jì)成高表形式,即由一方的識(shí)別屬性和另一方的識(shí)別屬性組合成為行健。組合行健的設(shè)計(jì)使應(yīng)用程序可以根據(jù)組合行健中的字段來(lái)使2 張表產(chǎn)生聯(lián)系。對(duì)于多對(duì)多關(guān)聯(lián),可以把表設(shè)計(jì)成寬表形式,即為每一邊的表都新建一個(gè)列簇,列簇中的列存放對(duì)方的行關(guān)鍵字,以此來(lái)關(guān)聯(lián)2 張表。一對(duì)多和多對(duì)多關(guān)系的轉(zhuǎn)換如圖8、圖9 所示。
圖8 一對(duì)多關(guān)系的轉(zhuǎn)換
圖9 多對(duì)多關(guān)系的轉(zhuǎn)換
2)聚合關(guān)系的映射:聚合是整體/部分關(guān)系的一種,其中整體端由多個(gè)部分端組成,聚合關(guān)系轉(zhuǎn)換到HBase 模型時(shí)可以采用與普通關(guān)聯(lián)關(guān)系相同的轉(zhuǎn)換方法。
3)組合關(guān)系的映射:組合關(guān)系是一種很強(qiáng)形式的聚合。因?yàn)榻M合關(guān)系中整體與部分之間緊密相連的關(guān)系,以及HBase 面向列存儲(chǔ)和不支持表間連接操作等特點(diǎn),可以將組合關(guān)系中的部分端內(nèi)嵌到整體端中去,即在生成的整體表中新建一個(gè)列簇存放部分端中所有屬性轉(zhuǎn)換成的列,因?yàn)椴糠侄酥荒鼙灰粋€(gè)整體端共享,所以部分端不需要單獨(dú)建表。組合關(guān)系的轉(zhuǎn)換如圖10 所示。
圖10 組合關(guān)系的轉(zhuǎn)換
2.4.3 模型轉(zhuǎn)換規(guī)則的代碼生成
本文采用ATL 模型轉(zhuǎn)換語(yǔ)言對(duì)以上的模型轉(zhuǎn)換思想進(jìn)行描述,得到轉(zhuǎn)換規(guī)則代碼。在ATL 模型轉(zhuǎn)換代碼中,定義了多個(gè)helper 方法,用于完成某項(xiàng)特定的功能,并返回一些屬性或者值。代碼中還定義了模型轉(zhuǎn)換匹配規(guī)則UMLClass2HBase,在元模型層次上,將類模型中每一個(gè)模型元素轉(zhuǎn)換為相應(yīng)的HBase數(shù)據(jù)模型元素。由于篇幅所限,這里僅給出模型轉(zhuǎn)換的代碼片段。
下面通過(guò)一個(gè)博客系統(tǒng)來(lái)驗(yàn)證本文提出的轉(zhuǎn)換方法的可行性。博客系統(tǒng)主要類圖模型如圖11 所示,該模型完全符合上文定義的類圖元模型。
圖11 博客系統(tǒng)類圖模型
從圖11 可知,該博客系統(tǒng)共有6 個(gè)類,類之間的關(guān)系主要包含了泛化關(guān)系、一對(duì)一關(guān)聯(lián)、一對(duì)多關(guān)聯(lián)和多對(duì)多關(guān)聯(lián)。在建立了MMa、MMb、Mt和Ma之后,運(yùn)行ATL 模型轉(zhuǎn)換代碼,自動(dòng)生成XMI 文件格式描述的HBase 數(shù)據(jù)模型。該XMI 文件部分內(nèi)容如下:
本文探討了在MDA 架構(gòu)下建立HBase 數(shù)據(jù)模型的方法,分析了在元模型的基礎(chǔ)上UML 類圖模型與HBase 數(shù)據(jù)庫(kù)模型之間的轉(zhuǎn)換關(guān)系,并使用ATL模型轉(zhuǎn)換語(yǔ)言對(duì)轉(zhuǎn)換規(guī)則進(jìn)行代碼級(jí)的描述,實(shí)現(xiàn)UML 類圖到HBase 數(shù)據(jù)庫(kù)模型的自動(dòng)轉(zhuǎn)換。由于該方法不是針對(duì)某一個(gè)特定的模型,所以對(duì)于符合本文元模型的模型,轉(zhuǎn)換規(guī)則仍具有可重用性。本文提出的元模型比較簡(jiǎn)單,下一步的工作需要考慮更多復(fù)雜的模型,完善模型間的轉(zhuǎn)換關(guān)系,進(jìn)一步提高模型轉(zhuǎn)換的準(zhǔn)確性和完整性。
[1]周吉.支持MDA 的設(shè)計(jì)模式建模與模型轉(zhuǎn)換研究[D].重慶:重慶大學(xué),2012.
[2]Kleppe A,Warmer J,Bast W.MDA Explained:The Practice and Promise of the Model Driven Architecture[M].USA:Addison-Wesley Professional,2003:1-31.
[3]張博,李亞芬,王普.基于Atlas 語(yǔ)言的數(shù)據(jù)庫(kù)模型轉(zhuǎn)換方法的研究[J].計(jì)算機(jī)工程與設(shè)計(jì),2013,34(2):507-514.
[4]鄭娟,馮書興,張立兵.基于MDA 數(shù)據(jù)庫(kù)開發(fā)方法研究[J].計(jì)算機(jī)仿真,2007,24(10):115-118.
[5]雷超陽(yáng),鐘一青,周訓(xùn)斌.基于UML 的數(shù)據(jù)庫(kù)建模技術(shù)研究[J].計(jì)算機(jī)應(yīng)用,2008,27(9):33-36.
[6]曾一,王健,洪媛,等.一種支持MDA 的UML 類圖到RDB 模型的轉(zhuǎn)換方法[J].計(jì)算機(jī)工程與科學(xué),2010,34(2):67-70.
[7]熊信富.基于UML 的關(guān)系數(shù)據(jù)庫(kù)建模研究與實(shí)現(xiàn)[D].成都:電子科技大學(xué),2011.
[8]Nick Dimiduk,Amandeep Khurana.HBase 實(shí)戰(zhàn)[M].謝磊,譯.北京:人民郵電出版社,2013.
[9]張征,何克清,劉進(jìn).一種基于規(guī)則的模型轉(zhuǎn)換方法[J].計(jì)算機(jī)應(yīng)用研究,2005,22(10):16-19.
[10]蔣璐.基于MDA 的UML 模型轉(zhuǎn)換[D].西安:西安電子科技大學(xué),2009.
[11]Tihomir Calic.Exploration of model driven architecture capabilities via comparative utilization of MDA tools[D].Reno:University of Nevada,2006.
[12]David S Frankel.Model Driven Architecture:Applying MDA to Enterprise Computing[M].New Jesey:John Wiley & Sons,Inc.,2003:95-109.
[13]The Eclipse Foundation.ATL/Uer Manual/Overview of the Atlas Transformation Language[EB/OL].http://wiki.eclipse.org/ATL/User_Manual/Overview_of_the_Atlas_Transformation_Language,2007-09-19.
[14]The Eclipse Foundation.ATL/Concepts[EB/OL].http://wiki.eclipse.org/ATL/Concepts,2009-01-09.
[15]王先國(guó).UML 統(tǒng)一建模實(shí)用教程[M].北京:清華大學(xué)出版社,2010:28-30.
[16]Lars George.HBase 權(quán)威指南[M].代志遠(yuǎn),譯.南京:東南大學(xué)出版社,2012:339-341.