任何一家大型網站都是從小到大慢慢演變而成的,從最初的單體架構發展到分散式架構,再到高併發架構。資料庫作為資料最終落地儲存倉庫,在高併發場景下也很容易產生效能瓶頸,所以資料庫架構對於一個大型網站平臺而言尤為重要。
資料庫檔案是儲存在硬碟上的,所以資料庫操作會受到磁碟I/O的影響,隨著網站併發的不斷提高資料庫的查詢頻率也會越來越高,過高的頻率下資料庫效能瓶頸很快就會暴露出來,所以建議使用Redis、Memcache、MongoDB等NoSQL來快取熱點資料,降低資料庫的操作頻率。
根據二八定律,多數專案80%是讀操作,20%是寫操作,讀多寫少。而資料庫寫入資料時會加上寫鎖(排他鎖)、另外在更新時涉及到索引維護操作都會嚴重影響讀操作的效率。所以我們需要將讀操作和寫操作進行分離,以提升SQL執行效率。
當我們使用了NoSQL,讀寫分離都做了後,資料庫負載依舊很大時,我們就需要考慮將資料庫做拆分了。通俗的說就是將原本在一個數據庫中的資料分散到不同的資料庫或表中,然後再分散式部署來分散單臺伺服器的負載。
一般來說都是先垂直拆分,再水平拆分,而不是一步到位的。
任何一家大型網站都是從小到大慢慢演變而成的,從最初的單體架構發展到分散式架構,再到高併發架構。資料庫作為資料最終落地儲存倉庫,在高併發場景下也很容易產生效能瓶頸,所以資料庫架構對於一個大型網站平臺而言尤為重要。
藉助快取降低資料庫的讀寫操作頻率資料庫檔案是儲存在硬碟上的,所以資料庫操作會受到磁碟I/O的影響,隨著網站併發的不斷提高資料庫的查詢頻率也會越來越高,過高的頻率下資料庫效能瓶頸很快就會暴露出來,所以建議使用Redis、Memcache、MongoDB等NoSQL來快取熱點資料,降低資料庫的操作頻率。
主從同步、讀寫分離根據二八定律,多數專案80%是讀操作,20%是寫操作,讀多寫少。而資料庫寫入資料時會加上寫鎖(排他鎖)、另外在更新時涉及到索引維護操作都會嚴重影響讀操作的效率。所以我們需要將讀操作和寫操作進行分離,以提升SQL執行效率。
資料庫切分(分庫分表)當我們使用了NoSQL,讀寫分離都做了後,資料庫負載依舊很大時,我們就需要考慮將資料庫做拆分了。通俗的說就是將原本在一個數據庫中的資料分散到不同的資料庫或表中,然後再分散式部署來分散單臺伺服器的負載。
一般來說都是先垂直拆分,再水平拆分,而不是一步到位的。