2019/3/8 18:58:23
ASP是一個(gè)WEB服務器(qì)端的(de)開(kāi)發環境,它提供了一種簡單易學的(de)腳本(VBScript或Jscript),并帶有(yǒu)許多内置的(de)對象,從而提供了一條簡捷的(de)編程之路(lù)。更爲重要的(de)是,ASP中提供了ADO對象,讓程序員可(kě)以輕松操作各種數據庫,從而可(kě)以産生和(hé)運行(xíng)動态的(de)、交互的(de)WEB服務應用(yòng)程序。目前,國内很多電子商務站點都(dōu)采用(yòng)了ASP技術(shù)來與數據庫交互,爲用(yòng)戶提供各類服務。
由于電子商務站點的(de)大(dà)部分(fēn)信息都(dōu)存放(fàng)在數據庫中,要提高(gāo)WEB的(de)響應速度,建立高(gāo)性能(néng)的(de)電子商務站點,很大(dà)一部分(fēn)取決于ASP與數據庫之間的(de)處理(lǐ)性能(néng)。因此,在ASP編寫時,要注意數據庫處理(lǐ)方法。
1、 使用(yòng)Connection pool機制(zhì)
在數據庫處理(lǐ)中,資源花銷最大(dà)的(de)是建立數據庫連接,而且用(yòng)戶還會(huì)有(yǒu)一個(gè)較長的(de)連接等待時間。若每一個(gè)用(yòng)戶訪問時,都(dōu)重新建立連接,不僅用(yòng)戶要長時間等待,而且系統有(yǒu)可(kě)能(néng)會(huì)由于資源消耗過大(dà)而停止響應。如(rú)果能(néng)夠重用(yòng)以前建立的(de)數據庫連接,而不是每次訪問時都(dōu)重新建立連接,則可(kě)以很好地(dì)解決這些問題,從而提高(gāo)整個(gè)系統的(de)性能(néng)。在IIS+ASP處理(lǐ)體系中,采用(yòng)了Connection pool機制(zhì)來保證這一點。
Connection pool的(de)原理(lǐ)是,IIS+ASP體系中維持了一個(gè)連接緩沖池,建立好的(de)數據庫連接在ASP程序中的(de)斷開(kāi)都(dōu)是邏輯斷開(kāi),而實際的(de)物(wù)理(lǐ)連接被存儲在池中并被維護。這樣,當下一個(gè)用(yòng)戶訪問時,直接從連接緩沖池中取得一個(gè)數據庫連接,而不需重新連接數據庫,因此,可(kě)以大(dà)大(dà)地(dì)提高(gāo)系統的(de)響應速度。
爲了正确使用(yòng)Connection pool時,必須注意以下幾點:
a). 在MDAC2.0以前的(de)版本中,必須經過數據庫驅動程序的(de)配置才能(néng)使用(yòng)Connection Pool;在以後的(de)版本中(比如(rú)MDAC2.1),缺省是使用(yòng)Connection Pool機制(zhì)。具體配置情況可(kě)以參見微軟公司的(de)站點(http://www.microsoft.com/data/)。
順便提一句,在使用(yòng)ORACLE數據庫時,最好使用(yòng)微軟提供的(de)驅動程序。
b). 每次數據庫連接串參數必須相(xiàng)同,否則會(huì)被認爲是不同的(de)連接而重新去連接數據庫,而不是使用(yòng)緩沖池中的(de)連接。最好的(de)做法是将連接串存儲在Application變量中,所有(yǒu)的(de)程序在建立連接時使用(yòng)Application變量的(de)值。
c). 爲了更好地(dì)使用(yòng)和(hé)維護連接緩沖池,建議在程序中使用(yòng)以下的(de)方法對數據庫連接進行(xíng)操作,因爲隐式使用(yòng)數據庫連接時不能(néng)利用(yòng)緩沖池的(de)機制(zhì):
¨ 顯示地(dì)創建連接對象: Set conn=Server.CreateObject(“Adodb.connection”)
¨ 建立數據庫連接:conn.open Application(“connection_string”),…
¨ 進行(xíng)數據庫操作:…
¨ 顯式地(dì)關閉連接對象:conn.close
2、 利用(yòng)直接的(de)Ole DB驅動程序
在Asp中,通過ADO可(kě)以使用(yòng)兩種方式連接數據庫,一種是傳統的(de)ODBC方式,一種是Ole DB方式。由于ADO是建立在Ole DB技術(shù)上(shàng)的(de),爲了支持ODBC,必須建立相(xiàng)應的(de)Ole DB 到(dào)ODBC的(de)調用(yòng)轉換(如(rú)MS Oledb provider for ODBC)。而使用(yòng)直接的(de)Ole DB方式(如(rú)MS Oledb provider for Sql, Oracle),則不需轉換,從而提高(gāo)處理(lǐ)速度,同時,還能(néng)利用(yòng)Ole DB的(de)新特性。
3、 在内存中緩存ADO對象或其内容
通常,在ASP程序中,都(dōu)會(huì)涉及到(dào)一些存儲在數據庫中的(de)常用(yòng)信息,如(rú)省份列表,商品分(fēn)類等,這些信息對于每一個(gè)訪問用(yòng)戶都(dōu)是相(xiàng)同的(de)。若每一個(gè)用(yòng)戶訪問時,都(dōu)要去數據庫裏取出來,然後顯示給用(yòng)戶,不僅會(huì)使數據庫服務器(qì)負載加重,無法快速服務于更重要的(de)事務處理(lǐ),而且WEB服務器(qì)也(yě)必須不停地(dì)創建ADO對象,消耗大(dà)量資源,導緻了當用(yòng)戶很多時幾乎失去響應。若能(néng)把一些常用(yòng)信息事先存儲在内存中,當用(yòng)戶訪問時,直接從内存中取出,顯示給用(yòng)戶,則可(kě)以大(dà)大(dà)減小(xiǎo)系統的(de)壓力,提高(gāo)響應速度。
比如(rú),我們可(kě)以把已經取得了數據的(de)RecordSet對象存儲在Application變量中,當用(yòng)戶訪問時,從Application變量中取得RecordSet對象,而不需再次建立數據庫連接;也(yě)可(kě)以将RecordSet對象裏的(de)數據以其他(tā)方式存儲,比如(rú)存儲在數組中,然後再将數組存儲在Application變量中,使用(yòng)時用(yòng)數組的(de)方式讀(dú)取。
需要注意的(de)是,一個(gè)對象要存儲在Application變量中,線程模式必須是Both;對于不滿足該條件(jiàn)的(de)對象,必須以其他(tā)方式,比如(rú)轉換成數組的(de)方式存儲在Application變量中,這也(yě)是上(shàng)面所說的(de)将内容存儲在數組中的(de)原因。
4、 使用(yòng)數字序列
在Asp程序中,從諸如(rú)RecordSet中讀(dú)取數據時,爲了方便,常使用(yòng)數據庫列名的(de)方式進行(xíng):
Response.write rs(“fieldnameN”)
而很少(shǎo)采用(yòng)該數據庫列名所在的(de)數字序列來讀(dú)取,即:
Response.write rs(N)
其實,爲了從RecordSet得到(dào)列值,ADO必須将列名轉化爲數字序列,因此,若直接使用(yòng)數字序列,則可(kě)以提高(gāo)讀(dú)取速度。若感覺使用(yòng)數字序列,程序可(kě)讀(dú)性不直觀,可(kě)以采用(yòng)建立常量的(de)方法,定義: <b
深圳市南山區南山街(jiē)道南海(hǎi)大(dà)道西(xī)桂廟路(lù)北陽光(guāng)華藝大(dà)廈1棟4F、4G-04
咨詢電話(huà):136 8237 6272
大(dà)客戶咨詢:139 0290 5075
業(yè)務QQ:195006118
技術(shù)QQ:179981967