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進行分庫策略
一般分片都是單個庫里面的 如果多個庫 垮庫查詢效率很慢的哦
