springboot - sharding-jdbc 實現分庫分表


1)使用場景
對於Mysql主從復制實現讀寫分離來說,可以解決讀的擴展性問題。但是寫的話,面對龐大的數據量還是集中在Master上,並且Master掛載的slave不可能無限制多,因為slave依賴於Master的能力和負載的限制。因此需要對Master進行擴展來實現海量數據的需要。

2)分表
對於訪問極為頻繁,數據量又極大的表來說,最直接做的就是減少數據量的總條數,以便減少數據查詢所需要的時間,可以對大數據表進行分表。
分表策略:用id來進行分表是最為常見的策略,因為大部分查詢都要帶上id,又不影響查詢又能使得數據均衡的分布在各個表中。假設有一個訂單表有1000w條數據,將該表分成16個表,將id%16進行存儲,如果id不是數字可以先hash取值。拆分的記錄根據取余的值進行存儲,App應用根據取余的值進行表的訪問。

3)分庫
分表能解決數據量過大造成的查詢效率低下的問題,但是無法有效提示數據的並發訪問能力。將數據庫拆分,提高數據庫的寫入能力就是所謂的分庫。
與分表類似,分庫策略可以通過對某一個字段如id進行取余操作,來對數據訪問進行路由。如id=19,分成3個庫,19%3=1,這時候就路由到第一個庫。

4)sharding-jdbc 實現分庫分表

sharding-jdbc 最先是當當網開源代碼,后來被Apache集成。
sharding-jdbc能幫我們實現什么:
1,保證事務一致性(跨庫)
2,支持分頁查詢(跨庫)
3,只要重配數據源,其他代碼不需要改動

 

pom.xml 模塊,引入jar 

 1 <dependency>
 2    <groupId>io.shardingjdbc</groupId>
 3    <artifactId>sharding-jdbc-core</artifactId>
 4    <version>2.0.3</version>
 5 </dependency>
 6 <dependency>
 7    <groupId>com.alibaba</groupId>
 8    <artifactId>druid</artifactId>
 9    <version>1.1.3</version>
10 </dependency>
11 <dependency>
12    <groupId>commons-dbcp</groupId>
13    <artifactId>commons-dbcp</artifactId>
14    <version>1.4</version>
15 </dependency>

 

demo鏈接:
鏈接:https://pan.baidu.com/s/1DPArC6hz3PmnSmSKc9KhmQ
提取碼:ads6

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM