sharding-jdbc—分片策略:標準分片策略StandardShardingStrategy(1)
阿新 • • 發佈:2021-01-19
一、標準分片策略StandardShardingStrategy
- 提供對SQL語句中的=, IN和BETWEEN AND的分片操作支援
- StandardShardingStrategy只支援單分片鍵,提供PreciseShardingAlgorithm(精準分片)和RangeShardingAlgorithm(範圍分片)兩個分片演算法
- PreciseShardingAlgorithm是必選的,用於處理=和IN的分片
- RangeShardingAlgorithm是可選的,用於處理BETWEEN AND分片,如果不配置RangeShardingAlgorithm,SQL中的BETWEEN AND將按照全庫路由處理
- 如果需要使用RangeShardingAlgorithm,必須和PreciseShardingAlgorithm配套使用
二、StandardShardingStrategy配置實現
Sharding -jdbc 在使用分片策略的時候,與分片演算法是成對出現的,每種策略都對應一到兩種分片演算法(不分片策略NoneShardingStrategy除外)
分庫分表最核心的兩點SQL 路由 、 SQL 改寫
SQL 路由:解析原生SQL,確定需要使用哪些資料庫,哪些資料表
Route (路由)引擎:為什麼要用Route 引擎呢?
在實際查詢當中,資料可能不只是存在一臺MYSQL伺服器上,
SQL 改寫:將SQL 按照一定規則,重寫FROM 的資料庫和表名(Route 返回路由決定需要去哪些庫表中執行SQL)
application.properties 配置
配置主要分為三個部分
- 配置資料來源
- 分庫配置
- 分表配置
# standard.precise-algorithm 標準策略 + 精準分片f演算法 SQL 就是 = in # standard.range-algorithm 標準策略 + 範圍分片演算法 (主要是between and ) sharding.jdbc.datasource.names=ds0,ds1 #分庫配置 sharding.jdbc.config.sharding.default-database-strategy.standard.sharding-column=id 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:5306/ds0?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:5306/ds1?useUnicode=yes&characterEncoding=utf8 sharding.jdbc.datasource.ds1.username=root sharding.jdbc.datasource.ds1.password=root # standard.precise-algorithm 標準策略下分片演算法包含2個 precise + range,range是可選的,但是如果使用 range 就必須同 precise 配套一起使用 # 買precise贈送 range,可以選擇不要贈品,但是你不能不買還想白嫖贈品 sharding.jdbc.config.sharding.default-database-strategy.standard.precise-algorithm-class-name=com.demo.shardingjdbc.PreciseShardingDBAlgorithm sharding.jdbc.config.sharding.default-database-strategy.standard.range-algorithm-class-name=com.demo.shardingjdbc.RangeShardingDBAlgorithm # 設定繫結表 sharding.jdbc.config.sharding.binding-tables=t_user # t_order分表配置 # 如果分片鍵相同,可以直接在後面憑拼接 例如 :ds$->{0..1}.t_order$->{0..1},ds$->{0..1}.t_order_item$->{0..1} sharding.jdbc.config.sharding.tables.t_user.actual-data-nodes=ds$->{0..1}.t_user_$->{0..1} sharding.jdbc.config.sharding.tables.t_user.table-strategy.standard.sharding-column=id sharding.jdbc.config.sharding.tables.t_user.table-strategy.standard.precise-algorithm-class-name=com.demo.shardingjdbc.PreciseShardingDBAlgorithm sharding.jdbc.config.sharding.tables.t_user.table-strategy.standard.range-algorithm-class-name=com.demo.shardingjdbc.RangeShardingDBAlgorithm