shardingjdbc 按月分表配置
时间: 2023-07-11 20:52:29 浏览: 145
要按月分表配置Sharding-JDBC,你需要在Sharding-JDBC配置文件中指定表名的后缀规则,以及使用的分库分表策略。具体来说,你可以按照以下步骤操作:
1. 在Sharding-JDBC的配置文件中指定逻辑表名和实际表名的映射关系,如下所示:
```
tables:
user:
actualDataNodes: ds${0..1}.user_${201901..201912}
tableStrategy:
standard:
shardingColumn: create_time
shardingAlgorithmName: monthlyTableShardingAlgorithm
```
在这个配置中,我们使用了`actualDataNodes`指定了实际的数据节点,其中`ds${0..1}`表示使用了两个数据源,`user_${201901..201912}`表示使用了12个实际表,分别对应了2019年1月到12月的数据。
2. 指定分库分表策略。
在上面的配置中,我们使用了按月分表的策略,需要自定义一个`monthlyTableShardingAlgorithm`算法来实现。如下所示:
```
public class MonthlyTableShardingAlgorithm implements PreciseShardingAlgorithm<Date> {
@Override
public String doSharding(Collection<String> availableTargetNames, PreciseShardingValue<Date> shardingValue) {
Date date = shardingValue.getValue();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM");
String tableNameSuffix = sdf.format(date);
for (String tableName : availableTargetNames) {
if (tableName.endsWith(tableNameSuffix)) {
return tableName;
}
}
throw new IllegalArgumentException("No target table found");
}
}
```
这个算法的作用就是根据传入的日期参数,选择对应的表名后缀,从而实现按月分表的功能。
3. 在Sharding-JDBC的数据源配置中指定使用的分库分表算法。
```
dataSources:
ds0:
...
ds1:
...
rules:
- !SHARDING
tables:
user:
actualDataNodes: ds${0..1}.user_${201901..201912}
tableStrategy:
standard:
shardingColumn: create_time
shardingAlgorithmName: monthlyTableShardingAlgorithm
...
shardingAlgorithms:
monthlyTableShardingAlgorithm:
type: INLINE
props:
algorithm.expression: user_${shardingValue % 100}
```
在这个配置中,我们针对`user`表使用了`standard`的分表策略,并指定了`monthlyTableShardingAlgorithm`算法作为分表算法。
阅读全文