- 1. QQ IP數(shù)據(jù)庫(kù)20110625最新下載 綠色免費(fèi)版
- 2. phpMyAdmin(支持對(duì)數(shù)據(jù)庫(kù)進(jìn)行建立、復(fù)制,刪除數(shù)據(jù)等...
- 3. QQ IP數(shù)據(jù)庫(kù)20110620最新下載 簡(jiǎn)體中文綠色免費(fèi)版
- 4. 純真QQ IP數(shù)據(jù)庫(kù)(正確顯示QQIP地址)20110615最新下...
- 5. QQ IP數(shù)據(jù)庫(kù)20110610最新下載 簡(jiǎn)體中文綠色免費(fèi)版
- 6. 貝卡文件自動(dòng)備份系統(tǒng)(支持備份數(shù)據(jù)庫(kù)文件) V3.31 ...
- 7. 浪跡萬(wàn)能數(shù)據(jù)庫(kù)(完全取代access操作) V1.2 簡(jiǎn)體中文...
- 8. phpMyAdmin(支持對(duì)數(shù)據(jù)庫(kù)進(jìn)行完全操控) V3.4.2.0 F...
- 9. ESET VC52 Scan(支持免費(fèi)更新ESET數(shù)據(jù)庫(kù)) V1.0.0.2...
- 10. QQ IP數(shù)據(jù)庫(kù)20110530最新下載 簡(jiǎn)體中文綠色免費(fèi)版
ASP中優(yōu)化數(shù)據(jù)庫(kù)處理的方法
本文章將介紹到在ASP中優(yōu)化數(shù)據(jù)庫(kù)處理的方法,究竟是怎么樣在ASP中實(shí)現(xiàn)優(yōu)化數(shù)據(jù)庫(kù)處理呢,是不是有點(diǎn)摸不著頭腦呢,就讓我們一起來(lái)學(xué)習(xí)一下吧。
ASP是一個(gè)Web服務(wù)器端的開(kāi)發(fā)環(huán)境,它提供了一種簡(jiǎn)單易學(xué)的腳本(VBScript或Jscript),并帶有許多內(nèi)置的對(duì)象,從而提供了一條簡(jiǎn)捷的編程之路。更為重要的是,ASP中提供了ADO對(duì)象,讓程序員可以輕松操作各種數(shù)據(jù)庫(kù),從而可以產(chǎn)生和運(yùn)行動(dòng)態(tài)的、交互的Web服務(wù)應(yīng)用程序。
目前,國(guó)內(nèi)很多電子商務(wù)站點(diǎn)都采用了ASP技術(shù)來(lái)與數(shù)據(jù)庫(kù)交互,為用戶(hù)提供各類(lèi)服務(wù)。
由于電子商務(wù)站點(diǎn)的大部分信息都存放在數(shù)據(jù)庫(kù)中,要提高Web的響應(yīng)速度、建立高性能的電子商務(wù)站點(diǎn),很大一部分取決于ASP與數(shù)據(jù)庫(kù)之間的處理性能,本文將具體介紹一些優(yōu)化數(shù)據(jù)庫(kù)處理的方法。
使用Connection Pool機(jī)制
在數(shù)據(jù)庫(kù)處理中,資源花銷(xiāo)最大的是建立數(shù)據(jù)庫(kù)連接,而且用戶(hù)還會(huì)有一個(gè)較長(zhǎng)的連接等待時(shí)間。若每一個(gè)用戶(hù)訪(fǎng)問(wèn)時(shí),都重新建立連接,不僅用戶(hù)要長(zhǎng)時(shí)間等待,而且系統(tǒng)有可能會(huì)由于資源消耗過(guò)大而停止響應(yīng)。如果能夠重用以前建立的數(shù)據(jù)庫(kù)連接,而不是每次訪(fǎng)問(wèn)時(shí)都重新建立連接,則可以很好地解決這些問(wèn)題,從而提高整個(gè)系統(tǒng)的性能。在IIS+ASP處理體系中,采用了Connection Pool機(jī)制來(lái)保證這一點(diǎn)。
Connection Pool的原理是:IIS+ASP體系中維持了一個(gè)連接緩沖池,建立好的數(shù)據(jù)庫(kù)連接在ASP程序中的斷開(kāi)都是邏輯斷開(kāi),而實(shí)際的物理連接被存儲(chǔ)在池中并被加以維護(hù)。這樣,當(dāng)下一個(gè)用戶(hù)訪(fǎng)問(wèn)時(shí),直接從連接緩沖池中取得一個(gè)數(shù)據(jù)庫(kù)連接,而不需重新連接數(shù)據(jù)庫(kù),因此,可以大大地提高系統(tǒng)的響應(yīng)速度。
為了正確使用Connection Pool機(jī)制,必須注意以下幾點(diǎn):
1.在MDAC2.0以前的版本中,必須經(jīng)過(guò)數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序的配置才能使用Connection Pool;在以后的版本中(比如MDAC2.1),缺省是使用Connection Pool機(jī)制。具體配置情況可以參見(jiàn)微軟公司的站點(diǎn)(http://www.microsoft.com/data/)。
順便提一句,在使用Oracle數(shù)據(jù)庫(kù)時(shí),最好使用微軟提供的驅(qū)動(dòng)程序。
2.每次數(shù)據(jù)庫(kù)連接串參數(shù)必須相同,否則會(huì)被認(rèn)為是不同的連接而重新去連接數(shù)據(jù)庫(kù),而不是使用緩沖池中的連接。最好的做法是將連接串存儲(chǔ)在Application變量中,所有的程序在建立連接時(shí)使用Application變量的值。
3.為了更好地使用和維護(hù)連接緩沖池,建議在程序中使用以下的方法對(duì)數(shù)據(jù)庫(kù)連接進(jìn)行操作,因?yàn)殡[式使用數(shù)據(jù)庫(kù)連接時(shí)不能利用緩沖池的機(jī)制:
顯式創(chuàng)建連接對(duì)象: Set conn=Server.CreateObject(“Adodb.connection”)
建立數(shù)據(jù)庫(kù)連接:conn.open Application(“connection_string”)
顯式關(guān)閉連接對(duì)象:conn.close
利用直接的OLE DB驅(qū)動(dòng)程序
在ASP中,通過(guò)ADO可以使用兩種方式連接數(shù)據(jù)庫(kù),一種是傳統(tǒng)的ODBC方式,一種是OLE DB方式。由于ADO是建立在OLE DB技術(shù)上的,為了支持ODBC,必須建立相應(yīng)的OLE DB 到ODBC的調(diào)用轉(zhuǎn)換(如MS OLEDB provider for ODBC)。而使用直接的OLE DB方式(如MS OLEDB provider for SQL, Oracle),則不需轉(zhuǎn)換,從而提高處理速度,同時(shí),還能利用OLE DB的新特性。
在內(nèi)存中緩存ADO對(duì)象或其內(nèi)容
通常,在ASP程序中,都會(huì)涉及到一些存儲(chǔ)在數(shù)據(jù)庫(kù)中的常用信息,如省份列表、商品分類(lèi)等,這些信息對(duì)于每一個(gè)訪(fǎng)問(wèn)用戶(hù)都是相同的。若每一個(gè)用戶(hù)訪(fǎng)問(wèn)時(shí),都要去數(shù)據(jù)庫(kù)里取出來(lái),然后顯示給用戶(hù),不僅會(huì)使數(shù)據(jù)庫(kù)服務(wù)器負(fù)載加重,無(wú)法快速服務(wù)于更重要的事務(wù)處理,而且Web服務(wù)器也必須不停地創(chuàng)建ADO對(duì)象,從而消耗大量資源,導(dǎo)致了當(dāng)用戶(hù)很多時(shí)幾乎失去響應(yīng)。若能把一些常用信息事先存儲(chǔ)在內(nèi)存中,當(dāng)用戶(hù)訪(fǎng)問(wèn)時(shí),直接從內(nèi)存中取出,顯示給用戶(hù),則可以大大減小系統(tǒng)的壓力,提高響應(yīng)速度。
比如,我們可以把已經(jīng)取得了數(shù)據(jù)的RecordSet對(duì)象存儲(chǔ)在Application變量中,當(dāng)用戶(hù)訪(fǎng)問(wèn)時(shí),從Application變量中取得RecordSet對(duì)象,而不需再次建立數(shù)據(jù)庫(kù)連接;也可以將RecordSet對(duì)象里的數(shù)據(jù)以其他方式存儲(chǔ),比如存儲(chǔ)在數(shù)組中,然后再將數(shù)組存儲(chǔ)在Application變量中,使用時(shí)用數(shù)組的方式讀取。
需要注意的是,一個(gè)對(duì)象要存儲(chǔ)在Application變量中,線(xiàn)程模式必須是Both;對(duì)于不滿(mǎn)足該條件的對(duì)象,必須以其他方式,比如轉(zhuǎn)換成數(shù)組的方式存儲(chǔ)在Application變量中,這也是上面所說(shuō)的將內(nèi)容存儲(chǔ)在數(shù)組中的原因。
使用數(shù)字序列
在ASP程序中,從諸如RecordSet中讀取數(shù)據(jù)時(shí),為了方便,常使用數(shù)據(jù)庫(kù)列名的方式進(jìn)行:
Response.write rs(“fieldnameN”)
而很少采用該數(shù)據(jù)庫(kù)列名所在的數(shù)字序列來(lái)讀取,即:
Response.write rs(N)
其實(shí),為了從RecordSet得到列值,ADO必須將列名轉(zhuǎn)化為數(shù)字序列,因此,若直接使用數(shù)字序列,則可以提高讀取速度。若感覺(jué)使用數(shù)字序列后,程序可讀性不直觀(guān),可以采用建立常量的方法,如定義:
const FIELDNAME1 1
這樣就保證了程序的可讀性和讀取速度。
使用數(shù)據(jù)庫(kù)過(guò)程
在電子商務(wù)站點(diǎn)中,尤其是要進(jìn)行交易的站點(diǎn),為了完成交易,可能需要多次查詢(xún)大量的信息,用于判定是非,然后更新入庫(kù)。若在編寫(xiě)ASP時(shí),直接在一個(gè)程序中作多次數(shù)據(jù)庫(kù)操作,不僅IIS要?jiǎng)?chuàng)建很多的ADO對(duì)象,消耗大量資源,而且加重了數(shù)據(jù)庫(kù)服務(wù)器的負(fù)擔(dān),增大了網(wǎng)絡(luò)流量。若把多次數(shù)據(jù)庫(kù)操作流程定義為一個(gè)數(shù)據(jù)庫(kù)過(guò)程,用如下方式調(diào)用:
connection.execute “{call procedurename(..)}”
這樣可以利用數(shù)據(jù)庫(kù)的強(qiáng)大性能,大大減輕Web系統(tǒng)的壓力,而且由于頁(yè)面內(nèi)容與業(yè)務(wù)分開(kāi),管理維護(hù)也變得方便。
利用數(shù)據(jù)庫(kù)的特性
ADO是一套通用的對(duì)象控件,本身沒(méi)有利用數(shù)據(jù)庫(kù)的任何特性。但若在ASP程序編寫(xiě)時(shí),有意識(shí)地考慮結(jié)合數(shù)據(jù)庫(kù)的特性,往往可以有很好的效果。
比如,Oracle數(shù)據(jù)庫(kù)服務(wù)器對(duì)于執(zhí)行過(guò)的SQL語(yǔ)句,通常都經(jīng)過(guò)了分析優(yōu)化,并存儲(chǔ)在一個(gè)SQL內(nèi)存緩沖區(qū)中,當(dāng)下次同樣的SQL語(yǔ)句請(qǐng)求時(shí),直接從內(nèi)存緩沖區(qū)取出執(zhí)行,不再進(jìn)行分析優(yōu)化,從而可以大幅度提高性能。這就要求在ASP程序編寫(xiě)時(shí),盡量使用相同的SQL語(yǔ)句,或者參數(shù)化的SQL語(yǔ)句:
Set cmd=Server.createobject(“adodb.command”)
cmd.CommandText=”select * from product where productcode=?”
用時(shí)創(chuàng)建用完釋放
在前面也提到過(guò),ADO對(duì)象是非常消耗資源的,因此一定要牢牢記住,只在用到ADO對(duì)象時(shí)才創(chuàng)建,用完后馬上釋放,程序如下:
set rs=Server.createobject(“adodb.recordset”)
….
rs.close
set rs=nothing
使用優(yōu)化過(guò)的SQL語(yǔ)句
對(duì)于電子商務(wù)網(wǎng)站,最主要的就是要保證不論訪(fǎng)問(wèn)用戶(hù)的多少,系統(tǒng)都要有足夠快的響應(yīng)速度。由于在ASP技術(shù)中,ADO對(duì)象消耗的資源是非常大的,若一個(gè)SQL語(yǔ)句要執(zhí)行很長(zhǎng)的一段時(shí)間,對(duì)整個(gè)資源也將一直占用,使系統(tǒng)沒(méi)有足夠的資源服務(wù)于其它用戶(hù)。因此,盡量使用優(yōu)化過(guò)的SQL語(yǔ)句,減少執(zhí)行時(shí)間。比如,不使用在in語(yǔ)句中包含子查詢(xún)的語(yǔ)句,充分利用索引。
只要在我們的電子商務(wù)網(wǎng)站的建設(shè)中充分考慮到效率問(wèn)題,并利用上述介紹的解決方法,會(huì)極大地提高網(wǎng)站的響應(yīng)速度。
- 1. 教你編寫(xiě)安全的ASP代碼
- 2. ASP程序應(yīng)用之模板采用的簡(jiǎn)單教程
- 3. 關(guān)于ASP中大字段在Form中Post出錯(cuò)的解析
- 4. 關(guān)于在ASP程序頁(yè)面中插入excel文件的實(shí)例代碼分享
- 5. ASP程序?qū)崿F(xiàn)自動(dòng)采集程序及入庫(kù)的實(shí)例代碼分享
- 6. ASP一些錯(cuò)誤代碼的解釋說(shuō)明
- 7. 關(guān)于ASP控制圖片顯示大小的實(shí)例代碼分享
- 8. ASP中類(lèi)型轉(zhuǎn)換函數(shù)的介紹說(shuō)明
- 9. ASP中定義數(shù)組方法分享
- 10. 關(guān)于ASP組件上傳的三種機(jī)制