當前位置:首頁 » 密碼管理 » 大量數據訪問

大量數據訪問

發布時間: 2023-07-29 21:19:36

A. 在資料庫訪問量過大時,怎樣提高訪問速度

在ASP中優化資料庫處理

ASP是一個WEB伺服器端的開發環境,它提供了一種簡單易學的腳本(VBScript或Jscript),並帶有許多內置的對象,從而提供了一條簡捷的編程之路。更為重要的是,ASP中提供了ADO對象,讓程序員可以輕松操作各種資料庫,從而可以產生和運行動態的、交互的WEB服務應用程序。目前,國內很多電子商務站點都採用了ASP技術來與資料庫交互,為用戶提供各類服務。
由於電子商務站點的大部分信息都存放在資料庫中,要提高WEB的響應速度,建立高性能的電子商務站點,很大一部分取決於ASP與資料庫之間的處理性能。因此,在ASP編寫時,要注意資料庫處理方法。
1、 使用Connection pool機制
在資料庫處理中,資源花銷最大的是建立資料庫連接,而且用戶還會有一個較長的連接等待時間。若每一個用戶訪問時,都重新建立連接,不僅用戶要長時間等待,而且系統有可能會由於資源消耗過大而停止響應。如果能夠重用以前建立的資料庫連接,而不是每次訪問時都重新建立連接,則可以很好地解決這些問題,從而提高整個系統的性能。在IIS+ASP處理體系中,採用了Connection pool機制來保證這一點。
Connection pool的原理是,IIS+ASP體系中維持了一個連接緩沖池,建立好的資料庫連接在ASP程序中的斷開都是邏輯斷開,而實際的物理連接被存儲在池中並被維護。這樣,當下一個用戶訪問時,直接從連接緩沖池中取得一個資料庫連接,而不需重新連接資料庫,因此,可以大大地提高系統的響應速度。
為了正確使用Connection pool時,必須注意以下幾點:
a). 在MDAC2.0以前的版本中,必須經過資料庫驅動程序的配置才能使用Connection Pool;在以後的版本中(比如MDAC2.1),預設是使用Connection Pool機制。具體配置情況可以參見微軟公司的站點()。
順便提一句,在使用ORACLE資料庫時,最好使用微軟提供的驅動程序。
b). 每次資料庫連接串參數必須相同,否則會被認為是不同的連接而重新去連接資料庫,而不是使用緩沖池中的連接。最好的做法是將連接串存儲在Application變數中,所有的程序在建立連接時使用Application變數的值。
c). 為了更好地使用和維護連接緩沖池,建議在程序中使用以下的方法對資料庫連接進行操作,因為隱式使用資料庫連接時不能利用緩沖池的機制:
¨ 顯示地創建連接對象: Set conn=Server.CreateObject(「Adodb.connection」)
¨ 建立資料庫連接:conn.open Application(「connection_string」),…
¨ 進行資料庫操作:…
¨ 顯式地關閉連接對象:conn.close

2、 利用直接的Ole DB驅動程序
在Asp中,通過ADO可以使用兩種方式連接資料庫,一種是傳統的ODBC方式,一種是Ole DB方式。由於ADO是建立在Ole DB技術上的,為了支持ODBC,必須建立相應的Ole DB 到ODBC的調用轉換(如MS Oledb provider for ODBC)。而使用直接的Ole DB方式(如MS Oledb provider for sql, Oracle),則不需轉換,從而提高處理速度,同時,還能利用Ole DB的新特性。

3、 在內存中緩存ADO對象或其內容
通常,在ASP程序中,都會涉及到一些存儲在資料庫中的常用信息,如省份列表,商品分類等,這些信息對於每一個訪問用戶都是相同的。若每一個用戶訪問時,都要去資料庫里取出來,然後顯示給用戶,不僅會使資料庫伺服器負載加重,無法快速服務於更重要的事務處理,而且WEB伺服器也必須不停地創建ADO對象,消耗大量資源,導致了當用戶很多時幾乎失去響應。若能把一些常用信息事先存儲在內存中,當用戶訪問時,直接從內存中取出,顯示給用戶,則可以大大減小系統的壓力,提高響應速度。
比如,我們可以把已經取得了數據的RecordSet對象存儲在Application變數中,當用戶訪問時,從Application變數中取得RecordSet對象,而不需再次建立資料庫連接;也可以將RecordSet對象里的數據以其他方式存儲,比如存儲在數組中,然後再將數組存儲在Application變數中,使用時用數組的方式讀取。
需要注意的是,一個對象要存儲在Application變數中,線程模式必須是Both;對於不滿足該條件的對象,必須以其他方式,比如轉換成數組的方式存儲在Application變數中,這也是上面所說的將內容存儲在數組中的原因。

