李 莉, 張賀亮, 趙秋陽, 陳未如, 李 舸
(1.沈陽化工大學計算機科學與技術學院,遼寧沈陽110142; 2.東軟集團股份有限公司,遼寧沈陽110179)
分布式數據庫系統興起于20世紀70年代中期.由于很多新興應用涉及地理上分布的團體或組織的局部業務管理和系統全局管理,采用集中式數據庫管理系統已無法實現應用需求.人們期望符合現實需求的、能處理分散地域的、具備數據庫系統特點的新的數據庫系統出現.由此,分布式數據庫管理系統被提出,并得到迅猛發展.
網絡技術的高速發展,使信息資源實現高度共享,并從根本上改變人們進行信息交流的方式,對教學的影響也必將是深刻的.一方面,它給教育管理模式以及教學模式等帶來巨大影響.另一方面,它可幫助解決傳統課堂教學中存在的問題,對教學過程提供有力支持[1].基于這些,充分利用校園網絡,結合教學特點,開發研制網絡教學平臺可充分發揮其指導學生學習、促進師生交流作用.
本文采用分布式數據庫技術設計開發通用的分布式網絡教學平臺.該系統可充分支持師生網上的教學活動,如進行教學信息發布及瀏覽、輔導答疑、師生交流等操作.另外,可方便實現教學資源的共享.
教學平臺數據庫系統主要設計方案:
(1)采用Amoeba for Aladdin中間件實現異構數據庫系統間的集成.
(2)各分散數據庫可對系統發布共享數據,應用程序通過一套資源注冊機制查找合適的數據源.這樣可將資源定位模塊從傳統分布式程序設計中脫離,便于維護和管理.
(3)建立一個虛擬數據庫,對各個異構數據庫的開放數據進行集成,轉化成統一格式,為程序開發人員提供一個單一邏輯數據視圖.
分布式數據庫系統是地理上分散而邏輯上集中的數據庫系統.即通過計算機網絡將地理上分散的各局域結點連接起來共同組成一個邏輯上統一的大數據庫系統[2].因此可以說分布式數據庫系統是計算機網絡技術和數據庫技術相結合的產物.
分布式數據庫系統中分布數據庫由一個邏輯的虛擬數據庫(稱全局數據庫)和分散在各個場地的局部數據庫(物理上存儲的數據庫)兩級數據庫組成.結點的局部數據庫在邏輯上集成為一個整體,并為分布式數據庫系統的所有用戶使用,這種應用稱全局應用.應用程序與系統實際數據組織相分離,因此數據具有獨立性或透明性.
分布式數據庫系統允許用戶只使用本地的局部數據庫,該應用稱局部應用.這種局部用戶獨立于全局用戶的特性稱局部數據庫的自治性.
分布式數據庫管理系統是分布式數據庫系統的一組軟件,負責分布式數據庫的數據管理和操作[2].由于分布式數據庫管理系統基于分布環境下實現,必須保證邏輯數據的一致性、完整性等,因此,其復雜度遠高于集中式數據庫管理系統.
分布式數據庫管理系統通常由局部場地上的數據庫管理系統,全局數據庫管理系統,全局字典和通信管理系統4部分組成[3].分布式數據庫管理系統按控制方式可分為全局控制集中的DDBMS與全局控制分散的DDBMS.按局部DDBMS類型可分為同構型DDBMS與異構型DDBMS[4].本網絡教學平臺使用的分布式數據庫管理系統屬于全局控制分散的、局部同構型DDBMS.
Amoeba for Aladdin項目,專注分布式數據庫proxy開發,位于Client與DB Server(s)之間,致力于解決數據切分、讀寫分離等功能.對客戶端透明,具有負載均衡、高可用性、sql過濾、讀寫分離、可路由相關的query到目標數據庫、可并發請求多臺數據庫合并結果等特征.
1.3.1 項目的主要功能
(1)降低數據切分帶來的復雜多數據庫結構.
(2)提供切分規則并降低數據切分規則給應用帶來的影響.
(3)降低db與客戶端的連接數.
(4)讀寫分離.
(5)提供異構數據庫(mysql,oracle等)整合能力.
1.3.2 項目特點
(1)Built on Java NIO,采用java NIO框架無阻塞模式,不像傳統的Socket編程在大量并發的情況非常浪費系統資源、且可擴展性較差.
(2)Reusable Server Connection,Amoeba for Aladdin提供數據庫連接的可重用度非常高,在Amoeba for Aladdin系統內所有database connection同時共享給所有連接到Amoeba for Aladdin的客戶端.
(3)提供讀寫分離、數據切分,傳統的讀寫分離技術需要通過客戶端或者相關的database driver技術才能解決,而且客戶端的配置也比較復雜.單臺 database性能總是有限制,基于Amoeba for Aladdin可尋找一種可線性擴展的多數據庫支持.Amoeba for Aladdin為DBA提供一種非常友好的類似SQL語法的數據切分規則,同時客戶端不用擔心過多的Database Server會給應用帶來更多配置.
(4)支持高可用性、負責均衡,Amoeba for Aladdin提供Database連接的異常檢測與連接恢復功能.用戶可節省使用其他昂貴的負載均衡硬件設備,Amoeba for Aladdin提供多臺 Database Server負載均衡策略.
教學資源平臺需要將分散的教學資源進行集成管理,因此要求各局部數據庫具有統一的數據格式.局部數據庫系統原則上也可根據實際需求和數據量,采用任何類型的關系型數據庫管理系統.本文各局部數據庫系統統一使用mysql (mysql4.1以上).局部數據庫以水平分片和垂直分片方式存儲格式統一的分散數據.
以課程資源表(見表1)水平分片為例說明系統的分片設計原則.

