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