4、 使用數字序列
在Asp程序中,從諸如RecordSet中讀取數據時,為了方便,常使用資料庫列名的方式進行:
Response.write rs(「fieldnameN」)
而很少採用該資料庫列名所在的數字序列來讀取,即:
Response.write rs(N)
其實,為了從RecordSet得到列值,ADO必須將列名轉化為數字序列,因此,若直接使用數字序列,則可以提高讀取速度。若感覺使用數字序列,程序可讀性不直觀,可以採用建立常量的方法,定義:
const FIELDNAME1 1

5、 使用資料庫過程(procere)
在電子商務站點中,尤其是要進行交易的站點,為了完成交易,可能需要多次查詢大量的信息,用於判定是非,然後更新入庫。若在編寫Asp時,直接在一個程序中作多次資料庫操作,不僅IIS要創建很多ADO對象,消耗資源,而且加重了資料庫伺服器的負擔,增大了網路流量。若把多次資料庫操作流程定義為一個資料庫過程,用如下方式調用:
connection.execute 「」
則可以利用資料庫的強大性能,大大減輕Web系統的壓力,而且由於頁面內容與業務分開,管理維護也變得方便。

6、 使用優化過的sql語句
對於電子商務網站,最主要的就是要保證,不論訪問用戶的多少,系統都要有足夠快的響應速度。由於在Asp技術中,ADO對象消耗的資源是非常大的,若一個sql語句要執行很長的一段時間,對整個資源也將一直佔用,使系統沒有足夠的資源服務於其它用戶。因此,盡量使用優化過的sql語句,減少執行時間。比如,不使用在in語句中包含子查詢的語句,充分利用索引。

7、 利用資料庫的特性
ADO是一套通用的對象控制項,本身沒有利用資料庫的任何特性。但若在Asp程序編寫時,有意識地考慮結合資料庫的特性,往往可以有很好的效果。
比如,Oracle資料庫伺服器對於執行過的sql語句,通常都經過了分析優化,並存儲在一個sql內存緩沖區中,當下次同樣的sql語句請求時,直接從內存緩沖區取出執行,不再進行分析優化,從而可以大幅度提高性能。這就要求在Asp程序編寫時,盡量使用相同的Sql語句,或者參數化的Sql語句:
Set cmd=Server.createobject(「adodb.command」)
cmd.CommandText=」select * from proct where proctcode=?」

8、 用時創建,用完釋放
在前面也提到過,ADO對象是非常消耗資源的,因此一定要牢牢記住,只在用到ADO對象時才創建,用完後馬上釋放:
set rs=Server.createobject(「adodb.recordset」)
….
rs.close
set rs=nothing

願您愉快地編程,讓人們享受社會信息化所帶來的好處。

B. 如果有一個特別大的訪問量,到資料庫上,怎麼做優化

1、使用緩存技術如redis
2、數據表經常檢查,更新,修復
3、優化sql語句,而別是查詢語句
4、當只要一行數據時使用 LIMIT 1
5、為搜索欄位建立索引,這樣查詢速度更快
6、在Join表的時候使用相當類型的例,並將其索引
7、避免 SELECT * 這種查詢方法,用什麼數據取什麼數據,這屬於sql優化
8、永遠為每張表設置一個ID ,並作為主鍵
9、使用 ENUM 而不是 VARCHAR
10、從 PROCEDURE ANALYSE() 取得建議,PROCEDURE ANALYSE() 會讓 MySQL 幫你去分析你的欄位和其實際的數據,並會給你一些有用的建議
11、盡可能的使用 NOT NULL

C. 資料庫訪問量很大時,如何做優化

你好!如果有大量的訪問用到調取到資料庫時,往往查詢速度會變得很慢,所以我們需襪裂要進行優化處理。

