為什么需要讀寫分離?
簡單來說 數據訪問量大,讀寫都在一個庫時,當執行寫操作時,會把記錄鎖定,行在讀時會被鎖定。
定義一個主庫 負責寫操作(CUD),而其他從庫負責(Read) 操作。
注意事項一:
對每次的sql語句檢查下是select 還是 Insert,update,Delete操作 ,根據操作性質按照負載均衡算法選擇 適合的數據庫連接字符串。
注意事項二:
多個只讀從庫,在接收到大量讀操作時,需要使用算法,把這些讀負載均分到各個只讀庫上。
1 平均負載算法:( 把讀操作平均分到每個只讀庫上去)
2 權重輪詢調度算法:使用了權重的方法來讓性能優良的機器分到更多的任務來均衡整個方案的性能,即權重輪詢調度算法。
3 其他算法。
不論使用什么算法,其目的就是一個:把查詢請求分散到多個只讀庫上去。
注意事項三:
當用戶向主庫寫入數據時,數據保存成功后,還沒分發復制到叢庫時,需要有一個保障機制:即當用戶在查看剛才操作的數據時,能正常訪問,而不是找不到數據。
比如:1 剛保存了一條記錄,可以延時2秒,然后再查詢這記錄(保證這條記錄被分發到只讀從庫時再查詢)。
2 保存了記錄后,在N秒內先查主庫,如果超過N秒,就從叢庫里查詢。
總之: 不論是主庫還是叢庫,必須保證數據有時,查詢才有效。
注意事項四:
SqlServer: 數據庫可以采用發布者-訂閱模式 來實現主庫的數據分發到只讀從庫。
MySQL: 據說可以使用Mysql代理
Oracle :
注意事項五:
做好讀寫分離開關,確保在需要時才啟用讀寫分離。
讀寫分離好處: 降低了數據庫訪問負載壓力。
壞處: 需要很多資源;主從數據庫數據的一致性問題;
To be continue.