系統設計時關于性能問題處理的幾點心得

發表于:2013-05-28來源:Csdn作者:scorpio3k點擊數: 標簽:性能問題
此種思想將整個系統的操作看成一個整體,類似于負載均衡。在系統中常見的一個問題是,數據量比較大,對數據的查詢統計變得很復雜很緩慢。對于這種問題應該在設計時就進行考慮,建立表的冗余字段或者匯總表存儲一些匯總信息

  【將復雜的運算分解到其它過程】

  此種思想將整個系統的操作看成一個整體,類似于負載均衡。在系統中常見的一個問題是,數據量比較大,對數據的查詢統計變得很復雜很緩慢。對于這種問題應該在設計時就進行考慮,建立表的冗余字段或者匯總表存儲一些匯總信息,在錄入或更新數據時計算冗余字段或匯總表的值。這樣將復雜的運算時間分解到了數據錄入修改的時間。而一般的錄入/修改都是單筆的操作,此時的一點點延時(可能很少很少)對用戶的體驗是沒有什么影響的,而進行查詢統計時變成了直接查詢表,也會變得很快。

  【將多次查詢簡化為一次查詢】

  將多次查詢簡化為一次查詢,可以減少數據庫連接的性能消耗。對于此種思路,我認為可以有三種實現:

  1. 通過視圖,將多次查詢的結果直接通過一條語句計算查詢

  此種方式可能會用到sum,group by等語句,但使用不好,往往是性能變的更差,不建議使用。對于視圖最好只是簡單的表的關聯,不涉及數據的運算。

  2. 使用存儲過程或函數

  接收參數,將運算封裝在存儲過程或函數中,理論上,參數越精確,操作的數據越少,速度也越快。但問題是1.不易維護;2.要能夠靈活的查詢程序就比較復雜。

  3. 在代碼中進行查詢或計算

  由于要在代碼中進行計算,所以可能很多性能的消耗是在多次連接數據庫查詢數據上。設計代碼結構時需要將多次取數改成有限次的取數,在代碼中對數據進行整理,同時對于重復的數據需要使用緩存。

  【通過用戶體驗減少使用者的影響】

  曾經有一個很慢的查詢,用戶點擊查詢按鈕后,等了10秒鐘,數據才出來,這個時間內屏幕沒有任何變化,從心理上感覺,似乎等待了很長時間;

  后來添加了一個滾動的進度條,有個進度條,是可以知道系統并沒有死掉仍在運行,但滾動條滾動的速度太快,用戶感覺過了很長很長時間數據才出來;

  最后修改了一下滾動條動畫,將滾動速度調慢,10秒種的時間滾動條只滾動了兩次,數據處理的時間沒有變化,但心理上感覺似乎比以前快了很多。

  【使用緩存技術】

  對于經常操作的數據庫數據,需要添加查詢緩存??稍诓樵儠r將查詢結果放入緩存,在增刪改數據時清空緩存。在ibatis、hibernate等orm框架中都支持緩存,另外OSCache這樣的緩存框架也提供了更多的功能。

  【SQL優化】

  我的感覺,如果有好的SQL編寫形成,一般是用不到SQL優化的。但有時候一個不好的SQL,優化后可能會得到性能質的提升。

  【設計產品操作方式】

  在產品設計時也要考慮性能的問題,通過分頁、將數據分步驟展示等方式,防止將大量的數據直接展現。

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97