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