姚曦
(福建衛生職業技術學院,福建福州350000)
以往人們開發系統大都采用客戶機/服務器的兩層結構,在這種模式中,所有的形式邏輯和業務邏輯均駐留在客戶端,而服務器則成為數據庫服務器。這樣一來服務器就變得很“胖”,被稱為“胖客戶端(FatClient)”。它的弊端十分明顯:“胖”客戶端造成更新繁瑣,日常維護十分困難,一旦客戶端的程序發生改變,就必須對所有的客戶端進行修改。并且隨著客戶端的不斷增加,對帶寬與服務器的壓力也越來越大。
M IDAS是Multi-tier Distributed Application Services Suite(多層分布式應用程序服務包)的縮寫。三層體系結構即客戶應用程序(表示層),應用程序服務器(業務層),遠程數據庫服務器(數據層)。其中數據層負責存儲數據,可以理解為數據庫服務器。業務層負責從數據庫中獲取數據并檢查其的合法性。表示層也可稱做GUI層,負責在客戶端顯示數據。
M IDAS優點在于使三層結構在邏輯上相互獨立。表示層配置在客戶機中,即在客戶端僅是一些界面設計,沒有具體的應用程序。當要追加新業務時,只需統一在應用程序服務器進行中間件的更新,而不影響其它兩層,實現了“瘦”客戶端,彌補了兩層體系結構的不足。
本系統以Delphi7.0為主要的開發平臺,MS SQL Server2000作為數據庫服務器,采用Delphi中的M IDAS基本的開發方法,構建了具有三層體系結構的圖書館信息管理系統。系統在客戶端使用基于TCP/IP協議的Delphi TsocketConnection組件連接中間件。在中間件使用多線程連接數據庫,并使用遠程數據模塊(RemoteDataModle)中的Provider接收來自客戶端的Clientdataset組件的請求,并向數據庫查找想要的數據。而后再通過Provider向客戶端的Clientdataset組件送回數據。最后數據存儲在由MS SQL Server2000構建的數據服務器中。
通過調研,確定了圖書館信息管理系統的兩類管理模式:圖書管理員,學生。他們各自擁有權限管理及功能。圖書管理員有5個操作模塊:圖書管理、學生管理、查詢、圖書操作、報表打印。學生有2個操作模塊:圖書信息檢索、學生信息。
本多層的圖書館管理系統有三個功能模塊來實現。客戶服務器,應用程序服務器,數據庫。他們的實現步驟如下:首先開發遠程應用程序服務器,他負責為客戶服務器提供數據服務。其次開發客戶服務器及客戶端界面,最后連接客戶端應用程序和遠程應用程序服務器。
Delphi建立的遠程應用程序服務器要求是一個EXE服務器,它稱為M IDAS應用程序服務器。通常通過以下幾個步驟來建立:1、建立應用程序。2、建立基于TCP/IP的TremoteDataModule的遠程數據模塊。3、在遠程數據模塊中使用ADOQuery組件連接數據庫。4、使用TdataSetProvider組件連接遠程數據模塊之中的數據集組件。5、編譯、運行遠程應用程序服務器。
本系統使用TADOConnection組件連接數據庫。如果想建立多個數據源連接,則需要同時使用多個TADOConnection組件,否則只需使用一個TADOConnection組件即可。本系統使用connectionstring連接數據庫。連接的語句為“Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;InitialCatalog=圖書館管理系統;Data Source=yx”其中各參數意義如下:
Provider:數據提供者。因為本系統數據庫為SQL,所以選擇SQLOLEDB.1。
Persist Security Info:設置為“false”時,當連接處于打開狀態時,一些安全信息不會返回。
User ID:用戶登錄數據庫的ID。
Initial Catalog:數據庫的目錄名稱。
Data Source:數據庫服務器的名稱。
客戶端使用TClientDataSet通過TCP/IP與遠程應用程序服務器的TdatasetProvider進行連接來獲取數據。使用TClientDataSet的ApplyUpdates方法來保存對數據庫的更新操作。其中TClientDataSet是個存在于內存中的“虛擬表”,它具有緩沖的作用,因此對數據庫的操作非常快。
本系統在客戶服務器上使用Dbgrid來顯示數據,利用Dbgrid中的Dataset連接ClientDataSet,而不是直接連接到數據源。以往當需要在客戶服務器上顯示查找的記錄時,會訪問數據庫依次查詢各條記錄,直至最后一條。這就造成每次顯示數據都必須訪問數據庫,當多客戶端或多次操作時,數據庫的開銷就很大。Dbgrid的優點在于可通過設置ClientDataSet中的PacketRecords選項可以選擇下載多少的數據至內存,并直接在內存中進行查詢操作,無需每次操作都訪問數據庫,極大減少了數據庫的開銷,滿足了多客戶端的需求,提高了系統的負載能力。具體的操作步驟如下:
在客戶服務器中建立三個TclientDataset,在遠程應用程序服務器中建立兩個TDataSetProvider,兩個ADOQury。其中clientDataset1連接Datasetprocider1,DataSetProvider1的數據集為ADOQury1,clientDataset2連接的是Datasetprocide2,DataSetProvider2的數據集為ADOQury2,兩個ADOQury的SQL string語句都是Select*From Notebook(從圖書記錄表中選取所有的信息)。ClientDataset3沒有連接任何其它數據組件。
如果用戶要搜索以“明月”為開頭的數據,那么可能會找到“明月夜”,“明月天”這些數據,但如果直接把數據添加到clientDataset1中,考慮到clientDataset1也許已經存在這些數據,clientDataset1中的數據就會重復。所以必須對clientDataset1進行檢查。如果直接在clientDataset1進行檢查,那么clientDataset1會到數據庫下載所有的數據。因此需要一個無連接任何組件的clientDataset3。把clientDataset1中的數據指定給clientDataset3,用CheckData方法來比較兩個clientDataset的數據是否相同,如果找到相同的數據則在clientDataset2中刪除,最后把clientDataset2中的數據重新更新至clientDataset1即可。
數據的更新操作一般可以分為增加,修改和刪除。本系統使用TclientDataSet組件中的的Insert,Edit,Delete等方法來更新數據,然后調用Post。但與兩層體系結構不一樣的地方在于:調用Post后,實際上并沒有對數據庫服務器中的數據進行更新,而是將更新的內容存儲在客戶服務器的內存中。最后必須調用ApplyUpdates來執行更新操作后,才把數據真正地更新到數據庫服務器。同時還可以為ApplyUpdates設置一個數值來設置容錯率。數值的大小代表了容錯率的高低,并設置出現錯誤時事務的處理方法來提高系統的安全性。
近年來,隨著計算機網絡的發展,對信息的需求越來越大。隨之人們對數據處理的要求也越來越高。不僅要求高負荷,也要求高可靠性和安全性。從長遠看,M IDAS的數據庫結構將會慢慢取代傳統的兩層數據庫結構,成為開發數據庫系統的關鍵技術,為數據處理提高安全穩固的保障。基于這種想法,本文闡述了分布式數據結構的基本結構,對其進行了研究,分析了它的優點。并在研究的基礎上,論述了一個基于M IDAS的圖書館信息管理系統。給出了需求分析和具體的實現方法與主要技術。
[1] W illiam Y.Arms.數字圖書館概論[M].電子工業出版社,2001.
[2] 王志梅.關系數據庫基礎與技術[M].國防工業出版社,2005.
[3] 董良,高磊,朱明峰,高忠濤.深入淺出Delphi6[M].清華大學出版社,2002.
[4] 李維.Delphi5.X ADO/MTS/COM+高級程序設計篇[M].機械工業出版社,2000.
[5] 李維.DELPHI5.X分布式多層應用系統篇[M].械工業出版社,2000.
[6] Arco Cantu.Mastering Delphi7.oel Fugazzotto.2003.