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

openkk 12年前發布 | 19K 次閱讀 性能 軟件架構

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

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

 

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

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

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

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

2. 使用存儲過程或函數

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

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

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

 

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

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

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

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

 

【使用緩存技術】

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

 

【SQL優化】

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

 

【設計產品操作方式】

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

轉自:http://blog.csdn.net/scorpio3k/article/details/7888722

 本文由用戶 openkk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!