石明翔 田濟瑋 李文齊 郭學節(jié)
摘? 要: 為了解決企業(yè)中由于異構(gòu)數(shù)據(jù)庫增多而帶來的管理難度增加、運維成本高漲等問題,設(shè)計實現(xiàn)了基于云服務(wù)的異構(gòu)數(shù)據(jù)庫管理系統(tǒng),采用面向服務(wù)的SOA架構(gòu),分為應(yīng)用層、云數(shù)據(jù)庫應(yīng)用服務(wù)接口、任務(wù)調(diào)度層、云數(shù)據(jù)庫數(shù)據(jù)處理接口和云數(shù)據(jù)庫等五層,能夠?qū)ocker環(huán)境下的異構(gòu)數(shù)據(jù)庫完成創(chuàng)建、管理、讀寫、分析等操作,為用戶提供了一種高效方便的異構(gòu)數(shù)據(jù)庫管理工具。
關(guān)鍵詞: 云服務(wù); 異構(gòu)數(shù)據(jù)庫; Docker; 數(shù)據(jù)庫管理系統(tǒng)
中圖分類號:TP391? ? ? ? ? 文獻標志碼:A? ? ?文章編號:1006-8228(2018)12-25-04
Abstract: In order to solve the problems such as increased management difficulty and high operation and maintenance cost caused by the increase of heterogeneous databases in enterprises, this paper designed and implemented a cloud service based heterogeneous database management system. The system adopts a service-oriented SOA architecture, which is divided into five layers, namely, application layer, cloud database application service interface, task scheduling layer, cloud database data processing interface and cloud database. It is able to complete the creation, management, reading and writing, analysis and other operations of heterogeneous database in Docker environment, providing users with an efficient and convenient heterogeneous database management.
Key words: cloud service; heterogeneous database; Docker; DBMS
0 引言
近年來,隨著信息化建設(shè)不斷深入,各企事業(yè)單位的數(shù)據(jù)信息呈幾何倍數(shù)增長,從一兩個數(shù)據(jù)庫增長為多個甚至幾十個不同種類、不同結(jié)構(gòu)的數(shù)據(jù)庫,而庫與庫之間又有很多業(yè)務(wù)交叉點,一個數(shù)據(jù)庫的數(shù)據(jù)更新可能會影響到多個數(shù)據(jù)庫。同時,數(shù)據(jù)庫的多樣化帶來了諸多問題:一是不同種類的數(shù)據(jù)庫對系統(tǒng)的軟硬件環(huán)境有著不同要求;二是數(shù)據(jù)庫的異構(gòu)也增加了管理難度,要求管理人員不僅要熟悉多種數(shù)據(jù)庫的接口,而且在管理不同數(shù)據(jù)庫時也要投入大量時間。這些問題導(dǎo)致了數(shù)據(jù)庫運維成本不斷增加,異構(gòu)數(shù)據(jù)庫的整合和管理變得迫在眉睫。
本文主要依托于Docker技術(shù),將多種不同種類的主流數(shù)據(jù)庫(Oracle、SqlServer、Mysql)部署在云平臺上,并開發(fā)基于云服務(wù)的異構(gòu)數(shù)據(jù)庫管理系統(tǒng),能夠?qū)Ξ悩?gòu)數(shù)據(jù)庫完成快速創(chuàng)建、表數(shù)據(jù)快速錄入、全文檢索、一鍵查詢、查詢模版管理、多表查詢、統(tǒng)計分析、導(dǎo)入導(dǎo)出等操作。系統(tǒng)還設(shè)置了用戶管理、權(quán)限管理、選擇數(shù)據(jù)管理、分級數(shù)據(jù)管理等主要模塊,增加了系統(tǒng)安全性,不但為用戶提供了一種清晰、方便的異構(gòu)數(shù)據(jù)庫管理分析工具,還對提高數(shù)據(jù)庫的使用效率,降低企業(yè)人工成本有著很高的實際意義。
1 關(guān)鍵技術(shù)研究與介紹
本系統(tǒng)利用Java語言進行開發(fā),采用面向服務(wù)的SOA架構(gòu),主要涉及云數(shù)據(jù)庫虛擬化、數(shù)據(jù)交換格式、云數(shù)據(jù)庫服務(wù)應(yīng)用接口開發(fā)等技術(shù)。
1.1 云數(shù)據(jù)庫虛擬化
將多種異構(gòu)數(shù)據(jù)庫部署到云端一般使用虛擬化技術(shù),傳統(tǒng)是將不同的數(shù)據(jù)庫安裝到對應(yīng)的虛擬機中,但虛擬機技術(shù)實際上是在原有操作系統(tǒng)中安裝獨立的OS并利用Hypervisor技術(shù)虛擬出CPU、內(nèi)存、IO等設(shè)備來達到資源隔絕的目的,因此,存在耗費資源較大、訪問內(nèi)存效率較低等問題[1-2]。
而近年出現(xiàn)的虛擬容器與虛擬機有著完全不同的實現(xiàn)原理,以Docker為例,它不必再安裝獨立的OS,而是使用更輕量級的LXC(Linux Containers)將虛擬機進程偽裝為HOST進程,并利用命名空間(NameSpace)和群組控制(Cgroups)完成各個Docker進程間的隔離及資源分配,并且所有Docker共享宿主機的內(nèi)核與硬件[3]。虛擬容器相比虛擬機有著讀寫內(nèi)存效率高、啟動時間快及資源利用率高等優(yōu)勢,同時獨有的鏡像發(fā)布也使應(yīng)用的安裝、備份和遷移變得更為便捷[4],因此本文使用Docker技術(shù)將Mysql、Oracle、SqlServer三種數(shù)據(jù)庫部署到云端。
1.2 數(shù)據(jù)交換格式
JSON(JavaScript Object Notation)是由歐洲計算機協(xié)會于1999年制定的ECMAScript中的一個子集,采用輕量級的“名值對”集合來表示和存儲數(shù)據(jù)[5],具備跨平臺、跨語言、易解析、體積小等優(yōu)點,比傳統(tǒng)的XML更適合大數(shù)據(jù)量的網(wǎng)絡(luò)傳輸[6],因此本文選用JSON作為異構(gòu)數(shù)據(jù)庫結(jié)果的表示格式。
1.3 云數(shù)據(jù)庫服務(wù)接口開發(fā)
本文使用基于HTTP協(xié)議的輕量級架構(gòu)Restful WebService開發(fā)應(yīng)用服務(wù)層接口,相比于傳統(tǒng)的SOAP WebService具有簡潔、高效、操作性強等優(yōu)勢[7],并且Restful是一種面向資源的服務(wù),其創(chuàng)建、獲取、修改、刪除資源的操作對應(yīng)著HTTP協(xié)議提供的PUT、GET、POST及DELETE方法,這種針對WEB應(yīng)用的設(shè)計方式,可以減小系統(tǒng)復(fù)雜度和耦合性,提升軟件的可擴展性[8]。
2 系統(tǒng)架構(gòu)及工作流程
本系統(tǒng)由應(yīng)用服務(wù)層、云數(shù)據(jù)庫應(yīng)用服務(wù)接口、任務(wù)調(diào)度層、云數(shù)據(jù)庫處理接口和Docker化的云數(shù)據(jù)庫層等三層兩個接口構(gòu)成,系統(tǒng)架構(gòu)如圖1所示。
<E:\方正創(chuàng)藝5.1\Fit201812\圖\smx圖1.tif>
圖1? 系統(tǒng)架構(gòu)圖
用戶從應(yīng)用層發(fā)出的操作請求首先提交到云數(shù)據(jù)庫應(yīng)用服務(wù)接口,該接口會利用異構(gòu)語義解析技術(shù)將用戶請求解析成不同的邏輯操作集合并發(fā)送到任務(wù)調(diào)度層。任務(wù)調(diào)度層會將這些集合轉(zhuǎn)換為對應(yīng)的處理任務(wù)后發(fā)送給云數(shù)據(jù)庫處理接口,該接口會將不同的子任務(wù)按對應(yīng)數(shù)據(jù)源分發(fā)到不同數(shù)據(jù)庫進行執(zhí)行,最后將返回結(jié)果利用異構(gòu)結(jié)果合成技術(shù)進行轉(zhuǎn)換后以JSON格式發(fā)送至客戶端。
3 系統(tǒng)實現(xiàn)
3.1 應(yīng)用層
應(yīng)用層為系統(tǒng)前端,主要負責與用戶進行直接交互,包括創(chuàng)建服務(wù)、創(chuàng)建數(shù)據(jù)庫、創(chuàng)建數(shù)據(jù)表、數(shù)據(jù)管理、分級表管理、選擇表管理、數(shù)據(jù)查詢、多表查詢、統(tǒng)計分析、用戶角色管理等功能,可以把用戶的操作請求通過Http協(xié)議發(fā)送到云數(shù)據(jù)庫應(yīng)用服務(wù)接口進行處理,并將反饋結(jié)果呈現(xiàn)給用戶。
3.2 云數(shù)據(jù)庫應(yīng)用服務(wù)接口
云數(shù)據(jù)庫應(yīng)用服務(wù)接口位于服務(wù)器端,以Restful WebService形式統(tǒng)一向外提供調(diào)用服務(wù),主要包括用戶操作語句解析和查詢結(jié)果表示等功能。本接口的核心為操作語句解析模塊,當模塊收到應(yīng)用層發(fā)來的操作請求后,會根據(jù)不同的數(shù)據(jù)源將請求解析成對應(yīng)的邏輯操作子集合(例如:選擇、連接、聚合等),并發(fā)送到任務(wù)調(diào)度層進行執(zhí)行,待執(zhí)行結(jié)果返回后再以JSON格式回傳給應(yīng)用層。其工作流程如圖2所示。
3.3 任務(wù)調(diào)度層
任務(wù)調(diào)度層為系統(tǒng)緩沖層,主要負責接收云數(shù)據(jù)庫應(yīng)用服務(wù)接口發(fā)送來的邏輯操作子集合,并根據(jù)對應(yīng)的數(shù)據(jù)源將其轉(zhuǎn)換為處理任務(wù)后進行判斷:如果是非實時任務(wù)則放入緩沖區(qū)等待;如果是實時任務(wù)則放入執(zhí)行區(qū),并依據(jù)先到先服務(wù)原則(FIFO)交由下一層進行處理。其處理流程如圖3所示。
任務(wù)調(diào)度層的主要功能有以下。
⑴ 任務(wù)區(qū)管理
任務(wù)區(qū)主要包括執(zhí)行區(qū)(實時任務(wù)排隊)和緩沖區(qū)(非實時任務(wù)排隊)。操作任務(wù)被分類后加入相應(yīng)任務(wù)區(qū)中排隊等待,如有新的任務(wù)提交或處理,任務(wù)管理模塊會更新隊列結(jié)構(gòu)。
⑵ 任務(wù)提取
任務(wù)區(qū)中的數(shù)據(jù)結(jié)構(gòu)采用隊列(先進先出)結(jié)構(gòu),每當有新的請求到來時,任務(wù)管理模塊會從對應(yīng)的隊列頭部提取任務(wù)并提交。
⑶ 處理非實時任務(wù)
所有的非實時任務(wù)都會有時間戳屬性,當執(zhí)行時間到達時,任務(wù)管理模塊會將該任務(wù)轉(zhuǎn)換為實時任務(wù)后提交給判斷模塊進行處理。
⑷ 處理實時任務(wù)
為了降低下層數(shù)據(jù)庫處理接口的負載,所有實時任務(wù)在被處理前會加入任務(wù)執(zhí)行區(qū),任務(wù)管理模塊會依據(jù)下層接口的處理速度,從執(zhí)行區(qū)取出待處理任務(wù)進行提交。
3.4 云數(shù)據(jù)庫數(shù)據(jù)處理接口
該層為整個系統(tǒng)的核心,負責將上層執(zhí)行任務(wù)解析成不同數(shù)據(jù)庫的sql語句并執(zhí)行,再將執(zhí)行結(jié)果合成后上傳到任務(wù)調(diào)度層。主要有異構(gòu)語義映射和查詢結(jié)果合成兩個模塊。
⑴ 異構(gòu)語義映射
目前對關(guān)系數(shù)據(jù)庫的操作主要通過結(jié)構(gòu)化查詢語言(SQL)來完成,但是不同數(shù)據(jù)庫產(chǎn)商在實現(xiàn)時并沒有嚴格執(zhí)行ANSI(美國國家標準化組織)標準,這就導(dǎo)致不同數(shù)據(jù)庫所支持的SQL語句在很多細節(jié)方面有所差異,以查看表結(jié)構(gòu)為例,SqlServer語法是exec sp_help @tablename,Oracle語法為desc @tablename,MySql語法為describe @tablename。此外,三種數(shù)據(jù)庫還在修改表名、修改列名、添加約束以及各種函數(shù)使用上存在諸多差異[9]。
為了能讓用戶操作被不同數(shù)據(jù)庫正確執(zhí)行,異構(gòu)語義映射模塊可以將上層傳入的操作任務(wù)通過識別后轉(zhuǎn)換為對應(yīng)數(shù)據(jù)庫所支持的sql語句,并交由相應(yīng)的數(shù)據(jù)源進行執(zhí)行。其核心類圖如圖4所示。
① DBConnection類:數(shù)據(jù)庫連接類。getConnection方法用于返回不同數(shù)據(jù)庫的連接。
② DBOperate接口:數(shù)據(jù)庫操作接口。convertSql用法用于將操作任務(wù)轉(zhuǎn)換為不同數(shù)據(jù)庫的sql語句,execQuery方法用于執(zhí)行查詢操作,execNonQuery方法用于執(zhí)行刪除、更新等非查詢操作。DBOperate接口的實現(xiàn)類為MySqlOperate、OracleOperate和SqlServerOperate,主要用于對MySql、Oracle、SqlServer等數(shù)據(jù)庫進行操作。
③ SemanticMapping類:異構(gòu)語義映射類。receiveTask方法用于接收上一層發(fā)送的數(shù)據(jù)庫操作任務(wù),operate方法用于執(zhí)行操作任務(wù),sendResult方法用于將數(shù)據(jù)庫查詢結(jié)果返回任務(wù)調(diào)度層。
⑵ 查詢結(jié)果合成
查詢結(jié)果合成模塊主要將異構(gòu)數(shù)據(jù)庫返回的結(jié)果合成為具有相同格式的結(jié)果集,再以JSON形式返回給任務(wù)調(diào)度層。其主要步驟如下。
① 查詢結(jié)果合成模塊通過MySqlOperate、OracleOperate、SqlServerOperate等數(shù)據(jù)庫操作類獲取異構(gòu)數(shù)據(jù)源數(shù)據(jù)。
② 利用Mybatis框架中的ORM技術(shù)將數(shù)據(jù)庫表映射為Java的POJO對象,其中數(shù)據(jù)表的列被映射為對象屬性,數(shù)據(jù)表的各行記錄被轉(zhuǎn)換為各個持久化對象。
③ 利用基于哈希表的集合差集算法去除記錄集中的重復(fù)值并進行合并。算法的核心代碼如下:
HashMap differenceFilter(HashMap<String, String>
map1,HashMap
HashMap resultMap=(HashMap)map1.clone();
//將map1中的所有記錄拷貝至resultMap
Iterator<Entry<String, Integer>> it1=
map1.entrySet().iterator();
while(it1.hasNext()) { //通過遍歷,找出存在于map2但不
存在于map1中的所有記錄,并添加到resultMap中
Entry<String, String> entry1=it1.next();
String value2=tempMap.get(entry1.getKey());
if(value2==null||(!value2.equals(entry1.getValue()))) {
resultMap.put(entry1.getKey(),entry1.getValue());
}
}
return resultMap;
}
④ 將最終結(jié)果表示為JSON格式,返回給任務(wù)調(diào)度層。
4 結(jié)束語
本文依托于云計算平臺,利用Docker虛擬容器技術(shù)將三種不同的異構(gòu)數(shù)據(jù)庫部署到云端,并綜合應(yīng)用Java、JSON、Restful Webservice和Mybatis等技術(shù)設(shè)計并實現(xiàn)了“基于云服務(wù)的異構(gòu)數(shù)據(jù)庫管理系統(tǒng)”,用于對異構(gòu)數(shù)據(jù)庫管理和操作。在系統(tǒng)實現(xiàn)過程中,重點解決了異構(gòu)語義映射、異構(gòu)結(jié)果合成、異構(gòu)數(shù)據(jù)信息表示等技術(shù)難題。通過測試對比分析證明了系統(tǒng)無論是在運行效率還是可擴展性上都有良好的表現(xiàn)。
參考文獻(References):
[1] 柯偉.異構(gòu)數(shù)據(jù)庫中表的相似性查詢系統(tǒng)設(shè)計與實現(xiàn)[D].華中科技大學,2016.
[2] 汪青峰.面向多業(yè)務(wù)的異構(gòu)數(shù)據(jù)庫中間件的設(shè)計與實現(xiàn)[D].北京郵電大學,2016.
[3] 杜寶麗.基于Docker的云數(shù)據(jù)庫服務(wù)系統(tǒng)的設(shè)計與實現(xiàn)[D].西安電子科技大學,2015.
[4] 王男.面向證券業(yè)務(wù)系統(tǒng)的虛擬化測試平臺的研究[D].吉林大學,2015.
[5] JSON[EB/OL].http://json.org/json-zh.html
[6] XML[EB/OL].https://en.wikipedia.org/wiki/XML
[7] 王曉瑞.基于SOA的分布式異構(gòu)數(shù)據(jù)庫數(shù)據(jù)信息同步系統(tǒng)的研究與應(yīng)用[D].河南大學,2016.
[8] 萬一東,謝俊岱.云計算環(huán)境下異構(gòu)數(shù)據(jù)庫整合技術(shù)的研究與實現(xiàn)[J].電腦知識與技術(shù),2013.5:3232-3235
[9] 熊現(xiàn).基于JAVA_XML 的異構(gòu)數(shù)據(jù)同步系統(tǒng)的設(shè)計和實現(xiàn)[D].上海交通大學,2007.