表1 課程資源表Table 1 Table of course resource
由于各分片的表主鍵不能重復,所以通過res_id進行水平分片,每個具體的局部數據庫將針對一個有限的res_id范圍進行局部應用,如資源的上傳(見圖1).

圖1 局部資源上傳Fig.1 Local resource upload
對于全局應用系統將用Amoeba for Aladdin作為數據庫訪問的中間件來實現教學資源的集成.資源提供者是各個教師所開放的教學資源,資源保持原始的分布式存儲狀態.資源提供者將自己的資源注冊到Amoeba for Aladdin,同時上傳資源副本到全局數據庫.在中間件上包含所有資源提供者注冊的資源信息.資源請求者包括學生用戶,也包括作為資源提供者的教師.當資源請求者提出訪問請求時,系統向中間件系統提交查詢并將其找到的資源信息返回給資源請求者,資源請求者根據得到的信息向資源提供者提出數據訪問請求,如果資源存儲在本地則可直接進行本地的資源訪問,如果資源存放在異地數據庫上則通過中間件系統進行訪問.中間件系統中同樣可以存放一些重要的資源副本,如果提供者當前由于某種原因(用戶不在線、網絡不通等)不能提供資源,可自動訪問到中間件上的副本資源,將中間件上的資源副本信息交給資源請求者,如圖2所示.

圖2 資源共享結構Fig.2 Resource sharing structure
平臺采用模塊化設計和開發.如圖3所示,平臺一共分為4大模塊:個人信息模塊、課程信息模塊、在線交流模塊以及系統管理模塊.各模塊松散耦合,使平臺中任何一個模塊的變化對系統其他模塊的影響降至最低程度.對任何一個模塊的理解、測試和修改,無須涉及系統的其他模塊.各模塊之間的通信通過數據庫進行.任何一個模塊都針對教師、管理員、學生的不同角色設計不同的功能.

圖3 系統模塊結構Fig.3 System module structure
(1)課程信息模塊.用戶登錄后,可從課程信息模塊中查看到所有課程信息,并可選擇自己感興趣的課程添加到我的課程列表中,方便以后查看.用戶可下載該課程所提供的所有資源,教師還可創建新的課程.
(2)個人信息模塊.包含用戶的個人信息,如姓名,年齡,院系等,用戶登錄后可修改自己的信息,其他用戶只能查看.
(3)討論區模塊.包括在線討論和留言板,用戶登錄后,進入在線交流,學生可通過聊天的方式與當前在線教師進行實時交流.在留言板里,學生把自己的問題通過發帖形式發布到留言板,等待教師的回答,教師通過回帖形式對問題進行解答.
(4)系統管理模塊.本模塊屬于管理員和教師用戶,教師可管理屬于自己課程(我的課程列表中的課程)的討論區,對留言進行修改和刪除,管理員還可對非法用戶進行刪除,以及權限修改等操作.
系統的數據庫中包含7個表:
學生表——學生個人信息;
教師表——教師個人信息;
課程表——課程信息;
學生課程表——學生與選擇課程的對應關系;
教師課程表——教師與選擇課程的對應關系;
管理員表——管理員個人信息;
資源表——資源信息.
中間件系統中保存7個表的完整信息,每個結點數據庫只存放教師的個人、課程及資源信息,這樣每個教師機器只擁有自己的信息.當有請求要訪問該部分信息時,直接訪問教師機器上的結點數據庫.只有在該教師機器當前不可用時,再去訪問中間件數據庫.
系統采用MVC設計模式進行開發,視圖層采用JSF框架,用戶通過瀏覽器訪問系統,看到的只能是視圖層,在視圖層上,用戶進行相應操作.系統中大量的業務操作放置在業務邏輯層,業務邏輯層采用Spring框架進行設計,對業務的操作一般需要操作數據庫,在業務層和數據層間采用基于Hibernate框架的持久層開發.系統架構如圖4所示.

