隨著傳統的資料庫、計算機網路和數字通訊技術的飛速發展,以資料分布儲存和分布處理為主要特徵的分布式資料庫系統的研究和開發越來越受到人們的關注。但由於其開發較為複雜,在一定程度上制約了它的發展。基於此,本文提出了在.***環境下使用一種新的開發語言c#結合ado.***資料訪問模型來開發分布式資料庫系統,大大簡化了開發過程。
1 分布式資料庫系統
就其本質而言,分布式資料庫系統的資料在邏輯上是統一的,而在物理上卻是分散的。與集中式資料庫相比它有如下主要優點:
? 解決組織機構分散而資料需要相互聯絡的問題。
? 均衡負載。負載在各處理機間分擔,可避免臨界瓶頸。
? 可靠性高。資料分布在不同場地,且存有多個副本,即使個別場地發生故障,不致引起整個系統的癱瘓。
? 可擴充性好。當需要增加新的相對自主的組織單位時,可在對當前機構影響最小的情況下進行擴充。
分布式資料庫系統雖然有諸多優點,但它同時也帶來了許多新問題。如:資料一致性問題、資料遠端傳遞的實現、通訊開銷的降低等,這使得分布式資料庫系統的開發變得較為複雜。幸運的是,微軟的.***開發環境為我們提供了c#開發語言和ado.***資料訪問模型,結合兩者來開發分布式資料庫系統能夠大大簡化開發工作。
2 遠端處理框架和ado.***
開發分布式資料庫系統需要解決的兩個重要問題是:各場地間的資料通訊以及對資料庫的操作及管理。使用c#結合ado.***能夠高效、可靠地解決這兩方面的問題。具體表現為,在c#中通過使用.***遠端處理框架能夠方便地解決資料、命令遠端傳遞問題;c#通過ado.***對資料庫進行操作,使分布式資料庫系統中對資料庫的各種操作變得高效、可靠,同時易於解決資料一致性問題。
2.1 .***遠端處理框架
實現資料和命令的遠端傳遞有三種方式。第一種是使用報文或訊息的方式,把要傳送的資料轉化為流格式,再通過套接字程式設計用報文的形式傳送到遠端主機。此種方法麻煩,不易實現。第二種是使用web service,即各遠端主機提供乙個資料庫查詢服務的web service。這種方式只能對單個場地進行查詢,無法實現多場地的聯合查詢。第三種是使用.***遠端處理框架(.*** remoting framework)技術,它將遠端呼叫的技術細節隱藏起來,服務程式只需通過簡單的設定就可以把本地物件變成為遠端提供服務的遠端物件,客戶端可以像訪問本地物件一樣透明地訪問遠端物件,所有的訊息、報文等都交給.*** remoting物件處理,大大簡化了開發。遠端處理的一般過程如圖1所示:
圖1 遠端處理過程
首先,伺服器端建立乙個伺服器類的例項,遠端處理系統建立乙個表示該類的**物件,並向客戶端物件返回乙個對該**的引用。當客戶端呼叫方法時,遠端處理基礎結構連線檢查型別資訊,並通過通道將該呼叫傳送到伺服器程序。偵聽通道獲得該請求並將其**給伺服器遠端處理系統,伺服器遠端處理系統查詢(或在必要時建立)並呼叫被請求的物件。然後,此過程將反向進行,伺服器遠端處理系統將響應**成訊息並由伺服器通道傳送到客戶端通道。最後,客戶端遠端處理系統通過**將呼叫的結果返回給客戶端物件。
2.2 ado.***
ado.***以xml為核心,是.***資料庫應用程式的解決方案。它使用離線資料結構,資料來源中的資料被快取到資料集(dataset)物件中,使用者無須鎖定資料來源,資料以xml格式儲存。
2.2.1 ado.***管理資料一致性
在分布式資料庫系統中,很可能出現多個使用者同時訪問和修改資料的情況,因此,對於分布式資料庫系統,資料一致性是不可或缺的。ado.***通過使用樂觀一致性方案來控制資料一致性(實際上dataset物件被設計成支援使用樂觀一致性控制機制),即資料行只有在資料庫中真正被更新時才會被鎖定,而在悲觀一致性方案中,資料行在從被提取出來到在資料庫中更新這段時間內一直被鎖定。因此,使用ado.***能夠在更少的時間內響應數量巨大的使用者。
另外,在分布式資料庫系統中,還會經常遇到當使用者修改自從提取出來以來已經被修改的行時,違反一致性原則。對此問題ado.***也作了很好地解決,即使用dataset物件為每一條修改過的記錄維護兩個版本:原始版本和更新版本,在更新的記錄被寫回資料庫之前,先要把資料集中記錄的原始版本與資料庫中的當前版本進行比較,如果兩個版本匹配,就在資料庫中更新記錄;否則,就會出現違反一致性原則的錯誤。
3 例項開發
乙個家用電器連鎖店設有乙個總部和許多分店,總部和分店以及各分店之間經常需要進行各種資訊的查詢(如:商品當日價目表、各店銷售狀況和庫存資訊等),對此組織機構建立分布式資料庫查詢系統,可實現總部和各店資訊的共享,便於統一管理。
3.1 系統設計
3.1.1系統結構圖
系統結構如圖2所示:
圖2 系統結構圖
總部和各分店都配置了一台具有固定ip的伺服器,其它電腦通過集線器與伺服器相連,總部和各分店的伺服器通過通訊網路聯接起來。
3.1.2 系統實現步驟
系統實現分為三個主要步驟。首先,為總部和各分店設計資料庫。由於資料量較大,故採用sql server為每個分店建立銷售和庫存資料庫,同時為總部建立員工資料庫、整個連鎖店的存貨資料庫、信用卡客戶資料庫以及**商資訊資料庫等。其次,需要建立乙個提供資料庫服務(dbserver)的動態鏈結庫(dll),將查詢時所要用到的一些服務(如:遠端物件的發布和獲取等)和函式(如:本地異地資料表的查詢、資料表的遠端建立和刪除、表間的連線和合併等)置入該dll中,各分店都需要使用這個dll,以便查詢時對一些服務和函式進行呼叫。最後,根據實際需要開發客戶端查詢介面。
3.2系統實現的關鍵技術
3.2.1 遠端物件的發布與獲取
系統執行後所要做的第乙個工作是發布本地的遠端物件並獲取其它各店所發布的遠端物件。發布遠端物件時,首先要設定乙個網路埠號,然後建立並註冊乙個通道,最後發布該伺服器端的啟用物件。其它場地的伺服器根據ip位址和網路埠號即可方便地獲取所發布的遠端物件。實現遠端物件發布和獲取的關鍵**如下:
遠端物件的發布:
//建立乙個通道例項,port為指定的網路埠號
tcpchannel mychannel= new tcpchannel (int32.parse(port));
//註冊通道
channelservices.registerchannel(mychannel);
//發布該伺服器端啟用物件
remotingconfiguration.registerwellknownservicetype( typeof ( dbserver ), "store", wellknownobjectmode.singleton);
遠端物件的獲取:
//根據ip位址和埠號獲取相應的遠端物件
try//捕捉異常
catch( nullreferenceexception nullexp )
catch( remotingexception remexp )
3.2.2資料庫的訪問
通過ado.***訪問資料庫,可以方便地連線資料庫,將資料來源中的資料匯入dataset物件中,在dataset物件中可對資料表進行各種操作,而且dataset物件本身也可遠端傳遞。這為開發分布式資料庫系統帶來極大方便。實現資料庫訪問的關鍵**如下所示:
//建立資料庫的連線
string sqlconn = "initial catalog=store;data source=localhost;userid=sa;password=;";
sqlconnection conn= new sqlconnection
(sqlconn);
conn.open();//開啟資料庫
//將資料來源中的資料匯入到資料集物件
tryfinally
3.2.3 查詢
分布式資料庫系統中的查詢一般分為三類:本地查詢、遠端查詢和聯合查詢。本地查詢和集中式資料庫的查詢沒什麼區別;對於遠端查詢,只要獲取遠端物件後,呼叫查詢函式,即可方便地實現;最複雜的是聯合查詢,涉及到多場地之間資料的查詢、表的遠端建立、傳遞、連線、合併等技術。下面以例項介紹聯合查詢的實現。
第二連鎖店要查詢離其較近的第
三、第四連鎖店中所有北京的**商所**的空調的庫存資訊以便調貨,可通過以下步驟實現。首先,獲取總部以及第
三、第四連鎖店所發布的遠端物件。接著,通過遠端物件在總部建立一臨時資料表t1,將查詢到的所有北京的**商資訊存放在t1表中(各分店只有**商名,並不知其所在地,只有總部才有**商的詳細資訊),再將t1表儲存到第三和第四連鎖店。然後讓t1表分別與兩店的庫存表作連線,找出所有北京**商所**的空調庫存資訊(如空調名稱、型號、個數、**等資訊),並將連線結果t2和t3資料表返回到第二連鎖店。最後對t2和t3兩表進行合併,並使用datagrid控制項顯示出來。上述實現中,包含了不同場地之間資料表的複製、傳遞、連線等,所用到的一些函式(如:遠端建立資料表、表與表間的遠端連線、合併等)都放在dll中,可以方便地呼叫。
4 結束語
利用c#的.*** remoting技術能夠方便地解決各場地間資料的通訊問題。另外,c#通過ado.***訪問資料庫,使得對資料庫的操作及管理變得更加高效、可靠。這兩種技術的使用,有效地解決了開發分布式資料庫系統的主要問題,大大減輕了系統開發工作量,並且提高了系統的可靠性和安全性。
利用C 實現分布式資料庫查詢
隨著傳統的資料庫 計算機網路和數字通訊技術的飛速發展,以資料分布儲存和分布處理為主要特徵的分布式資料庫系統的研究和開發越來越受到人們的關注。但由於其開發較為複雜,在一定程度上制約了它的發展。基於此,本文提出了在.net環境下使用一種新的開發語言c 結合ado.net資料訪問模型來開發分布式資料庫系統...
利用C 實現分布式資料庫查詢
本文提出了在.net環境下使用一種新的開發語言c 結合ado.net資料訪問模型來開發分布式資料庫系統,大大簡化了開發過程 隨著傳統的資料庫 計算機網路和數字通訊技術的飛速發展,以資料分布儲存和分布處理為主要特徵的分布式資料庫系統的研究和開發越來越受到人們的關注。但由於其開發較為複雜,在一定程度上制...
利用C 實現分布式資料庫查詢
本文提出了在.net環境下使用一種新的開發語言c 結合ado.net資料訪問模型來開發分布式資料庫系統,大大簡化了開發過程 另外,在分布式資料庫系統中,還會經常遇到當使用者修改自從提取出來以來已經被修改的行時,違反一致性原則。對此問題ado.net也作了很好地解決,即使用dataset物件為每一條修...