優化從三個方面考慮:

SQL語句優化、

主從復制,讀寫分離,負載均衡、

資料庫分庫分表。

一、SQL查詢語句優化

1、使用索引

建立索引可以使查詢速度得到提升,我們首先應該考慮在where及orderby,groupby涉及的列上建立索引。

2、藉助explain(查詢優化神器)選擇更好的索引和優化查詢語句

SQL的Explain通過圖形化或基於文本的方式詳細說明了SQL語句的每個部分是如何執行以及何時執行的,以及執行效果。通過對選擇更好的索引列,或者對耗時久的SQL語句進行優化達到對查詢速度的優化。

3、任何地方都不要使用SELECT*FROM語句。

4、不要在索引列做運算或者使用函數

5、查詢盡可能使用limit來減少返回的行數

6、使用查詢緩存,並將盡量多的內存分配給MYSQL做緩存

二、悶談主從復制,讀寫分離,負載均衡

目前大多數的主流關系型資料庫都提供了主從復制的功能,通過配置兩台(或多台)資料庫的主從關系,可以將一台資料庫伺服器的數據更新同步到另一台伺服器上。網站可以利用資料庫這一功能,實現資料庫的讀寫分離,從而改善資料庫的負載壓力。一個系統的讀操作遠遠多於寫操作,因此寫操作發向master,讀操作發向slaves進行操作(簡單的輪詢演算法來決定使用哪個slave)。

利用資料庫的讀寫分離,Web伺服器在寫數據的時候,訪問主資料庫(master),主資料庫通過主從復制將數據更新同步到從資料庫(slave),這樣當Web伺服器讀數據的時候,就可以通過從資料庫獲得數據。這一方案使得在大量讀操作的Web應用可以輕松地讀取數據,而主資料庫也只會承受少量的寫入操作,還可以實現數據熱備份,可謂是一舉兩得。

三、資料庫分表、分區、分庫

1、分表

通過分表可以提高表的訪問效率。有兩種拆分方法:

垂直拆分

在主鍵和一些列放在一個表中,然後把主鍵和另外的列放在另一個表中。如果一個表中某些列常用,而另外一些不常用,則可以採用垂直拆分。

水平拆分

根據一列或者多列數據的值把數據行放到兩個獨立的表中。

2、分區

分區就是把一張表的數據分成多個區塊,這些區塊可以在一個磁碟上,也可以在不同的磁碟上,分區後,表面上還是一張表,但是數據散列在多個位置,這樣一來,多塊硬碟同時處理不同的請求,從而提高磁碟I/O讀寫性能。實現比較簡單,包括水平分區和垂直分區。

3、分庫

分庫是根據業務不同把相關的表切分到不同的資料庫中,比如web、bbs、blog等庫。

分庫解決的是資料庫端並發量的問題。分庫和分表並不一定兩個都要上,比如數據量很大,但是訪問的用戶很少,我們就可以只使用分表不使用分庫。如果數據量只有1萬,而訪問用戶有一千,那就只使用分庫。

注意:分庫分表最難解決的問題是統計,還有跨表的連接(比如螞好碰這個表的訂單在另外一張表),解決這個的方法就是使用中間件,比如大名鼎鼎的MyCat,用它來做路由,管理整個分庫分表,乃至跨庫跨表的連接

熱點內容
php獲取當前年 發布:2025-02-02 01:50:41 瀏覽:155
sqlbrowser服務 發布:2025-02-02 01:32:14 瀏覽:730
jeecg源碼下載 發布:2025-02-02 01:08:47 瀏覽:365
多台電腦能共用一個伺服器嗎 發布:2025-02-02 01:08:44 瀏覽:26
oppo雲存儲空間怎麼清理 發布:2025-02-02 00:59:31 瀏覽:263
項目編譯啥意思 發布:2025-02-02 00:25:13 瀏覽:223
逐鹿中原怎樣做掛機腳本 發布:2025-02-02 00:23:39 瀏覽:28
安卓系統跟蹤在哪裡 發布:2025-02-02 00:23:38 瀏覽:899
安卓uc瀏覽器怎麼安裝油猴 發布:2025-02-02 00:23:38 瀏覽:299
中商情報網資料庫 發布:2025-02-02 00:09:26 瀏覽:533