讀寫分離
在上一篇文章介紹瞭如何使用Sharing-JDBC實現數據庫的讀寫分離。讀寫分離的好處就是在併發量比較大的情況下,將查詢數據庫的壓力 分擔到多個從庫中,能夠滿足高併發的要求。比如上一篇實現的那樣,架構圖如下:
數據分表
當數據量比較大的時候,比如單個表的數據量超過了500W的數據,這時可以考慮將數據存儲在不同的表中。比如將user表拆分為四個表user0、user1、 user2、user3裝在四個表中。此時如圖所示:
案例詳解
和上一篇文章使用的數據庫是同一個數據庫,數據庫信息如下:
在主庫初始化Mysql數據的腳本,初始化完後,從庫也會創建這些表,腳本信息如下:
本案例還是在上一篇文章的案例基礎之上進行改造,工程的目錄和pom的依賴見上一篇文章或者源碼。在工程的配置 文件application.yml做Sharding-JDBC的配置,代碼如下:
MyPreciseShardingAlgorithm是根據id取模4來獲取表名的,代碼如下:
測試
寫一個API來測試,代碼如下:
啟動Spring Boot工程,在瀏覽器上執行localhost:8080/add,然後去數據庫中查詢,可以看到user0、user1、user2、user3分別插入了數據。 然後訪問localhost:8080/users,可以查詢數據庫中四個表中的所有數據。可見Sharding-JDBC在插入數據的時候,根據數據分表策略,將數據存儲在 不同的表中,查詢的時候將數據庫從多個表中查詢並聚合。
在數據庫的主機的日誌裡面,可以看到查詢的日誌也驗證了這個結論,如下:
從庫查詢日誌:
更多學習筆記資料:
https://shimo.im/docs/QzafqtfKU4MoODI9/read
源碼:
https://github.com/forezp/SpringBootLearning/tree/master/sharding-jdbc-example/shareding-jdbc-master-slave-tables
覺得還不錯的話,可以轉發關注一波支持支持!