劉美健
(天津交通職業(yè)學(xué)院,天津 300110)
海洋環(huán)境數(shù)據(jù)管理與共享服務(wù)一直是海洋信息科學(xué)以及海洋信息化建設(shè)中的重要研究內(nèi)容之一。海洋環(huán)境數(shù)據(jù)是指對人類生產(chǎn)生活產(chǎn)生直接或間接影響的海洋自然和非自然的所有要素整體(馮士筰等,2000)。它是指可以通過儀器設(shè)備直接或間接獲取的有關(guān)海洋環(huán)境的基本特性,如海水溫度、鹽度、風(fēng)、浪、海流等。海洋環(huán)境數(shù)據(jù)來源于人們對海洋的認(rèn)知和利用,是人類開發(fā)海洋、利用海洋和管理海洋的重要決策依據(jù)。海洋具有多維動態(tài)變化特性,相應(yīng)地,反映其特征的海洋環(huán)境數(shù)據(jù)也呈現(xiàn)出多源性、多態(tài)性和多樣性的特點(劉金等,2011;張新等,2010),研發(fā)能夠準(zhǔn)確、有效管理這些數(shù)據(jù)的數(shù)據(jù)庫系統(tǒng)和應(yīng)用系統(tǒng)也比較復(fù)雜。
數(shù)據(jù)平臺是數(shù)據(jù)存儲、管理和服務(wù)的基礎(chǔ)。傳統(tǒng)的數(shù)據(jù)平臺以用戶業(yè)務(wù)為核心進行設(shè)計,當(dāng)數(shù)據(jù)內(nèi)容和業(yè)務(wù)邏輯變化發(fā)生時,需要對相關(guān)數(shù)據(jù)結(jié)構(gòu)重新設(shè)計,以其為基礎(chǔ)的應(yīng)用系統(tǒng)也要重構(gòu),因此效率不高,擴展性和通用性也不足。針對這種不足,本文提出了基于模型驅(qū)動的數(shù)據(jù)平臺設(shè)計方法。該方法以數(shù)據(jù)對象模型為核心,將數(shù)據(jù)和業(yè)務(wù)邏輯分解成最小單元,通過封裝元模型及相互間關(guān)系,來提高數(shù)據(jù)平臺的數(shù)據(jù)存儲和管理效率,以及擴展性和通用性。將其應(yīng)用到海洋環(huán)境數(shù)據(jù)管理中,可解決由于海洋環(huán)境數(shù)據(jù)內(nèi)容變化導(dǎo)致的數(shù)據(jù)庫字段頻繁修改帶來的弊端,為各種以海洋環(huán)境數(shù)據(jù)為基礎(chǔ)的應(yīng)用系統(tǒng)構(gòu)建提供了統(tǒng)一的數(shù)據(jù)環(huán)境支持。
數(shù)據(jù)對象就是對用戶需要訪問的各種類型數(shù)據(jù)的統(tǒng)稱。數(shù)據(jù)對象包括兩類,一類是用戶數(shù)據(jù),是指客觀對象經(jīng)實例化后所得到的、為實現(xiàn)特定業(yè)務(wù)邏輯而必不可少的數(shù)據(jù),如海洋溫度、鹽度、海流等;另一類是系統(tǒng)數(shù)據(jù)是指為了存儲和管理用戶數(shù)據(jù)而附加的數(shù)據(jù),如數(shù)據(jù)庫、表、視圖、存儲過程、SQL語句等。存放用戶數(shù)據(jù)的數(shù)據(jù)庫一般被稱為用戶庫,存放系統(tǒng)數(shù)據(jù)的數(shù)據(jù)庫被稱為系統(tǒng)庫。
模型是對客觀世界中各種實體的抽象。數(shù)據(jù)模型是對數(shù)據(jù)屬性與相互間關(guān)系的抽象表示。元模型,即描述模型的模型(周駿等,2005),它是通過描述模型的語義和建立過程來定義模型結(jié)構(gòu),比模型的抽象程度更高。數(shù)據(jù)對象元模型是對數(shù)據(jù)對象模型及其關(guān)聯(lián)關(guān)系的高度抽象,是數(shù)據(jù)對象模型的基礎(chǔ)組成成分,存放在系統(tǒng)庫中。通過元模型對特定業(yè)務(wù)領(lǐng)域的建模環(huán)境進行規(guī)范定義,可有效解決數(shù)據(jù)一致性、擴展性與可復(fù)用性問題。
模型驅(qū)動開發(fā)MDD(張煒,2007)(Model Driven Development)是由計算機軟件領(lǐng)域的模型管理組織OMG(ObjectManagementGroup)提出的軟件開發(fā)新理念,它是以模型作為軟件開發(fā)的主體和核心,通過模型調(diào)用與轉(zhuǎn)換進行軟件的開發(fā)與維護。
模型驅(qū)動開發(fā)的關(guān)鍵是建模和模型映射,其作用是解決從元模型到模型、從模型到代碼的映射問題,從而將模型映射為在不同技術(shù)平臺上的具體實現(xiàn)。圖1是典型的模型驅(qū)動開發(fā)流程。首先通過對業(yè)務(wù)需求進行整理與分析,抽象出能夠完整地描述業(yè)務(wù)邏輯的、與具體實現(xiàn)技術(shù)和平臺都無關(guān)的平臺無關(guān)模型PIM(Platform IndependentModel);然后針對具體的平臺與實現(xiàn)技術(shù),確定映射規(guī)則,將平臺無關(guān)模型轉(zhuǎn)化為平臺相關(guān)模型PSM(Platform Specific Model);再通過具體實現(xiàn)將平臺相關(guān)模型轉(zhuǎn)換為最終代碼實現(xiàn)。
圖1 模型驅(qū)動開發(fā)流程
與傳統(tǒng)的軟件開發(fā)模式相比,采用模型驅(qū)動架構(gòu)設(shè)計數(shù)據(jù)平臺和應(yīng)用系統(tǒng)時,能夠?qū)?fù)雜的數(shù)據(jù)和業(yè)務(wù)邏輯抽象為易于擴展與維護的元模型(周駿等,2005;羅榮良等,2004),實現(xiàn)對整個數(shù)據(jù)服務(wù)生命周期的管理,同時又便于支持多個業(yè)務(wù)系統(tǒng)的數(shù)據(jù)訪問需求,減少對數(shù)據(jù)庫字段的直接依賴程度,降低數(shù)據(jù)庫維護壓力與復(fù)雜度,提高開發(fā)維護效率。
采用模型驅(qū)動架構(gòu)設(shè)計海洋環(huán)境數(shù)據(jù)平臺,為具有動態(tài)變化特性的海洋環(huán)境數(shù)據(jù)的存儲管理與應(yīng)用系統(tǒng)構(gòu)建提供了便利。從學(xué)科的角度講,海洋環(huán)境數(shù)據(jù)包括海洋水文、氣象、化學(xué)、生物生態(tài)、海洋物理、底質(zhì)、海洋地球物理、海底地形地貌等八大類,每個大類又包括若干個要素,數(shù)據(jù)內(nèi)容、類型、精度隨時發(fā)生著改變。面對這些變化,亟需一種能夠具有時空動態(tài)變化特性的數(shù)據(jù)存儲與管理模式。采用標(biāo)準(zhǔn)格式數(shù)據(jù)文件或傳統(tǒng)的數(shù)據(jù)庫設(shè)計模式,顯然不能滿足這一需求,而模型驅(qū)動的數(shù)據(jù)平臺設(shè)計與實現(xiàn)方法,為解決這一問題提供了有效解決方案,其主要設(shè)計內(nèi)容包括模型設(shè)計和功能設(shè)計。
構(gòu)建數(shù)據(jù)平臺的關(guān)鍵是開發(fā)數(shù)據(jù)對象模型服務(wù),主要由數(shù)據(jù)源及屬性定義、數(shù)據(jù)對象模型抽象、數(shù)據(jù)對象元模型設(shè)計、數(shù)據(jù)操作封裝等環(huán)節(jié)組成(楊延雙等,2007)。
(1)數(shù)據(jù)源屬性定義:主要描述了從數(shù)據(jù)庫中提取數(shù)據(jù)的方法和返回的結(jié)果集,是客戶端通過數(shù)據(jù)平臺獲取數(shù)據(jù)的主要途徑。
(2)數(shù)據(jù)對象模型抽象:實際上就是對應(yīng)用系統(tǒng)特定業(yè)務(wù)邏輯和特定數(shù)據(jù)內(nèi)容的抽象與定義,通過對數(shù)據(jù)對象元模型的組織,描述應(yīng)用系統(tǒng)用戶需求和各種數(shù)據(jù)間的特性與關(guān)聯(lián)關(guān)系。
(3)數(shù)據(jù)對象元模型設(shè)計:設(shè)計存儲數(shù)據(jù)對象元模型及其相互之間的關(guān)聯(lián)關(guān)系的數(shù)據(jù)庫表,其典型實現(xiàn)主要由數(shù)據(jù)庫定義表、數(shù)據(jù)源管理表、屬性定義表、數(shù)據(jù)源關(guān)聯(lián)定義表、數(shù)據(jù)對象驅(qū)動定義表、數(shù)據(jù)源參數(shù)定義表、域定義表、分頁管理表及分組管理表等組成。圖2是數(shù)據(jù)平臺的典型數(shù)據(jù)對象模型圖。客戶端開發(fā)人員創(chuàng)建、編輯、刪除數(shù)據(jù)庫對象及其屬性,實際上就是操作“數(shù)據(jù)庫定義表”中的數(shù)據(jù)記錄;創(chuàng)建、編輯、刪除表對象及其屬性實際上就是操作“數(shù)據(jù)源管理表”的表數(shù)據(jù);創(chuàng)建、編輯、刪除表字段及其屬性實際上就是操作“屬性定義表”中的記錄。
圖2 模型驅(qū)動數(shù)據(jù)平臺的數(shù)據(jù)對象模型圖
(4)數(shù)據(jù)庫操作封裝:包括對數(shù)據(jù)的選擇、更新、刪除基本操作以及存儲過程等復(fù)雜操作封裝,以此將客戶端與SQL語句進行剝離,降低數(shù)據(jù)平臺對SQL的依賴性。例如,當(dāng)客戶端需要查詢某個數(shù)據(jù)表里的數(shù)據(jù)時,只需要調(diào)用相應(yīng)的服務(wù)接口,而不需要在代碼中編寫相應(yīng)的SELECT語句。
“數(shù)據(jù)庫定義表”描述了數(shù)據(jù)庫的基本屬性,定義了數(shù)據(jù)庫類數(shù)據(jù)對象的數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)平臺所涉及到的系統(tǒng)庫和用戶庫的詳細信息都以記錄的形式存放在此表中?!皵?shù)據(jù)源管理表”描述了數(shù)據(jù)源的基本屬性,定義了數(shù)據(jù)源類數(shù)據(jù)對象的數(shù)據(jù)結(jié)構(gòu),以記錄的形式存放數(shù)據(jù)源實例的詳細信息。此表存放在數(shù)據(jù)平臺的系統(tǒng)庫中,數(shù)據(jù)源實例的具體內(nèi)容存放在用戶庫中。對“數(shù)據(jù)源管理表”進行擴展,形成“SQL數(shù)據(jù)源定義表”和“數(shù)據(jù)源錄入管理表”,分別定義了執(zhí)行數(shù)據(jù)源所使用的SQL語句和執(zhí)行數(shù)據(jù)源的方式。在“數(shù)據(jù)源錄入管理表”元模型中,字段“包記錄數(shù)”指定了執(zhí)行數(shù)據(jù)源時每次獲取的記錄數(shù),用于數(shù)據(jù)的分頁顯示;字段“數(shù)據(jù)表打開之前檢查”指定了在數(shù)據(jù)源執(zhí)行之前,預(yù)先執(zhí)行的數(shù)據(jù)源,如復(fù)制前一天的數(shù)據(jù)作為拷貝;字段“新增數(shù)據(jù)條件檢查”用于設(shè)定用戶在需要新增數(shù)據(jù)時進行的存儲過程檢查,以判斷用戶是否能夠新增數(shù)據(jù);字段“數(shù)據(jù)提交后執(zhí)行存儲過程”指定了數(shù)據(jù)源保存成功后所要執(zhí)行的數(shù)據(jù)源。“屬性定義表”中定義了用戶數(shù)據(jù)的所有數(shù)據(jù)庫表字段名稱、類型、長度、是否主外鍵,以及度量單位等信息?!皵?shù)據(jù)源關(guān)聯(lián)定義表”和“數(shù)據(jù)源屬性關(guān)系定義表”定義了各個數(shù)據(jù)庫表之間的相互對應(yīng)關(guān)系,如“一對多”、“多對一”、“一對一”等?!皵?shù)據(jù)對象驅(qū)動定義表”支持同一數(shù)據(jù)源中屬性間的驅(qū)動,包括“前驅(qū)動”和“后驅(qū)動”兩種驅(qū)動類型。“前驅(qū)動”是指一個字段在錄入內(nèi)容后,被驅(qū)動的字段可以自動獲取數(shù)值并填充;“后驅(qū)動”是指一個字段在錄入時,根據(jù)其它字段的錄入內(nèi)容來動態(tài)決定其錄入內(nèi)容?!皵?shù)據(jù)源參數(shù)定義表”定義了執(zhí)行數(shù)據(jù)源所需要的參數(shù)。其中,字段“參數(shù)名稱”指定了具體參數(shù)名;“數(shù)據(jù)類型”指定了參數(shù)的類型;“默認(rèn)值字段”指定了當(dāng)傳入?yún)?shù)為空時所使用的值;“參數(shù)表達式”用于模糊查詢,填寫“L”則表示在傳入的值左邊添加通配符“%”,“R”則表示在右邊添加“%”,“LR”表示在左右兩邊都添加“%”。“域定義表”定義了數(shù)據(jù)項的域,包括范圍域、列表域、條件域、編碼域4種。范圍域是指所錄字段的內(nèi)容必須包含在給定的范圍之內(nèi),例如數(shù)字大于1小于100。列表域是指所錄字段的內(nèi)容是在某個列表內(nèi)容中獲取。
除了上述基本的數(shù)據(jù)對象模型外,在數(shù)據(jù)平臺的具體實現(xiàn)中,還需要包括數(shù)據(jù)分組、分頁等數(shù)據(jù)顯示以及范圍域、列表域等輔助數(shù)據(jù)對象模型。
海洋環(huán)境數(shù)據(jù)平臺的功能設(shè)計體現(xiàn)在兩個層面,一是在服務(wù)器端的業(yè)務(wù)邏輯層,二是在客戶端的應(yīng)用表現(xiàn)層。在業(yè)務(wù)邏輯層,數(shù)據(jù)平臺的服務(wù)對象是應(yīng)用系統(tǒng)發(fā)出的服務(wù)請求,服務(wù)內(nèi)容是數(shù)據(jù)對象;在應(yīng)用表現(xiàn)層,服務(wù)對象是用戶,服務(wù)內(nèi)容是平臺提供的查詢、統(tǒng)計、分析、可視化等功能。
(1)業(yè)務(wù)邏輯層:①實現(xiàn)對數(shù)據(jù)對象元模型的存取。例如,當(dāng)開發(fā)人員需要在數(shù)據(jù)庫中新建一張表時,只需要調(diào)用新建數(shù)據(jù)源模型實例的方法即可實現(xiàn);②實現(xiàn)對用戶數(shù)據(jù)的存取。當(dāng)服務(wù)端接收到來自客戶端的數(shù)據(jù)請求時,則根據(jù)消息中傳遞的參數(shù)連接到相應(yīng)的用戶庫,執(zhí)行相關(guān)數(shù)據(jù)源,獲取用戶數(shù)據(jù),再返回給客戶端。
(2)應(yīng)用表現(xiàn)層:在應(yīng)用表現(xiàn)層,海洋環(huán)境數(shù)據(jù)平臺的主要功能包括:①數(shù)據(jù)加載與更新;②按學(xué)科、空間范圍、獲取時間及手段查詢檢索;③按海區(qū)、學(xué)科或要素、時間范圍統(tǒng)計與專題圖制作;④數(shù)據(jù)站位時空分布可視化繪制;⑤數(shù)據(jù)占有率、更新率等分析計算;⑥數(shù)據(jù)與圖表輸出等輔助功能。
根據(jù)上文所述的數(shù)據(jù)平臺設(shè)計方法,本文采用J2EE框架體系,實現(xiàn)了集成網(wǎng)絡(luò)服務(wù)(Web Service)技術(shù)的海洋環(huán)境數(shù)據(jù)平臺原型系統(tǒng),主要由數(shù)據(jù)庫連接池、數(shù)據(jù)對象模型服務(wù)、操作系統(tǒng)緩存、Web Service接口等組成,其架構(gòu)參見圖3(范玉珍,2008;譚永明,2007;張艷春,2010)。
圖3 模型驅(qū)動海洋環(huán)境數(shù)據(jù)平臺架構(gòu)
數(shù)據(jù)庫連接池是數(shù)據(jù)對象模型服務(wù)獲取數(shù)據(jù)庫數(shù)據(jù)的通道。數(shù)據(jù)對象模型服務(wù)提供對數(shù)據(jù)庫連接池的管理與監(jiān)控,負責(zé)實現(xiàn)海洋環(huán)境數(shù)據(jù)對象模型的存取,以及通過客戶端對數(shù)據(jù)對象的描述,來鎖定并存取數(shù)據(jù)對象所描述的各種環(huán)境數(shù)據(jù)。為了提高平臺響應(yīng)效率,采用了OSCache,將數(shù)據(jù)從數(shù)據(jù)庫中獲取后,緩存到服務(wù)器的內(nèi)存中,為數(shù)據(jù)對象模型服務(wù)提供緩存支持。Web Service接口是數(shù)據(jù)對象模型服務(wù)對外提供服務(wù)的表現(xiàn),由可被客戶端直接調(diào)用的一組服務(wù)接口所組成,客戶端只需要調(diào)用相應(yīng)的接口,即可完成數(shù)據(jù)操作。
表1-5為海洋環(huán)境數(shù)據(jù)平臺具體實現(xiàn)的數(shù)據(jù)庫表(部分字段進行了刪減)。表1“數(shù)據(jù)庫定義表”中定義了各種類型的用戶數(shù)據(jù)庫(如海洋水文數(shù)據(jù)庫、海洋氣象數(shù)據(jù)庫等)和為管理這些用戶數(shù)據(jù)庫所需的系統(tǒng)庫,即海洋環(huán)境數(shù)據(jù)對象模型庫。
表1 數(shù)據(jù)庫定義表
表2“數(shù)據(jù)源管理表”中定義了數(shù)據(jù)源及其屬性,并通過字段“數(shù)據(jù)庫標(biāo)志”與表1“數(shù)據(jù)庫定義表”相關(guān)聯(lián),通過字段“數(shù)據(jù)源標(biāo)志”與表3“數(shù)據(jù)源錄入管理表”、表4“SQL數(shù)據(jù)源定義表”、表5“屬性定義表”、表7“數(shù)據(jù)源參數(shù)定義表”相關(guān)聯(lián)。
表2 數(shù)據(jù)源管理表
表3“數(shù)據(jù)源錄入管理表”中規(guī)定了各個數(shù)據(jù)源的執(zhí)行方式。表4“SQL數(shù)據(jù)源定義表”則為執(zhí)行數(shù)據(jù)源所具體使用的SQL語句,通過這個表解除系統(tǒng)代碼與SQL語句的依賴,增強系統(tǒng)可維護性。
表3 數(shù)據(jù)源錄入管理表
表4 SQL數(shù)據(jù)源定義表
表5存儲了海洋環(huán)境數(shù)據(jù)平臺中的所有用戶數(shù)據(jù)的字段及其屬性定義,比如名稱、類型、長度、是否主鍵、度量單位等,并通過字段“域標(biāo)志”與表6“域定義表”關(guān)聯(lián),明確每個字段的數(shù)據(jù)取值范圍。
表5 屬性定義表
表6 域定義表
圖4為海洋環(huán)境數(shù)據(jù)平臺的客戶端原型實現(xiàn)(圖中波浪調(diào)查站位數(shù)據(jù)為模擬結(jié)果)。原型在系統(tǒng)設(shè)計和編碼實現(xiàn)上,全部采用模型驅(qū)動架構(gòu)?;诜?wù)器端構(gòu)建的各種海洋環(huán)境數(shù)據(jù)模型庫,實現(xiàn)了海洋環(huán)境業(yè)務(wù)化資料、專項資料等的航次查詢、站位查詢、站位繪制等功能模塊。比如,選中ST03調(diào)查區(qū)塊后,可直接繪制出該調(diào)查區(qū)塊的所有站位,并逐個列出站位的具體信息,同時顯示了這些站位資料經(jīng)處理后形成的基礎(chǔ)數(shù)據(jù)的元數(shù)據(jù)信息,以及數(shù)據(jù)使用服務(wù)情況。由于采用模型驅(qū)動,在服務(wù)器端數(shù)據(jù)庫表中分類定義了數(shù)據(jù)的查詢檢索域值,可方便的實現(xiàn)海量數(shù)據(jù)的快速查詢和結(jié)果頁面跳轉(zhuǎn)。
與傳統(tǒng)的直接面向最終用戶業(yè)務(wù)數(shù)據(jù)的海洋環(huán)境數(shù)據(jù)庫設(shè)計方法相比,本文提出的以數(shù)據(jù)對象模型為核心的海洋環(huán)境數(shù)據(jù)平臺設(shè)計方法能夠?qū)⒂脩魯?shù)據(jù)和業(yè)務(wù)邏輯進行解耦,顯著提高了數(shù)據(jù)平臺的實用性、擴展性和通用性,為各種以海洋環(huán)境數(shù)據(jù)為基礎(chǔ)的領(lǐng)域應(yīng)用提供統(tǒng)一的數(shù)據(jù)環(huán)境支持,為海洋環(huán)境數(shù)據(jù)共享提供了一種新方法。目前,模型驅(qū)動的數(shù)據(jù)平臺設(shè)計方法仍存在模型設(shè)計復(fù)雜、實現(xiàn)難度較大等缺點,只有在業(yè)務(wù)邏輯和數(shù)據(jù)交互較多的大型應(yīng)用中,才能發(fā)揮其優(yōu)勢。后續(xù)研究中,應(yīng)進一步在模型解耦、標(biāo)準(zhǔn)化設(shè)計等方面進行探索,以降低該方法的入門難度,促進其推廣應(yīng)用。
圖4 模型驅(qū)動海洋環(huán)境數(shù)據(jù)平臺原型客戶端系統(tǒng)
范玉珍,2003.基于WebSphere平臺的Web Service概念實踐.計算機科學(xué),(34):125-128.
馮士筰,李鳳岐,李少菁,2000.海洋科學(xué)導(dǎo)論.北京:高等教育出版社.
劉金,朱吉才,姜曉軼,等,2011.海洋信息組織與存儲模型研究及其在數(shù)字海洋中的應(yīng)用.海洋通報,(30):73-78.
羅榮良,朱勇,2004.基于模型驅(qū)動架構(gòu)的Web Services應(yīng)用開發(fā).計算機應(yīng)用與軟件,(21):110-112.
譚永明,蘇斌,2007.面向服務(wù)架構(gòu)體系的研究.計算機技術(shù)與發(fā)展,17(3):132-137.
楊延雙,剛冬梅,辛爽,2005.面向服務(wù)的綜合信息服務(wù)系統(tǒng)的設(shè)計與實現(xiàn).北京工業(yè)大學(xué)學(xué)報,31(4):411-419.
張煒,2007.面向業(yè)務(wù)領(lǐng)域的模型驅(qū)動架構(gòu)擴展應(yīng)用.蘇州:蘇州大學(xué).
張新,劉健,石綏祥,等,2010.中國數(shù)字海洋原型系統(tǒng)構(gòu)建和運行的基礎(chǔ)研究.海洋學(xué)報,(32):154-159.
張艷春,2010.基于SCA的SOA編程模型及安全策略的應(yīng)用研究.鄭州:鄭州大學(xué).
周駿,徐林,李征,2005.元模型驅(qū)動的企業(yè)建模.計算機工程與應(yīng)用,(27):215-217.