shardingsphere-jdbc之complex分片(4.1.1)

complex复合分片:基于多个字段进行数据分片。

PS:当前案例根据区域和时间双维度进行分片。

yml

        t_user_activity:
          actualDataNodes: ds0.t_user_activity_south_$->{['2022_0103','2022_0406','2022_0709','2022_1012']},ds0.t_user_activity_north_$->{['2022_0103','2022_0406','2022_0709','2022_1012']}
          tableStrategy:
            #复合条件分片--》多字段分片,字段之间以逗号隔开,PS:不止两个字段,多个也可以
            complex:
              shardingColumns: area,create_date
              algorithmClassName: com.example.skywalkingtest.config.sharding.AreaAndMonthComplexKeysShardingAlgorithm

自定义算法: 

import cn.hutool.core.collection.CollectionUtil;
import com.example.skywalkingtest.utils.DateUtils;
import com.google.common.collect.Range;
import lombok.extern.slf4j.Slf4j;
import org.apache.shardingsphere.api.sharding.complex.ComplexKeysShardingAlgorithm;
import org.apache.shardingsphere.api.sharding.complex.ComplexKeysShardingValue;

import java.util.*;


/**
 * 4.1version 复合分片
 */

@Slf4j
public class AreaAndMonthComplexKeysShardingAlgorithm implements ComplexKeysShardingAlgorithm<String> {
    static String tableNamePre = "t_user_activity_";
    static Map<String, List<String>>areaMap;
    static Map<String, List<String>>monthMap;
    static {
        areaMap = new HashMap<String, List<String>>(){
  {
            put("north",new LinkedList<String>(){
  {add("天津");add("北京");add("西安");add("咸阳");}});
            put("south",new LinkedList<String>(){
  {add("苏州");add("南京");add("上海");add("杭州");}});
        }};
        monthMap = new HashMap<String,List<String>>(){
  {
            put("2022_0103",new LinkedList<String>(){
  {add("2022_01");add("2022_02");add("2022_03");}});
            put("2022_0406",new LinkedList<String>(){
  {add("2022_04");add("2022_05");add("2022_06");}});
            put("2022_0709",new LinkedList<String>(){
  {add("2022_07");add("2022_08");add("2022_09");}});
            put("2022_10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值