王 品 王建霞
(1邯鄲職業(yè)技術(shù)學(xué)院電子信息工程系;2教務(wù)處,河北邯鄲056005)
隨著網(wǎng)絡(luò)的不斷發(fā)展,同一領(lǐng)域的數(shù)據(jù)信息的共享與集成在網(wǎng)絡(luò)環(huán)境下得以實(shí)現(xiàn)。如何實(shí)現(xiàn)領(lǐng)域內(nèi)數(shù)據(jù)的共享成為本文研究的重要內(nèi)容。由于領(lǐng)域內(nèi)各部門的職能與工作方式各不相同,信息化程度也不盡相同,實(shí)現(xiàn)資源共享變得尤為重要。前臺(tái)客戶端經(jīng)常需要從后臺(tái)數(shù)據(jù)庫中訪問數(shù)據(jù)并在客戶端顯示與維護(hù)數(shù)據(jù),常規(guī)的數(shù)據(jù)訪問操作是利用ADO.NET從后臺(tái)數(shù)據(jù)庫中訪問數(shù)據(jù),再填充到數(shù)據(jù)集中的數(shù)據(jù)表里,并將存入數(shù)據(jù)表中的數(shù)據(jù)綁定到視圖控件中(實(shí)際就是在網(wǎng)絡(luò)中傳輸數(shù)據(jù))。當(dāng)多個(gè)客戶端從后臺(tái)數(shù)據(jù)庫中訪問的數(shù)據(jù)量非常大時(shí),會(huì)使數(shù)據(jù)表中的數(shù)據(jù)量很大,在服務(wù)器端和客戶端將消耗大量的內(nèi)存空間來存放這些數(shù)據(jù),同時(shí),大量的數(shù)據(jù)在網(wǎng)絡(luò)中傳輸時(shí)也會(huì)占用過多的網(wǎng)絡(luò)帶寬,從而降低了整個(gè)應(yīng)用軟件的性能。為了解決上述問題,需要優(yōu)化常規(guī)的數(shù)據(jù)訪問技術(shù),減少訪問的數(shù)據(jù)量,從而提高領(lǐng)域內(nèi)應(yīng)用軟件的整體性能。領(lǐng)域內(nèi)數(shù)據(jù)資源的共享就是對于平臺(tái)內(nèi)各種各樣的數(shù)據(jù)庫中存儲(chǔ)的數(shù)據(jù)的訪問,也就是對數(shù)據(jù)進(jìn)行了添加、刪除、修改和查詢的各項(xiàng)操作,要想實(shí)現(xiàn)數(shù)據(jù)的無阻礙訪問,必須要通過“數(shù)據(jù)訪問技術(shù)”實(shí)施相互通信。隨著訪問技術(shù)的不斷發(fā)展,操作更加簡單,功能更加完善,數(shù)據(jù)訪問速度也越來越快。
1.C/S模式,即客戶端/服務(wù)器模式
客戶端/服務(wù)器模式就是把領(lǐng)域內(nèi)的任務(wù)合理地分配到客戶端和服務(wù)器端,這樣可以減少平臺(tái)的系統(tǒng)開銷,也可以把軟件、硬件環(huán)境的優(yōu)勢充分發(fā)揮出來。C/S模式盡管是開放模式,但是需要針對不同的客戶端操作系統(tǒng)的不同,安裝不同的操作軟件,由此并不能對客戶實(shí)現(xiàn)真正的開放性。
2.B/S模式,即瀏覽器/服務(wù)器模式
隨著網(wǎng)絡(luò)信息的高速發(fā)展,平臺(tái)用戶的需求越來越高,資源信息共享的程度越來越強(qiáng),B/S模式越來越受歡迎,在B/S模式下,不必去考慮用戶機(jī)器安裝的什么操作系統(tǒng),也不必把軟件程序安裝到每個(gè)客戶端,只需要用戶安裝了瀏覽器,同一領(lǐng)域內(nèi)的用戶,都可以訪問新的和現(xiàn)有的應(yīng)用系統(tǒng)平臺(tái),都可以對數(shù)據(jù)進(jìn)行實(shí)時(shí)更新和處理,邏輯組件可以被不同的應(yīng)用模塊所共享。
領(lǐng)域內(nèi)平臺(tái)數(shù)據(jù)的業(yè)務(wù)處理一部分在前臺(tái)實(shí)現(xiàn),但主要的業(yè)務(wù)處理要在后臺(tái)的服務(wù)器上進(jìn)行處理,B/S模式利用先進(jìn)的瀏覽器技術(shù)實(shí)現(xiàn)了C/S模式下需要復(fù)雜軟件才能實(shí)現(xiàn)的操作。隨著瀏覽器技術(shù)的發(fā)展,瀏覽器操作界面越來越直觀,更關(guān)鍵的是對用戶的操作培訓(xùn)要求大大降低,軟件可操作性強(qiáng)。作為用戶只要通過Web瀏覽器,都可以調(diào)用系統(tǒng)資源來完成各種業(yè)務(wù)處理,這樣大大簡化了客戶端,系統(tǒng)維護(hù)與升級的成本和工作量減輕了,用戶的總體擁有成本(TCO)降低了。
3.C/S模式與B/S模式區(qū)別與聯(lián)系
C/S模式中,客戶端需要具備一定的處理數(shù)據(jù)和存儲(chǔ)數(shù)據(jù)的能力,需要把對應(yīng)用軟件的計(jì)算和數(shù)據(jù)合理地分配在客戶端和服務(wù)器兩端,網(wǎng)絡(luò)通信量和服務(wù)器的運(yùn)算量才能降低。由于服務(wù)器連接個(gè)數(shù)和數(shù)據(jù)通信量會(huì)受到一定的限制,C/S模式比較適合于局域網(wǎng)內(nèi)數(shù)目不多的用戶使用。
鑒于C/S模式的數(shù)據(jù)分布特點(diǎn),客戶端萬一出現(xiàn)意外狀況或突發(fā)事件,數(shù)據(jù)的安全性就會(huì)喪失。
另外,對于領(lǐng)域的異地軟件的使用,C/S模式下,所需軟件就要在各地安裝多個(gè)服務(wù)器,并使多個(gè)服務(wù)器之間進(jìn)行數(shù)據(jù)同步。照此看來,每個(gè)數(shù)據(jù)點(diǎn)上數(shù)據(jù)安全性都可能會(huì)影響整個(gè)應(yīng)用的數(shù)據(jù)安全性。
在C/S模式的方案里,對于異地的同一領(lǐng)域內(nèi)都采用在各地安裝域級服務(wù)器,然后再要求數(shù)據(jù)的同步,這些服務(wù)器每天必須同步完之后,最終的數(shù)據(jù)才能傳送到總部。由于個(gè)別數(shù)據(jù)庫因?yàn)榫W(wǎng)絡(luò)故障不能同步,數(shù)據(jù)就無法一致,不能用于決策。
C/S模式不可能看到實(shí)時(shí)數(shù)據(jù),一般都是事后數(shù)據(jù),有可能造成數(shù)據(jù)信息的流失。為了減少數(shù)據(jù)量,C/S模式僅僅上傳中間數(shù)據(jù)報(bào)表,在總部不可能查到各分區(qū)機(jī)構(gòu)的原始數(shù)據(jù)。
而對于B/S模式來講,其數(shù)據(jù)集中存放于總部的數(shù)據(jù)庫服務(wù)器,客戶端不保存任何業(yè)務(wù)數(shù)據(jù)和數(shù)據(jù)庫連接信息,也無需進(jìn)行什么數(shù)據(jù)同步,所以平臺(tái)內(nèi)數(shù)據(jù)的安全自然不成問題。
B/S模式的數(shù)據(jù)是集中存放的,客戶端發(fā)生的每一筆業(yè)務(wù)單據(jù)都直接進(jìn)入到總部的數(shù)據(jù)庫,不存在數(shù)據(jù)一致性的問題。它可以實(shí)時(shí)看到當(dāng)前發(fā)生的所有業(yè)務(wù),方便快速?zèng)Q策,有效地避免了企業(yè)損失。
綜上所述可以得出:B/S模式有著比C/S模式無法比擬的優(yōu)勢,從國外的發(fā)展趨勢來看,也驗(yàn)證了這一點(diǎn)。目前,國外大型企業(yè)軟件要么已經(jīng)是B/S模式,要么正在經(jīng)歷從C/S到B/S模式的轉(zhuǎn)變,B/S模式的大型管理軟件勢必在將來的幾年內(nèi)占據(jù)管理軟件領(lǐng)域的主導(dǎo)地位。
1.數(shù)據(jù)訪問對象DAO
數(shù)據(jù)庫,數(shù)據(jù)表,視圖和索引的處理需要DAO來實(shí)現(xiàn),使用DAO編程,可以訪問并操作數(shù)據(jù)庫,管理數(shù)據(jù)庫的對象和定義數(shù)據(jù)庫的結(jié)構(gòu)等。
關(guān)系數(shù)據(jù)庫系統(tǒng)結(jié)構(gòu)的對象類的集合是由DAO數(shù)據(jù)模型來設(shè)計(jì)的,一個(gè)關(guān)系型數(shù)據(jù)庫系統(tǒng)所需的全部操作的屬性和方法也是由DAO來提供的,它負(fù)責(zé)完成管理數(shù)據(jù)庫的創(chuàng)建,表的定義、表之間關(guān)系的建立,數(shù)據(jù)庫添加、刪除、修改和查詢等操作。
2.ADO.NET
ADO.NET是用于數(shù)據(jù)訪問的.NET Framework的組件,ADO.NET的一個(gè)優(yōu)點(diǎn)是可以離線操作數(shù)據(jù)庫,需要數(shù)據(jù)或更新數(shù)據(jù)的時(shí)候,應(yīng)用程序才對數(shù)據(jù)源進(jìn)行聯(lián)機(jī),這樣可以提高應(yīng)用程序的效率,盡可能減少應(yīng)用程序?qū)Ψ?wù)器資源的占用。
在應(yīng)用程序和數(shù)據(jù)源之間起橋梁作用的是ADO.NET框架中的數(shù)據(jù)提供程序,對于從數(shù)據(jù)源中返回查詢結(jié)果、對數(shù)據(jù)源執(zhí)行命令、將數(shù)據(jù)集中更改傳播給數(shù)據(jù)源都是ADO.NET框架中數(shù)據(jù)提供程序來完成的。
將檢索關(guān)系數(shù)據(jù)存儲(chǔ)在內(nèi)存中是數(shù)據(jù)集和讀數(shù)據(jù)操作,它們是ADO.NET的兩個(gè)主要對象,內(nèi)存中數(shù)據(jù)的關(guān)系表示形式、對數(shù)據(jù)進(jìn)行排序并約束是數(shù)據(jù)集來實(shí)現(xiàn)的,對于數(shù)據(jù)流的快速讀取由讀數(shù)據(jù)來完成。
數(shù)據(jù)集主要完成以下任務(wù):
1)數(shù)據(jù)集可以在多個(gè)離散表之間進(jìn)行導(dǎo)航;
2)對于多個(gè)數(shù)據(jù)源進(jìn)行數(shù)據(jù)傳遞;
3)可以對數(shù)據(jù)進(jìn)行排序、搜索或篩選,重用同樣的記錄集合;
4)可擴(kuò)展樣式表語言轉(zhuǎn)換或查詢,使用XML操作對數(shù)據(jù)進(jìn)行操作。
使用數(shù)據(jù)集可以被繼承來創(chuàng)建一個(gè)強(qiáng)類型的數(shù)據(jù)集,對于設(shè)計(jì)類型的檢查,強(qiáng)類型數(shù)據(jù)集語句的結(jié)束特有優(yōu)勢。數(shù)據(jù)集的結(jié)構(gòu)或關(guān)系被修改后,一個(gè)強(qiáng)類型的數(shù)據(jù)集就被創(chuàng)建,可以將行和列作為對象的屬性公開而集全中的項(xiàng)不公開。
2)ADO.NET的技術(shù)優(yōu)勢
使用ADO.NET訪問技術(shù),目前流行的關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)信息不但能被應(yīng)用程序訪問,就連超文本標(biāo)記語言都能被訪問。應(yīng)用程序中常用的連接模式和非連接模式是ADO.NET的2種數(shù)據(jù)訪問模式,與傳統(tǒng)的數(shù)據(jù)庫訪問技術(shù)相比,應(yīng)用程序的可靠性和穩(wěn)定性得到了非連接的模式的強(qiáng)化。由于應(yīng)用了非連接模式,所需數(shù)據(jù)一旦被數(shù)據(jù)源從系統(tǒng)平臺(tái)中獲得,隨即與數(shù)據(jù)源斷開連接,并以超文本標(biāo)記語言的形式將數(shù)據(jù)存放在內(nèi)存中。數(shù)據(jù)被應(yīng)用程序處理完畢后,然后與原數(shù)據(jù)取得連接并更新數(shù)據(jù)。針對領(lǐng)域數(shù)據(jù)平臺(tái)內(nèi)成千上萬的用戶,平臺(tái)內(nèi)的共享的數(shù)據(jù)資源能被ADO.NET有效地避免數(shù)據(jù)庫阻塞和過多的活動(dòng)連接,因此,隨著平臺(tái)用戶數(shù)據(jù)的增加,平臺(tái)系統(tǒng)資源的成本耗費(fèi)卻增加不太大。
非連接模式是 ADO.NET中數(shù)據(jù)集類的核心,它能被WEB數(shù)據(jù)平臺(tái)很好地應(yīng)用于軟件開發(fā),為了實(shí)現(xiàn)數(shù)據(jù)資源共享的最大化,ADO.NE T模型通過強(qiáng)類型程序設(shè)計(jì)的操作時(shí),程序編寫速度得到了很大提高。
ADO.NET可以較容易地控制從數(shù)據(jù)庫中讀取所需的數(shù)據(jù),并把讀取的數(shù)據(jù)存儲(chǔ)在本地緩存,在對查詢的數(shù)據(jù)操作時(shí),ADO.NET優(yōu)勢較為明顯:
1)ADO.NET用數(shù)據(jù)集填充數(shù)據(jù)時(shí),返回的都是表中的完整記錄,不需要的數(shù)據(jù)也會(huì)顯示出來,這樣會(huì)引起不必要的處理。ADO.NET使用的記錄集的指針進(jìn)行記錄數(shù)據(jù),只操作需要處理的數(shù)據(jù),不顯示“不需要”的數(shù)據(jù),這樣會(huì)節(jié)省一部分資源,并提高訪問效率。
2)用SQL語句來實(shí)現(xiàn)返回記錄的操作,將條件語句排序及其他的限定語句組合實(shí)現(xiàn),可以比較靈活地來實(shí)現(xiàn)多數(shù)據(jù)的顯示,當(dāng)數(shù)據(jù)需要分頁顯示時(shí),運(yùn)用記錄集指針來指示記錄的起始位置,當(dāng)瀏覽下一頁記錄時(shí),指針就要從下一頁的首記錄開始提取,當(dāng)要瀏覽上一頁記錄時(shí),指針就要從上一頁的首記錄開始搜索,這樣不僅減少了對數(shù)據(jù)庫的全部操作,也減少了數(shù)據(jù)流量。
在對領(lǐng)域內(nèi)數(shù)據(jù)訪問平臺(tái)優(yōu)化時(shí),最重要的考慮因素就是對數(shù)據(jù)訪問技術(shù)進(jìn)行優(yōu)化,本文在ADO.NET的基礎(chǔ)上在訪問數(shù)據(jù)時(shí)采用數(shù)據(jù)庫連接池技術(shù),很大程度上提高了數(shù)據(jù)訪問的速度和平臺(tái)的性能。
通用的連接數(shù)據(jù)庫的方式是一個(gè)物理數(shù)據(jù)庫連接對應(yīng)一個(gè)數(shù)據(jù)庫連接對象,在每個(gè)數(shù)據(jù)的連接建立后,接下來就是數(shù)據(jù)的訪問,數(shù)據(jù)流量的發(fā)送。數(shù)據(jù)庫的連接和數(shù)據(jù)庫的關(guān)系系統(tǒng)極大程度上耗費(fèi)占用領(lǐng)域內(nèi)的資源。而在多層結(jié)構(gòu)的應(yīng)用程序環(huán)境中這種耗費(fèi)資源的動(dòng)作對系統(tǒng)的性能影響尤為明顯。
在多層結(jié)構(gòu)的應(yīng)用程序中為了提高數(shù)據(jù)資源的共享程度和訪問數(shù)據(jù)的速度,大多都通過數(shù)據(jù)庫連接池(connection pooling)技術(shù)來提高訪問平臺(tái)的性能,數(shù)據(jù)庫連接池也就是當(dāng)應(yīng)用程序需要調(diào)用一個(gè)數(shù)據(jù)庫連接時(shí),數(shù)據(jù)庫相關(guān)的接口通過返回一個(gè)通過重用數(shù)據(jù)庫連接來代替重新創(chuàng)建一個(gè)數(shù)據(jù)庫連接。通過這種方式,應(yīng)用程序可以減少對數(shù)據(jù)庫連接操作,尤其在多層環(huán)境中多個(gè)客戶端可以通過共享少量的物理數(shù)據(jù)庫連接來滿足系統(tǒng)需求。通過連接池技術(shù)Java應(yīng)用程序不僅可以提高系統(tǒng)性能同時(shí)也為系統(tǒng)提高了可測量性。
在需要高度并發(fā)/高度可用應(yīng)用程序中,大部分時(shí)間里用戶可能會(huì)保持一個(gè)打開的連接,而且不是積極地使用該連接,因?yàn)橛脩粼谑褂脩?yīng)用程序的其他功能,意識到這一點(diǎn)很重要。應(yīng)用程序可以把其寶貴的資源——一個(gè)打開的連接——從本質(zhì)上切割成時(shí)間片斷,并且在多個(gè)用戶之間來池化它。連接池在池中提供一些連接對象,對同一個(gè)數(shù)據(jù)源連接的不同請求可以用同一個(gè)連接對象來處理,這樣就避免了數(shù)據(jù)連接的重新建立。
領(lǐng)域內(nèi)運(yùn)用連接池技術(shù)能節(jié)省網(wǎng)絡(luò)帶寬,提高客戶端訪問速度,減少數(shù)據(jù)流量,從而提高領(lǐng)域內(nèi)數(shù)據(jù)訪問平臺(tái)的整體性能。
[1]王凈.基于ADO.NET的通用數(shù)據(jù)訪問組件的實(shí)現(xiàn)[J].計(jì)算機(jī)與數(shù)字工程.2010,(12)
[2]劉旭光.基于ADO.NET構(gòu)建數(shù)據(jù)庫訪問中間層類庫的研究[J].現(xiàn)代電子技術(shù).2012,(12)
[3]李成楠.基于ADO.NET數(shù)據(jù)庫訪問技術(shù)淺析[J].科技創(chuàng)新導(dǎo)報(bào).2012,(12)