常用分表
通过sharding分表
引入依赖:
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>sharding-jdbc-spring-boot-starter</artifactId>
<version>4.0.0-RC3</version>
</dependency>
–hash分表:
1.配置文件:hash通过serial_no来分,分为4张表。
2.代码编写
@Slf4j
public class HashShardingConfig implements PreciseShardingAlgorithm<String> {
@Override
public String doSharding(Collection<String> collection, PreciseShardingValue<String> preciseShardingValue) {
log.info("==========分表算法value:{}", preciseShardingValue.getValue());
return "serial_mapping_" + tableSuffix(preciseShardingValue);
}
public String tableSuffix(PreciseShardingValue<String> preciseShardingValue){
String strString=preciseShardingValue.getValue();
return Integer.parseInt(strString.substring(strString.length()-2),16);
}
}
–时间分表:
1.配置文件:
见上图
2.代码编写:
@Slf4j
public class DateShardingConfig implements PreciseShardingAlgorithm<String> {
@Override
public String doSharding(Collection<String> collection, PreciseShardingValue<String> preciseShardingValue) {
log.info("==========分表算法value:{}", preciseShardingValue.getValue());
return "tx_request_" + tableSuffix(preciseShardingValue);
}
public String tableSuffix(PreciseShardingValue<String> preciseShardingValue){
String strString=preciseShardingValue.getValue();
int year=Integer.valueOf(strString.substring(0,4));
int month=Integer.valueOf(strString.substring(5,7));
return String.valueOf(year*100+month);
}
}
–末尾取值分表:
1.配置文件:
类似上图
2.代码编写:
@Slf4j
public class LoanRequestTableConfig implements PreciseShardingAlgorithm<String> {
@Override
public String doSharding(Collection<String> collection, PreciseShardingValue<String> preciseShardingValue) {
log.info("==========分表算法value:{}", preciseShardingValue.getValue());
return "loan_request_" + tableSuffix(preciseShardingValue);
}
public String tableSuffix(PreciseShardingValue<String> preciseShardingValue){
String tableNum = preciseShardingValue.getValue().substring(preciseShardingValue.getValue().length() - 1);
if (tableNum.matches("[0-9]")){
return tableNum;
}
return "0";
}
}