一、Inline行表達式分片策略InlineShardingStrategy
- 使用Groovy的Inline表達式,提供對SQL語句中的=和IN的分片操作支持。
- InlineShardingStrategy只支持單分片鍵
- 對於簡單的分片算法,可以通過簡單的配置使用,從而避免繁瑣的Java代碼開發,如: tuser${user_id % 8} 表示t_user表按照user_id按8取模分成8個表,表名稱為t_user_0到t_user_7
二、StandardShardingStrategy配置實現
Sharding -jdbc 在使用分片策略的時候,與分片算法是成對出現的,每種策略都對應一到兩種分片算法(不分片策略NoneShardingStrategy除外)
分庫分表最核心的兩點SQL 路由 、 SQL 改寫
SQL 路由:解析原生SQL,確定需要使用哪些數據庫,哪些數據表
SQL 改寫:將SQL 按照一定規則,重寫FROM 的數據庫和表名(Route 返回路由決定需要去哪些庫表中執行SQL)
application.properties 配置
配置主要分為三個部分
- 配置數據源
- 分庫配置
- 分表配置
#數據源配置,有多少個數據庫,就配置多少個數據源(庫多的時候比較繁瑣,可以采用數據治理),相比於Mycat 配置還是簡單很多 #數據源名字隨意,但是配置數據源時必須名字能對應 sharding.jdbc.datasource.names=ds0,ds1 sharding.jdbc.datasource.ds0.type=com.alibaba.druid.pool.DruidDataSource sharding.jdbc.datasource.ds0.driver-class-name=com.mysql.jdbc.Driver sharding.jdbc.datasource.ds0.url=jdbc:mysql://192.168.8.162:3306/test1?useUnicode=yes&characterEncoding=utf8 sharding.jdbc.datasource.ds0.username=root sharding.jdbc.datasource.ds0.password=root sharding.jdbc.datasource.ds1.type=com.alibaba.druid.pool.DruidDataSource sharding.jdbc.datasource.ds1.driver-class-name=com.mysql.jdbc.Driver sharding.jdbc.datasource.ds1.url=jdbc:mysql://192.168.8.162:3306/test2?useUnicode=yes&characterEncoding=utf8 sharding.jdbc.datasource.ds1.username=root sharding.jdbc.datasource.ds1.password=root # ----------------------分庫配置-------------------------- # database-strategy.inline 庫分片策略 + 指定分庫的分片鍵 sharding.jdbc.config.sharding.default-database-strategy.inline.sharding-column=id # database-strategy.inline.algorithm-expression 分片算法表達式 sharding.jdbc.config.sharding.default-database-strategy.inline.algorithm-expression=ds$->{id % 2} # 設置綁定表 t_user sharding.jdbc.config.sharding.binding-tables=t_user # ---------------------- t_user分表配置---------------------- # t_user 分庫分表后真實的數據節點(邏輯表 -> 真實表) sharding.jdbc.config.sharding.tables.t_user.actual-data-nodes=ds$->{0..1}.t_user_$->{0..3} # 分片鍵設置 sharding.jdbc.config.sharding.tables.t_user.table-strategy.inline.sharding-column=id sharding.jdbc.config.sharding.tables.t_user.table-strategy.inline.algorithm-expression=t_user_$->{id % 2} sharding.jdbc.config.props.sql.show=true