shardingsphere-proxy 5.0.0-alpha按时间分片

一、分片类说明

org.apache.shardingsphere.sharding.algorithm.sharding.datetime.AutoIntervalShardingAlgorithm。

在AutoIntervalShardingAlgorithm这个类中有几个重要的属性需要在配置文件中进行配置

public final class AutoIntervalShardingAlgorithm implements StandardShardingAlgorithm<Comparable<?>>, ShardingAutoTableAlgorithm {

    // 时间下限 分片的开始时间
    private static final String DATE_TIME_LOWER_KEY = "datetime-lower";

    // 时间上限 分片的结束时间
    private static final String DATE_TIME_UPPER_KEY = "datetime-upper";

    // 按时间分片的秒数  一天一张表就是86400秒
    private static final String SHARDING_SECONDS_KEY = "sharding-seconds";

    // 时间格式
    private static final DateTimeFormatter DATE_TIME_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

二、单库分表关键配置说明

其他配置这里不赘述,重点是加注释的配置。

config-sharding.yaml

schemaName: logical_shardingsphere

dataSourceCommon:
  connectionTimeoutMilliseconds: 30000
  idleTimeoutMilliseconds: 60000
  maxLifetimeMilliseconds: 1800000
  maxPoolSize: 50
  minPoolSize: 1
  maintenanceIntervalMilliseconds: 30000

dataSources:
  ds_0:
    url: jdbc:mysql://127.0.0.1:3306/sharding1?serverTimezone=UTC&useSSL=false
    username: root
    password: root

rules:
- !SHARDING
  tables:
    user:
      actualDataNodes: ds_0.user_${0..4}
      tableStrategy:
        standard:
          # 分片列名
          shardingColumn: create_time
          # 分片算法名称
          shardingAlgorithmName: sharding_by_time
      keyGenerateStrategy:
        column: id
        keyGeneratorName: snowflake
  defaultDatabaseStrategy:
    none:
  defaultTableStrategy:
    none:

  shardingAlgorithms:
    sharding_by_time:
      # 分片类型 
      type: auto_interval
      props:
        # 分片开始时间 要加""不然会被解析为非字符串类型导致拿不到值
        datetime-lower: "2020-10-01 00:00:00"
        # 分片秒数 这里是一天一张表 所以秒数为86400秒  要加""不然会被解析为非字符串类型导致拿不到值
        sharding-seconds: "86400"
        # 分片结束时间 要加""不然会被解析为非字符串类型导致拿不到值
        datetime-upper: "2020-10-05 00:00:00"

  keyGenerators:
    snowflake:
      type: SNOWFLAKE
      props:
        worker-id: 1

从2020-10-01 00:00:00 开始分片 每86400秒(一天)分成一片

实际建表5张

3、测试

向逻辑表中插入以下数据

进入对应的分片

为了方便在本地进行调试,自己fork了一个仓库,加了一点注释。

代码地址:

分支:5.0.0-alpha-own

经验分享 程序员 微信小程序 职场和发展