圖4 局部系統架構Fig.4 Local system architecture
系統在windows平臺下進行搭建和開發,采用mysql5.0作為局部數據庫服務器、Amoeba for Aladdin作為分布式數據庫管理系統.由于A-moeba for Aladdin采用跨平臺的java語言編寫,所以對于具體的操作系統平臺沒有特殊要求.另外,系統采用中間件的方式來集成教學資源,所以對于客戶端以及局部應用等均沒有特殊要求,可采用任何當前流行的技術實現.本系統使用Java技術開發實現.
針對各院系對自身教學資源的開放程度,系統將根據Amoeba for Aladdin配置文件的特點制定具體的資源發現機制來支持局部數據庫服務器的擴展.若院系A要對外公布自己的教學資源,其可向Amoeba for Aladdin代理進行注冊,注冊的內容包括:IP地址、端口號、數據庫名、用戶名和密碼.
3.3.1 配置Amoeba for Aladdin
在獲取各局部數據庫服務器的注冊信息后,系統采用XML的Dom解析技術完成amoeba配置文件amoeba.xml與規則文件rule.xml的配置工作,如圖5所示.

圖5 資源定位結構Fig.5 Resource locating structure
3.3.2 訪問Amoeba for Aladdin
系統對各院系公布中間件服務器的訪問信息: IP地址、端口號、登錄用戶名和登錄密碼以及各個資源表的id范圍,各院系便可針對自身的應用需求訪問Amoeba for Aladdin代理來實現異地教學資源的訪問.以某高校用戶訪問本地教學資源和全局教學資源為例,若用戶需要訪問本地資源,只需要通過局部應用就可實現,以減小分布式中間件的網絡通信負擔.若需要訪問全局資源,則需通過分布式代理中間件(Amoeba for Aladdin)找到其他數據庫中的資源或資源目錄,實現機制如圖6所示.

圖6 分布式網絡教學平臺整體結構Fig.6 Global structure of distributed online teaching platform
基于Amoeba for Aladdin的分布式網絡教學資源管理系統,符合全局控制分散的DDBMS體系結構的分布式數據庫要求,實現了網絡教學平臺資源的集成與共享.
系統中的數據庫按照統一的數據管理、分布式的資源存儲模式,以便捷的方式實現各結點資源庫資源的共享.整個系統資源庫的結構對用戶來說是透明的,用戶可通過傳統的訪問方式訪問到系統中所有資源,無需關注資源實際的物理存儲位置.通過大量的系統測試表明本系統極大地提高結點資源庫的訪問效率,減少中心資源庫的訪問壓力,減輕服務器的通信代價.同時相對于傳統教學平臺模式而言,建立在分布式數據庫基礎上的網絡教學平臺,有效地解決了資源和數據分散使用與集中管理的矛盾,很好地實現數據的共享和交換.實現了一個分布化、網絡化,高效實用的教學資源管理平臺.
[1] 劉衛國,謝華,蔡立燕.基于Struts與Hibernate的網絡教學平臺的設計與實現[J].教育信息化,2006(7):26-28.
[2] 薩師煊,王珊.數據庫系統概論[M].2版.北京:高等教育出版社,2004:412-435.
[3] 夏偉偉.分布式數據庫開發平臺的研究[D].北京,中國石油大學,2006:5-16.
[4] 肖凌,劉繼紅,姚建初.分布式數據庫系統的研究與應用[J].計算機工程,2001,27(1):33-34.