通過查資料,方案以下所示。
html
1
從最基礎的地方作起,優化咱們寫的代碼,減小必要的資源浪費。
a、避免頻繁的使用
new
對象,對於整個應用只須要存在一個實例的類,咱們可使用單例模式。對於String鏈接操做,使用 StringBuffer或StringBuilder,對於工具類能夠經過靜態方法來訪問。
b、避免使用錯誤的方式,儘可能不用
instanceof
作條件判斷。使用java中效率高的類,好比ArrayList比Vector性能好。
2
html靜態化
咱們經過一個連接地址訪問,經過這個連接地址,服務器對應的模塊處理這個請求,轉到對應的jsp頁面,最後生成咱們要的數據。可是,若是上千萬個請求的話,有太多的高併發請求,那麼就會加劇服務器的壓力,最壞的狀況是把服務器down掉。那麼如何避免這種狀況的出現呢?若是咱們把最初對test.
do
的請求結果保存成一個html文件,而後每次用戶都去訪問這個html文件,這樣就不用再去訪問服務器了,服務器的壓力不就減小了?
那如何自動的生成靜態頁面,當用戶去訪問,會自動的生成test.html ,而後再顯示給用戶。
3
圖片服務器分離
對於web服務器來講,圖片是最消耗資源的,因而咱們有必要把圖片與頁面進行分離,咱們把圖片放到獨立的圖片服務器。這樣的架構能夠下降提供頁面訪問請求的服務器系統壓力,而且能夠保證系統不會由於圖片的問題而崩潰。在圖片服務器上,咱們能夠對不一樣的配置進行優化。
4
緩存
具體接觸過的緩存機制是hibernate的緩存機制。爲了不每次都向數據庫中取得數據,咱們把用戶經常訪問到的數據放到內存中,甚至緩存十分大的時候咱們能夠把內存中的緩存放到硬盤中。還有高級的分佈式緩存數據庫使用,均可以增長系統的抗壓力。
5
分批傳送
在作某項目的時候,一次傳遞的參數太多,並且數據庫規定一次最多傳遞的參數最可能是三萬條,當時有五萬條記錄,那怎麼傳送呢?最終是分批傳送,電梯裏一次乘不下那麼多的人,會報超重的bug,那就分批把人送上去。
還有一次在考試系統中,若是那麼多的考試人員同時提交到數據庫中,數據庫的壓力增大,有時會被down掉,當時採用的方法是使用ajax異步傳輸,沒有等待考生點擊提交按鈕的時候,就把考生的答案自動提交,這樣也避免了忽然斷電考生前面作過的題出現丟失的現象。
6
數據庫集羣
當面對複雜的應用,用戶大量訪問的時候,一臺數據很快沒法知足需求,因而咱們須要使用數據庫集羣或者庫表散列。
咱們在應用程序中安裝業務和應用或者功能模塊將數據進行分離,不一樣的模塊對應不一樣的數據庫或表,再按照必定的策略對某個頁面或者功能進行更小的數據庫散列。
7
DB優化
a、在數據庫設計的時候就要考慮到後期的維護,數據庫三範式是咱們設計數據庫索要遵循的原則。
b、索引的創建:創建索引要適當,若是一個表常常用來被查詢,對於增長和修改不多被用到,咱們就能夠爲這個表創建索引,由於對於增長和修改和刪除操做時,咱們對索引的維護要大大超過索引給咱們帶來的效率。
c、表字段的類型選擇要恰當
包括字段的長度、類型等,要根據實際存儲的數據進行選擇,長度不要過長,不然會影響效率。
d、外鍵要慎用,由於主鍵表明這一張表,而外鍵表明一羣表,對錶之間進行了關聯,在刪除修改等須要咱們關聯。
e、在數據庫操做上
儘可能使用prepareStatement,少用Statement,由於PrepareStatement是進行預編譯的。
connection設置爲readOnly,Connection是對書庫鏈接,屬於重量級,咱們使用便可。
鏈接池的使用,咱們能夠修改數據庫默認的鏈接數。