1. 程式人生 > 實用技巧 >sharding-jdbc—分片策略:標準分片策略StandardShardingStrategy(1)

sharding-jdbc—分片策略:標準分片策略StandardShardingStrategy(1)

一、標準分片策略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 配置

配置主要分為三個部分

  1. 配置資料來源
  2. 分庫配置
  3. 分表配置
# 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