跟同事交流,之前上線的系統一兩年之後,數據有兩三千萬 系統,沒有辦法很好的應對這麼多的數據 這有兩方面原因,一個是設計的時候沒有怎麼考慮數據量的問題 還有一個就是寫代碼的時候,並沒有註意數據量的問題 不去關註數據量的問題,這可能是程式員自己的意識,還有可能是客戶自以為的不用關註 客戶說,我們的數據沒 ...
跟同事交流,之前上線的系統一兩年之後,數據有兩三千萬
系統,沒有辦法很好的應對這麼多的數據
這有兩方面原因,一個是設計的時候沒有怎麼考慮數據量的問題
還有一個就是寫代碼的時候,並沒有註意數據量的問題
不去關註數據量的問題,這可能是程式員自己的意識,還有可能是客戶自以為的不用關註
客戶說,我們的數據沒有多少,你不用考慮那麼多,以後這個系統用不用都還不好說
現在只要100萬鋪底數據,5000條交易數據能跑出來就行
聽起來,100萬鋪底數據,5000條也不多,應該沒有那麼難吧
仔細分析客戶說的就跟沒有說一樣
因為一開始鋪底數據也不會有100萬,也不會恰好100萬裡面正好有五千條讓我們處理
100萬 5000條數據只是一個點,過完這個點怎麼辦,系統真的就死掉了?
除了設計上性能瓶頸不好解決,寫代碼的時候多思考一些問題,還是能解決一些性能問題的
以下就是自己最近優化客戶的銷項報表的一個心得分享
- 首先優化什麼時候最合適
這個問題首先我們應該培養自己的優化意思,寫代碼的時候,就去註意這方面的問題。
另一個就是,優先保證客戶的需求是沒有問題的,這個時候有性能問題的再去優化。
如果沒有考慮功能是否開發完成就急著去優化,可能剛優化完,測出來了一些bug,又需要修改,當修改完之後,發現之前優化好的,需要再去優化,如此反覆有可能會浪費很多必要的時間
- 優化到什麼程度才算結束
1.優化到客戶滿意,但性能這個問題,客戶的要求,我們也不一定能做的到
2.充分發揮電腦的計算能力,讓CPU和記憶體的利用率達到極致,降低與IO,資料庫,其他系統的交互次數
- 優化過程中要從哪些方面去考慮
- 利用電腦的多線程
- 不需要寫文件的就不要寫
- 只要記憶體不死,能在記憶體裡面緩存的數據,就一次性放到記憶體裡面,不要頻繁訪問資料庫
- 不要在迴圈裡面,操作資料庫,除非數量大分批處理,需要釋放記憶體的時候
- 減少不必要的代碼,用更高效的演算法
- 要藉助性能測試工具,定量去分析
1.用的比較多的是DotTreace,能夠比較好分析出來程式的性能瓶頸在哪裡,可以看到每個方法具體執行時間,能夠有方向的去優化
- 要多問問有經驗的人,給些意見
1.向有經驗的人請教,能夠更快速的解決問題,有經驗的人,也許可以給出更多合理的意見