摘要:讀寫分離的實現方式使用的驅動構造不同的數據庫連接池,在層通過判斷方法的讀寫類型,讀方法使用從數據庫連接池,寫方法使用主數據庫連接池使用阿里的或的來實現分庫分表,讀寫分離和負載均衡等處理。
1.mysql讀寫分離背景
在項目中使用mysql數據庫,所有的增刪改查操作都在主庫處理,隨著查詢訪問量的增加,單庫處理的壓力驟增,為了防止主庫故障,使用一主多從的方式,通過讀寫分離,把所有的查詢處理都放到從服務器上,減少單點故障導致整個服務掛掉的情況。
2.mysql讀寫分離的實現方式使用mysql的com.mysql.jdbc.ReplicationDriver驅動
構造不同的數據庫連接池,在service層通過判斷方法的讀寫類型,讀方法使用從數據庫連接池,寫方法使用主數據庫連接池
使用阿里的mycat或360的Atlas來實現分庫分表,讀寫分離和負載均衡等處理。
3.使用ReplicationDriver驅動實現讀寫分離(1)mysql配置數據庫連接信息
url=jdbc:mysql:replication://192.168.2.101:3306,192.168.2.102:3306/test username=***** password=***** driver=com.mysql.jdbc.ReplicationDriver
(2)設置事務不自動提交,并且事務只讀
使用spring的事務處理比較簡單,使用注解@Transactional,把readOnly設置true,或者寫一個aop切面,統一設置需要的方法為可讀模式。
@Transactional(isolation=Isolation.DEFAULT,propagation = Propagation.REQUIRED,readOnly = true)
(3)測試是否真的實現了讀寫分離
使用命令SHOW FULL PROCESSLIST查看從數據庫是否有指定服務器的連接信息。 一主多從,從主庫向從庫進行數據同步,修改從數據庫的指定數據,查詢修改的數據來確認數據是否來自從庫。4.構造不同的連接池,通過程序自主的確認訪問哪個數據庫
實現思想:構建一個主庫的連接池1,構建一個從庫的連接池2,使用spring aop對service層的處理做一個切面,系統定義以query,get和find等開頭的方法為讀處理,使用連接池2,從從庫中獲取數據;其他的開頭的方法默認使用連接池1。
參考文章:
5.使用阿里的mycat或360的Atlas來實現讀寫分離http://blog.csdn.net/jack8598...
阿里的mycat和360的atlas可以實現分庫分表,讀寫分離和負載均衡等功能,對應用層無感知,和正常連接數據庫沒有區別,耦合性較小。
在項目中使用ReplicationDriver驅動簡單實現了讀寫分離,如果數據量超大,而且要做mysql的負載均衡,則要用到中間件來做一層代理來實現。
大家可以關注我的公眾號:不知風在何處,相互溝通,共同進步。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/67330.html
摘要:讀寫分離中間件具有獨立的。變量語句將被廣播考慮到節點間數據一致性問題,只會分發到主節點。節點健康檢查,提升數據庫系統可用性。UCloud MySQL云數據庫讀寫分離 背景 數據顯示,關系型數據庫在OLTP業務下96.87%都在等待讀I/O,而處理器計算僅僅占了5.3%,這說明要提高數據庫的QPS性能,關鍵的一點是提高系統的IO能力。 另一個數據表明, 大多數業務對數據庫的訪...
閱讀 3048·2021-11-22 15:29
閱讀 1728·2021-10-12 10:11
閱讀 1750·2021-09-04 16:45
閱讀 2229·2021-08-25 09:39
閱讀 2789·2021-08-18 10:20
閱讀 2509·2021-08-11 11:17
閱讀 447·2019-08-30 12:49
閱讀 3305·2019-08-30 12:49