• ShardingSphere-JDBC分库分表快速入门实战


    🧑‍💻作者名称:DaenCode
    🎤作者简介:啥技术都喜欢捣鼓捣鼓,喜欢分享技术、经验、生活。
    😎人生感悟:尝尽人生百味,方知世间冷暖。
    📖所属专栏:MySQL实战


    在这里插入图片描述


    专栏推荐

    • 专门为Redis入门打造的专栏,包含Redis基础知识、基础命令、五大数据类型实战场景、key删除策略、内存淘汰机制、持久化机制、哨兵模式、主从复制、分布式锁等等内容。链接>>>>>>>>>《Redis从头学》
    • 专门为RabbitMQ入门打造的专栏,持续更新中。。。。。。。。链接>>>>>>>《图解RabbitMQ》

    🌟前言

    本文主要演示使用SpringBoot结合ShardingSphere-JDBC快速实现MySQL的水平分库分表实战,含有详细的步骤说明。

    ShardingSphere官网:https://shardingsphere.apache.org/

    🌟介绍

    ShardingSphere-JDBC是一个轻量级的Java框架,为ShardingSphere的其中一个组件。在使用时只需在应用程序中引入其jar包即可,可以理解为增强版的JDBC驱动。

    🌟核心概念

    1. 数据节点Node:数据节点是数据分片中的最小单元,格式为数据源名称.数据表名称,ds0.product。
    2. 真实表:真实表为数据库真实存在的表,也就是分片之后的表,比如ds0.product_0,ds0.product_1
    3. 逻辑表:逻辑表可以理解为拆分的基表,水平拆分相同逻辑、相同结构表的总称。比如product表。
    4. 绑定表:绑定表是指具有主子表关系的两个表。比如product_order_0,product_order_item_0。
    5. 广播表:所有分片数据源中存在的表,比如说字典表的使用。

    🌟实战入门

    案例

    入门实战将从以下几点展开:

    1. 将product_order表,水平拆分到两个数据库,每个数据库两张表。
    2. 广播表的拆分。
    3. 绑定表的拆分。

    引入依赖

    <dependency>
          <groupId>org.apache.shardingspheregroupId>
          <artifactId>sharding-jdbc-spring-boot-starterartifactId>
          <version>4.1.1version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    配置文件

    配置流程:

    1. 实体类中配置逻辑表名称。见实体类小节代码
    2. 配置数据源名称。
    3. 配置数据源连接配置。
    4. 配置workID用户保证雪花算法生成id的唯一性。
    5. 将ID生成策略配置为雪花算法。
    6. 为product_order、product_order_item表配置数据节点。
    7. 配置默认分库规则
    8. 为product_order、product_order_item表配置分片规则:分片键+分片算法。
    9. 配置广播表。
    10. 配置绑定表。

    配置文件中的分片策略采用行表达式法,使用groovy语言。
    ds$->{0…1}=ds0/ds1;

    #配置数据源名称
    spring.shardingsphere.datasource.names=ds0,ds1
    #详细配置每个数据源
    # 第一个数据库
    spring.shardingsphere.datasource.ds0.type=com.zaxxer.hikari.HikariDataSource
    spring.shardingsphere.datasource.ds0.driver-class-name=com.mysql.cj.jdbc.Driver
    spring.shardingsphere.datasource.ds0.jdbc-url=jdbc:mysql://127.0.0.1:3306/shop_order_0?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
    spring.shardingsphere.datasource.ds0.username=root
    spring.shardingsphere.datasource.ds0.password=root
    # 第二个数据库
    spring.shardingsphere.datasource.ds1.type=com.zaxxer.hikari.HikariDataSource
    spring.shardingsphere.datasource.ds1.driver-class-name=com.mysql.cj.jdbc.Driver
    spring.shardingsphere.datasource.ds1.jdbc-url=jdbc:mysql://127.0.0.1:3306/shop_order_1?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
    spring.shardingsphere.datasource.ds1.username=root
    spring.shardingsphere.datasource.ds1.password=root
    #配置workid
    spring.shardingsphere.sharding.tables.product_order.key-generator.props.worker.id=1
    #id生成策略
    spring.shardingsphere.sharding.tables.product_order.key-generator.column=id
    spring.shardingsphere.sharding.tables.product_order.key-generator.type=SNOWFLAKE
    #配置product_order数据节点ds$->{0..1}.product_order_$->{0..1}
    spring.shardingsphere.sharding.tables.product_order.actual-data-nodes=ds$->{0..1}.product_order_$->{0..1}
    #配置product_order_item数据节点
    spring.shardingsphere.sharding.tables.product_order_item.actual-data-nodes=ds$->{0..1}.product_order_item_$->{0..1}
    #Product_order配置分库规则
    spring.shardingsphere.sharding.tables.product_order.database-strategy.inline.sharding-column=user_id
    spring.shardingsphere.sharding.tables.product_order.database-strategy.inline.algorithm-expression=ds$->{user_id % 2}
    #配置默认分库策略
    spring.shardingsphere.sharding.default-database-strategy.inline.sharding-column=user_id
    spring.shardingsphere.sharding.default-database-strategy.inline.algorithm-expression=ds$->{user_id % 2}
    #某个表Product_order指定分片策略-->分片键+分片算法
    spring.shardingsphere.sharding.tables.product_order.table-strategy.inline.sharding-column=id
    spring.shardingsphere.sharding.tables.product_order.table-strategy.inline.algorithm-expression=product_order_$->{id % 2}
    #某个表Product_order_item指定分片策略-->分片键+分片算法
    spring.shardingsphere.sharding.tables.product_order_item.table-strategy.inline.sharding-column=product_order_id
    spring.shardingsphere.sharding.tables.product_order_item.table-strategy.inline.algorithm-expression=product_order_$->{product_order_id % 2}
    #配置广播表,多个采用,分割
    spring.shardingsphere.sharding.broadcast-tables=ad_config
    spring.shardingsphere.sharding.tables.ad_config.key-generator.column=id
    spring.shardingsphere.sharding.tables.ad_config.key-generator.type=SNOWFLAKE
    #配置绑定表
    spring.shardingsphere.sharding.binding-tables=product_order,product_order_item
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    实体类

    以下实体类中的@Table注解的值为逻辑表的名称。

    @Data
    @TableName("product_order")
    @EqualsAndHashCode(callSuper = false)
    public class ProductOrderDO {
        private Long id;
        private String outTradeNo;
        private String state;
        private Date createTime;
        private Double payAmount;
        private  String nickname;
        private Long userId;
    }
    @Data
    @TableName("product_order_item")
    public class ProductOrderItemDO {
        private Long id;
        //分表
        private Long productOrderId;
        private Long productId;
        private String productName;
        private Integer buyNum;
        //分库
        private Long userId;
    }
    @Data
    @EqualsAndHashCode(callSuper = false)
    @TableName("ad_config")
    public class AdConfigDO {
    
        private Long id;
        private String configKey;
        private String configValue;
        private String type;
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    🌟写在最后

    有关于ShardingSphere-JDBC分库分表快速入门实战到此结束了。文中有错误之处或者大家有什么疑问,欢迎在评论区留言。最后感谢大家的阅读


    请添加图片描述

  • 相关阅读:
    Ceph — 简介
    ABC254 F - Rectangle GCD( 数据结构&&gcd)
    【动手深度学习-笔记】注意力机制(一)注意力机制框架
    2022-Aug-28
    云原生微服务架构及实现技术
    SpringBoot中使用Spring integration加Eclipse Paho Java Client 实现MQTT客户端
    1212. 查询球队积分
    回溯--组合,排列
    用AIGC做私活真的太赚了...
    Kylin ext3/4 xfs手动扩容根分区
  • 原文地址:https://blog.csdn.net/2302_79094329/article/details/134029730