隨著信息社會的到來,計(jì)算機(jī)應(yīng)用已深入到人們?nèi)粘9ぷ髋c生活的各個(gè)應(yīng)用領(lǐng)域,迫切需要建立由若干個(gè)子系統(tǒng)組成的集成計(jì)算機(jī)信息系統(tǒng),以完成更復(fù)雜的功能,解決“信息孤島”問題。這是當(dāng)前異構(gòu)數(shù)據(jù)庫集成研究的關(guān)鍵問題之一。
一、CORBA與異構(gòu)數(shù)據(jù)庫集成
CORBA是國際組織OMG(Object ManagementGroup)發(fā)起和制定的面向分布式對象的技術(shù)規(guī)范,其目的是在分布異構(gòu)環(huán)境下為應(yīng)用軟件的開發(fā)提供一個(gè)公共的框架,實(shí)現(xiàn)信息和資源的共享。CORBA提出基于不同平臺、不同編程語言、不同網(wǎng)絡(luò)協(xié)議的異質(zhì)系統(tǒng)間互操作的“軟件總線”概念,只要各資源插件滿足該總線的規(guī)范要求,就可以實(shí)現(xiàn)不同資源的“即插即用”。
一個(gè)分布式計(jì)算機(jī)信息系統(tǒng)的異構(gòu)性可劃分為3個(gè)層次:最底層是平臺層,如不同的硬件、操作系統(tǒng)或通信協(xié)議;中間層是系統(tǒng)層,如不同種類的數(shù)據(jù)庫管理系統(tǒng),甚至有文件系統(tǒng),它們基于不同的數(shù)據(jù)模型,提供不同的語言;最上層是語義層,由于不同的數(shù)據(jù)庫或文件是獨(dú)立設(shè)計(jì)的,不同系統(tǒng)中的數(shù)據(jù)語義之間存在著沖突。CORBA解決了平臺的異構(gòu)性問題,提供了解決數(shù)據(jù)庫系統(tǒng)異構(gòu)的基礎(chǔ)結(jié)構(gòu),面向?qū)ο髷?shù)據(jù)庫標(biāo)準(zhǔn)ODMG93中對象模型及查詢語言(OQL)在一定程度上實(shí)現(xiàn)了對數(shù)據(jù)庫語義異構(gòu)性的支持。因此,采用CORBA方法和ODMG標(biāo)準(zhǔn),可以實(shí)現(xiàn)具有良好互聯(lián)性的面向?qū)ο蠖鄶?shù)據(jù)源系統(tǒng)的互操作和集成。
實(shí)現(xiàn)信息集成的主要途徑之一是建立異構(gòu)數(shù)據(jù)庫集成系統(tǒng)。異構(gòu)數(shù)據(jù)庫集成系統(tǒng)為用戶提供單一類型的數(shù)據(jù)定義和操作語言,允許同時(shí)訪問多個(gè)獨(dú)立的數(shù)據(jù)數(shù)據(jù)庫。這是通過對成員數(shù)據(jù)庫的相關(guān)部分進(jìn)行轉(zhuǎn)換和集成,為用戶建立統(tǒng)一的集成模式(表示)和接口而完成的。
二、異構(gòu)數(shù)據(jù)庫集成的關(guān)鍵技術(shù)
建立基于CORBA的異構(gòu)數(shù)據(jù)庫集成系統(tǒng),需要解決好幾個(gè)關(guān)鍵的技術(shù)問題:異構(gòu)模式的消除、局部數(shù)據(jù)庫的IDL對象化、CORBA對象定位、查詢處理。
1.異構(gòu)模式的消除
數(shù)據(jù)庫異構(gòu)模式是集成系統(tǒng)第一個(gè)需要解決的問題,此問題主要通過建立全局統(tǒng)一的公共數(shù)據(jù)模式來解。即直接將異構(gòu)的數(shù)據(jù)模式轉(zhuǎn)換到一個(gè)統(tǒng)一的公共模式上。公共數(shù)據(jù)模型由三部分組成:名稱(name)、類型(d_type)、值(value)。
任何在“ORB總線”上傳輸?shù)臄?shù)據(jù),包括局部數(shù)據(jù)庫返回全局庫的結(jié)果數(shù)據(jù)、全局庫返回用戶的結(jié)果數(shù)據(jù)、用戶發(fā)向全局庫的修改數(shù)據(jù)或插入數(shù)據(jù)、全局庫發(fā)向局部系統(tǒng)的修改數(shù)據(jù)或插入數(shù)據(jù),都必須轉(zhuǎn)換成該公共格式表示。包裝器負(fù)責(zé)轉(zhuǎn)換工作。全局庫接受或發(fā)送的數(shù)據(jù)格式均為公共數(shù)據(jù)格式。轉(zhuǎn)換的規(guī)則為:任何局部數(shù)據(jù)庫類型都轉(zhuǎn)換成Any類型傳輸。Any類型相當(dāng)于一個(gè)容器,起到統(tǒng)一傳輸任何類型的作用。公共模型根據(jù)d_type的值規(guī)定了相應(yīng)的操作方法。如模型規(guī)定:t_text對應(yīng)到IDL的八位字節(jié)序列,使用序列的操作方法操作t_text型數(shù)據(jù)。
2.局部數(shù)據(jù)庫的IDL對象化
當(dāng)異構(gòu)模式消解后,下一步所需考慮的一個(gè)重要問題就是如何將局部數(shù)據(jù)庫插入“ORB總線”。該任務(wù)由局部數(shù)據(jù)庫包裝器來完成,即對局部數(shù)據(jù)庫進(jìn)行CORBA封裝,屏蔽其異構(gòu)性,以統(tǒng)一的CORBA對象提供全局訪問接口。封裝策略為:以數(shù)據(jù)庫表為粒度的封裝。局部數(shù)據(jù)庫以數(shù)據(jù)表為最小粒度公布其全局共享數(shù)據(jù)。包裝器將每個(gè)表包裝成一個(gè)獨(dú)立的CORBA服務(wù)對象,提供統(tǒng)一的訪問接口,各表對象訪問方法完全一樣,只通過對象名稱來區(qū)分彼此。而對象名稱被封裝表的名稱具有一對應(yīng)關(guān)系:以表名來命名對象。
該策略具體實(shí)現(xiàn)是這樣的:雖然封裝粒度是表,但每個(gè)局部數(shù)據(jù)庫仍然只有一個(gè)包裝器進(jìn)程,所有該庫中共享表的封裝對象都運(yùn)行在該庫的包裝器進(jìn)程中;并且,對于每個(gè)局部數(shù)據(jù)庫,只有一個(gè)表對象類,通過以不同的參數(shù)實(shí)例化該類,并指定不同的對象名稱來為不同的本地表生成封裝對象。
3.CORBA對象定位
數(shù)據(jù)表被封裝成CORBA對象,對外提供服務(wù);那么,客戶機(jī)如何找到這些對象以使用其服務(wù)呢?也就是說,CORBA如何定位對象?
首先,服務(wù)器把許多對象公布到目錄,提供一些能夠以有意義的方式來識別對象的屬性。接著,客戶機(jī)在目錄中查找對象??蛻魴C(jī)向目錄提供一系列所需屬性,這樣目錄就可返回一系列對象??蛻魴C(jī)得到對象后就可以使用這些對象。
客戶通過表對象提供的統(tǒng)一接口訪問被封裝表中的數(shù)據(jù)。表對象內(nèi)部實(shí)現(xiàn)以下功能:(1)完成公共數(shù)據(jù)格式和本地?cái)?shù)據(jù)格式間的轉(zhuǎn)換。將數(shù)據(jù)轉(zhuǎn)換為公共格式輸出到ORB總線上,或轉(zhuǎn)換為本地格式輸入到本地?cái)?shù)據(jù)庫中。(2)對查詢操作而言,方法實(shí)現(xiàn)體還必須完成翻譯全局SQL語言到本地SQL語言以進(jìn)行相應(yīng)的查詢操作。(3)利用本地?cái)?shù)據(jù)庫專用API訪問本對象對應(yīng)的數(shù)據(jù)表,完成數(shù)據(jù)操作。
4.查詢處理
異構(gòu)數(shù)據(jù)庫集成系統(tǒng)中的查詢處理主要包括查詢分解、查詢變換和全局優(yōu)化三部分。查詢步驟如下:(1)語法檢查:檢查包括:關(guān)鍵詞是否存在、列名和表名是否符合格式等。通過語法檢查后進(jìn)入查詢分解階段,將之分解為子查詢。(2)查詢分解:①確定請求的表對象存在并獲得其對象引用。根據(jù)表名和表對象名的一一對應(yīng)關(guān)系確定表對象是否存在:如存在則獲得其對象引用,否則返回信息告知用戶請求的表不存在。②獲得各表元數(shù)據(jù)信息,檢驗(yàn)請求合理性。③分解查詢。將查詢語句分解成針對各表的子查詢,交給各表對象執(zhí)行。(3)后處理查詢:后處理包括檢查局部返回結(jié)果的行數(shù)是否匹配:對返回結(jié)果進(jìn)行連接運(yùn)算,刪除中間數(shù)據(jù),歸并匯總結(jié)果;按原始請求順序?qū)Y(jié)果字段排序等。
總而言之,CORBA為設(shè)計(jì)和實(shí)現(xiàn)異構(gòu)數(shù)據(jù)庫集成提供了非常好的方法和中間件功能,并且大大減輕了開發(fā)工作量,使系統(tǒng)具有良好的開放性、可擴(kuò)展性和可伸縮性?;贑ORBA異構(gòu)數(shù)據(jù)庫的集成技術(shù)有著廣泛的應(yīng)用前景,有待進(jìn)一步深入研究和開發(fā)。