SQL優化-讀寫分離-主從複製
讀寫分離從字面意思就可以理解,就是把對資料庫的讀操作和寫操作分離開。讀寫分離在網站發展初期可以一定程度上緩解讀寫併發時產生鎖的問題,將讀寫壓力分擔到多臺伺服器上,通常用於讀遠大於寫的場景。
讀寫分離的基本原理是讓主資料庫處理事務性增、改、刪操作(INSERT、UPDATE、DELETE),而從資料庫處理SELECT查詢操作。資料庫複製被用來把事務性操作導致的變更同步到叢集中的從資料庫。單表的資料量限制,當單表資料量到一定條數之後資料庫效能會顯著下降。資料多了之後,對資料庫的讀、寫就會很多。分庫減少單臺數據庫的壓力。
以oracle為例,主庫負責寫資料、讀資料。讀庫僅負責讀資料。每次有寫庫操作,同步更新cache,每次讀取先讀cache在讀DB。寫庫就一個,讀庫可以有多個,採用dataguard來負責主庫和多個讀庫的資料同步。
二、讀寫分離的好處
1.資料是網站的生命,讀寫分離通過主從備份資料,保證了系統的冗餘,保護了珍貴的資料。
2.提高了系統性能,一定程度提高了資料庫負載能力。
三、適用讀寫分離場景
1.網站初期想要緩解資料負載最簡單可行的方案。
2.伺服器面對的是讀遠大於寫的場景,並且業務能夠允許時間上一些延遲。
四、讀寫分離實現方式
目前讀寫分離方案網上找了幾個並做了對比。
1.mycat 基於阿里的cobar改版的(比較穩定,論壇活躍)
2.atlas 360開發的 網友說不是很穩定 (已經很久沒更新)
3.mysql-proxy mysql自帶 (不是很穩定)
4.oneproxy 比較穩定 效能也很好 (需要付費)
5.amoeba 好像還行,有一些公司使用 (但是很久沒有更新了)
五、主從複製
主從複製,是用來建立一個和主資料庫完全一樣的資料庫環境,稱為從資料庫;
主資料庫一般是實時的業務資料庫,從資料庫的作用和使用場合一般有幾個:
一是作為後備資料庫,主資料庫伺服器故障後,可切換到從資料庫繼續工作;
二是可在從資料庫作備份、資料統計等工作,這樣不影響主資料庫的效能;
mysql支援單向、非同步複製,複製過程中一個伺服器充當主伺服器,而一個或多個其它伺服器充當從伺服器。
mysql複製基於主伺服器在二進位制日誌中跟蹤所有對資料庫的更改(更新、刪除等等)。
因此,要進行復制,必須在主伺服器上啟用二進位制日誌。每個從伺服器接收主伺服器已經記錄的二進位制日誌來儲存更新。
當一個從伺服器連線主伺服器時,它通知主伺服器從日誌中讀取最後一次成功更新的位置。
從伺服器接收從那時起發生的任何更新,並在本機上執行相同的更新。然後封鎖並等待主伺服器通知新的更新。
從伺服器執行備份不會干擾主伺服器,在備份過程中主伺服器可以繼續處理更新