短链服务分库分表 —— (难度:低,等级:2)

DBC 1.1K 0
温馨提示

本大模块难度级别为:无、简单、低、一般、中、较高、高

文章重在于提供思想,具体代码可以评论区留言博主,获取git查看项目源码

一、简单的分库分表

  • 分库分表策略
    • 分库分表
      • 16个库, 每个库64个表,总量就是 1024个表
    • 分片键:短链码 code
      • 比如 dbc655.top/03TGva的短链码 03TGva
    • 分库分表算法:短链码进行hash取模
      • 库ID = 短链码hash值 % 库数量  
        表ID = 短链码hash值 / 库数量  % 表数量
  • 优点
    • 保证数据较均匀的分散落在不同的库、表中,可以有效的避免热点数据集中问题,
    • 分库分表方式清晰易懂
  • 问题
    • 扩容不是很方便,需要数据迁移
    • 需要一次性建立16个库, 每个库64个表,总量就是 1024个表,浪费资源

二、进阶的分库分表(具体如下图所示)

短链服务分库分表 —— (难度:低,等级:2)插图

为啥能做到免迁移扩容?

  • A92AEva1
  • 由于短链码的前缀和后缀是是固定的,所以扩容也不影响旧的数据
  • 类似的免迁移扩容策略还有哪些?
    • 时间范围分库分表
    • id范围分库分表

三、开始实战

1.首先先建好数据库和表(数据库-> 3 个 ,表 -> 6个)

温馨提示

学习测试,我们就不需要弄太多表了,每一个库里面有两个表,加起来一共6张表即可![aru_1]
具体如下图

短链服务分库分表 —— (难度:低,等级:2)插图2

2.自定义分片策略编写,有一个小例子,也可以到这里看看,这个例子会更加的简单,效果有点类似

博主精品——Sharding-JDBC分库分表实战(4库32表)!

2年前 (2022-07-12) 0
短链服务分库分表 —— (难度:低,等级:2)插图4

CustomDBPreciseShardingAlgorithm

点击查看完整内容

CustomTablePreciseShardingAlgorithm

点击查看完整内容
温馨提示

自定义分片策略到这里就结束了,里面的注释非常的清楚,相信很容易看懂

3.配置文件添加相应的代码

#----------短链,策略:分库+分表--------------
# 先进行水平分库,然后再水平分表
spring.shardingsphere.sharding.tables.short_link.database-strategy.standard.sharding-column=code
spring.shardingsphere.sharding.tables.short_link.database-strategy.standard.precise-algorithm-class-name=net.dbc.strategy.CustomDBPreciseShardingAlgorithm


# 水平分表策略,自定义策略。   真实库.逻辑表
spring.shardingsphere.sharding.tables.short_link.actual-data-nodes=ds0.short_link,ds1.short_link,dsa.short_link
spring.shardingsphere.sharding.tables.short_link.table-strategy.standard.sharding-column=code
spring.shardingsphere.sharding.tables.short_link.table-strategy.standard.precise-algorithm-class-name=net.dbc.strategy.CustomTablePreciseShardingAlgorithm
#id生成策略
spring.shardingsphere.sharding.tables.short_link.key-generator.column=id
spring.shardingsphere.sharding.tables.short_link.key-generator.type=SNOWFLAKE
spring.shardingsphere.sharding.tables.short_link.key-generator.props.worker.id=${workerId}

基本的配置文件一览

短链服务分库分表 —— (难度:低,等级:2)插图6

4.短链码前缀、后缀,库表位的生成

ShardingDBConfig

点击查看完整内容

ShardingTableConfig

点击查看完整内容
温馨提示

到这里,我们基本就完成了最基本的配置了,这里省略了短链码的简单crud,下面我们就来测试一下

四、简单测试短链码的生成、查询

    @Autowired
    private ShortLinkManager shortLinkManager;

    @Test
    public void testSaveShortLink() {
        Random random = new Random();
        for (int i = 0; i < 100; i++) {
            int num1 = random.nextInt(10);
            int num2 = random.nextInt(100000000);
            int num3 = random.nextInt(100000000);
            String originalUrl = num1 + ".dbc655" + num2 + ".top" + num3;
            String shortLinkCode = shortLinkComponent.createShortLinkCode(originalUrl);

            ShortLinkDO shortLinkDO = new ShortLinkDO();
            shortLinkDO.setCode(shortLinkCode);
            shortLinkDO.setAccountNo((long) num3);
            shortLinkDO.setSign(CommonUtil.MD5(originalUrl));
            shortLinkDO.setDel(0);

            shortLinkManager.addShortLink(shortLinkDO);

        }


    }

    @Test
    public void testFind(){

        ShortLinkDO shortLinCode = shortLinkManager.findByShortLinCode("031WWqNa");
        log.info(shortLinCode.toString());

    }

短链服务分库分表 —— (难度:低,等级:2)插图8

温馨提示

从上面的图中,相信也能很清晰的看出来,我们的这个策略已经生效了,基本达到了我们想要的效果![aru_50]

发表评论 取消回复
表情 图片 链接 代码

分享