springboot - sharding-jdbc 實現分庫分表

1)使用場景
對於Mysql主從複製實現讀寫分離來講,能夠解決讀的擴展性問題。可是寫的話,面對龐大的數據量仍是集中在Master上,而且Master掛載的slave不可能無限制多,由於slave依賴於Master的能力和負載的限制。所以須要對Master進行擴展來實現海量數據的須要。sql

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,只要重配數據源,其餘代碼不須要改動ui

 

pom.xml 模塊,引入jar spa

 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 code

相關文章
相關標籤/搜索