sharding-jdbc学习(一) ---环境搭建

1、pom文件

  <dependency>
      <groupId>io.shardingsphere</groupId>
      <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
      <version>3.0.0</version>
  </dependency>

2、建表

3、配置

application.properties

sharding.jdbc.datasource.names=ds_master0,ds_master1
  # 数据源1
  sharding.jdbc.datasource.ds_master0.type=com.alibaba.druid.pool.DruidDataSource
  sharding.jdbc.datasource.ds_master0.driver-class-name=com.mysql.jdbc.Driver
  sharding.jdbc.datasource.ds_master0.url=jdbc\:mysql\://ip\:3306/user_0?useUnicode\=true&characterEncoding\=UTF-8&autoReconnect\=true&failOverReadOnly\=false&allowMultiQueries\=true 
  sharding.jdbc.datasource.ds_master0.username=root
  sharding.jdbc.datasource.ds_master0.password=root
  ​
  # 数据源2
  sharding.jdbc.datasource.ds_master1.type=com.alibaba.druid.pool.DruidDataSource
  sharding.jdbc.datasource.ds_master1.driver-class-name=com.mysql.jdbc.Driver
  sharding.jdbc.datasource.ds_master1.url=jdbc\:mysql\://ip\:3306/user_1?useUnicode\=true&characterEncoding\=UTF-8&autoReconnect\=true&failOverReadOnly\=false&allowMultiQueries\=true 
  sharding.jdbc.datasource.ds_master1.username=root
  sharding.jdbc.datasource.ds_master1.password=root
  ​
  # 控制台打印sql语句
  sharding.jdbc.config.sharding.props.sql.show=true
  ​
  # 配置表节点
  sharding.jdbc.config.sharding.tables.user_info.actual-data-nodes=ds_master$->{0..1}.user_info_$->{0..1}
  ​
  #分表匹配字段
  sharding.jdbc.config.sharding.tables.user_info.table-strategy.standard.sharding-column=user_id
  # 分表策略实现
  sharding.jdbc.config.sharding.tables.user_info.table-strategy.standard.precise-algorithm-class-name=com.smh.config.DemoTableShardingAlgorithm
  ​
  #分库匹配字段
  sharding.jdbc.config.sharding.default-database-strategy.standard.sharding-column=user_id
  #分库策略实现
  sharding.jdbc.config.sharding.default-database-strategy.standard.precise-algorithm-class-name=com.smh.config.DemoTableShardingAlgorithm

​ 使用application.properties配置的方式比较简单,不用写配置类。

4、分库分表的策略

1、PreciseShardingAlgorithm

精准分片策略,Precise处理 = 和 in的路由

public interface PreciseShardingAlgorithm<T extends Comparable<?>> extends ShardingAlgorithm {
       /**
       * Sharding.
       * @param availableTargetNames available data sources or tables's names
       * @param shardingValue sharding value
       * @return sharding result for data source or table's name
       */
      String doSharding(Collection<String> availableTargetNames, PreciseShardingValue<T> shardingValue);
  }

​ 看jdk注释已经很清楚了,availableTargetNames参数是数据源(数据库)或者是表的名字的集合,shardingValue参数是分片或者分表所指定的字段。返回值是数据源或者表的名字

具体实现

public class DemoTableShardingAlgorithm implements PreciseShardingAlgorithm<Long> {
  @Override
      public String doSharding(Collection<String> collection, PreciseShardingValue<Long> preciseShardingValue) {
          for (String each : collection) {
              if (each.endsWith(Long.parseLong(preciseShardingValue.getValue().toString()) % 2+"")) {
                  return each;
              }
          }
          throw new IllegalArgumentException();
      }
  }

​ 按照配置文件中的配置,以user_id作为分片的字段。对user_id对2取模,结果匹配数据源名结尾字符。

2、RangeShardingAlgorithm

范围分片策略,处理 BETWEEN 的路由

  public interface RangeShardingAlgorithm<T extends Comparable<?>> extends ShardingAlgorithm {
      /**
       * Sharding.
       * @param availableTargetNames available data sources or tables's names
       * @param shardingValue sharding value
       * @return sharding results for data sources or tables's names
       */
      Collection<String> doSharding(Collection<String> availableTargetNames, RangeShardingValue<T> shardingValue);
  }

​ availableTargetNames参数是数据源(数据库)或者是表的名字的集合,shardingValue参数是分片或者分表所指定的字段。返回值是数据源或者表的名字的集合。

5、总结

这种配置方法是我比较喜欢的,也非常简单。总体来说逻辑是:

1、先建库建表;

2、实现分库和分表的接口;

3、在application.properties文件里配置数据源、配置表节点、配置分表字段、配置分库分表策略的实现类。

深入学习,请静待更新。。

猜你喜欢

转载自blog.csdn.net/qq_40259907/article/details/86523002