一:數據庫瓶頸的出現html
隨着數據庫負載的增大,對數據庫讀寫性能的要求成爲瓶頸。redis
通常狀況下,用戶對數據庫的操做,70%是讀,30%是寫,所以數據庫的性能瓶頸大多出如今讀上,想辦法提升讀取速度也是解決數據庫瓶頸的第一手段。算法
二:數據庫調優sql
通常狀況下,不少性能問題不是真的由於硬件形成的,而是開發階段過於追求開發效率,致使索引沒建好、sql語句沒寫好或者循環嵌套查詢等。數據庫
所以,當出現系統性能問題時,應該第一時間檢查代碼,進行優化。緩存
三:緩存架構
咱們通常採用緩存中間件進行嘗試,利用redis或memcache集羣來承擔大部分的數據讀取任務。性能
通常狀況下,到這一步已經足以知足大部分中小型項目的讀取需求了。優化
注意:緩存方案僅適用於對一致性沒有強要求的業務場景,對於傳統企業ERP系統等流程環節緊密相扣的狀況,不適用。
.net
四:讀寫分離
對數據庫進行「一主多從」的架構模式進行部署,將寫操做集中在主數據庫,讀操做分派到從數據庫上進行。
數據庫讀寫分離的實現有多種:在代碼中本身實現算法進行分派,或者使用Mycat、Atlas等中間件進行分派,或者在數據庫主從部署時數據庫自己就提供此特性。
注意:主從數據庫之間的備份存在必定延遲,所以對於業務流程緊密關聯的場景下也不適應,對於傳統ERP系統,能夠將報表、BI分析等業務功能進行讀寫分離,可是生產業務單據仍是要在主數據庫進行操做。
代碼實現讀寫分離:http://www.javashuo.com/article/p-ryharzaw-k.html
Atlas實現讀寫分離:https://blog.csdn.net/weixin_41488238/article/details/80196108
ProxySQL實現讀寫分離:https://blog.csdn.net/jolly10/article/details/80391404
Mycat實現讀寫分離:http://www.javashuo.com/article/p-wjnaiybn-bw.html
五:分庫分表
面對 寫操做密集型 系統,單純的主從備份讀寫分離並無解決 寫操做 形成的性能問題。
此時須要進行分庫分表。
六:集羣
todo。