Sharding-Jdbc實現分表分庫


Sharding-Jdbc分表分庫
LogicTable
數據分片的邏輯表,對於水平拆分的數據庫(表),同一類表的總稱。
訂單信息表拆分為2張表,分別是t_order_0、t_order_1,他們的邏輯表名為t_order。
ActualTable
在分片的數據庫中真實存在的物理表。即上個示例中的t_order_0、t_order_1。
DataNode
數據分片的最小單元。由數據源名稱和數據表組成,例:test_msg0.t_order_0。配置時默認各個分片數據庫的表結構均相同,直接配置邏輯表和真實表對應關系即可。
ShardingColumn
分片字段。用於將數據庫(表)水平拆分的關鍵字段。SQL中如果無分片字段,將執行全路由,性能較差。Sharding-JDBC支持多分片字段。
ShardingAlgorithm
分片算法。Sharding-JDBC通過分片算法將數據分片,支持通過等號、BETWEEN和IN分片。分片算法目前需要業務方開發者自行實現,可實現的靈活度非常高。未來Sharding-JDBC也將會實現常用分片算法,如range,hash和tag等。

 

 

在單個庫里,有一張表拆分成n多個小表

比如 t_order拆分成 t_order0  t_order_1

 

insert操作時候,會根據id取模分表的總數 獲取具體存放的位置 分表后  表名成t_order_0 和 t_order_1

   與表的總數進行取模

   跟前綴拼接起來 t_order-+(id%分表總數)

 

查詢時候如何查詢? 一樣算法獲取

  

注意 分表之前,分表的數量定義好了之后,不能改了!!!!

 

 

SpringBoot整合Sharding-Jdbc分為兩種方式
一種為原生配置方式,自己需要實現接口。
1.分庫算法類需要實現SingleKeyDatabaseShardingAlgorithm<T>接口
2.分表算法類需要實現SingleKeyTableShardingAlgorithm<T>接口
第二種通過配置文件形式配置。
案例比如:t_order 拆分程t_order_0 t_order _1

   

 

 

maven:

 

注意本項目用的jpa:jpa的相關配置      jpa的底層是hibernate 可以自動通過對象得到sql語句

yml: 

 

 

做分表必須實現接口:

  分表算法類需要實現SingleKeyTableShardingAlgorithm<T>接口

  有三個方法  核心是doEqualsSharding方法: 判斷sql  如果有=條件判斷  (需要配置分片算法)

  需要寫for循環  

        

 

查詢所有時候 會發送sql 查詢所有表 然后匯總起來 返回給客戶端

 

經驗單個庫  拆分成小表

 

 

 

 

分庫分表,單張表進行拆分

   比如t_order 拆分成多個不同的庫進行存放 

   分庫總數為2    根據id進行分庫策略

   

     一般分片都是單個庫里面的  如果多個庫 垮庫查詢效率很慢的哦

     

 


免責聲明!

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



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