当前位置: 首页 > article >正文

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.shardingsphere</groupId>
      <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
      <version>4.1.1</version>
</dependency>

配置文件

配置流程:

  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

实体类

以下实体类中的@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;

}

🌟写在最后

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


请添加图片描述


http://www.kler.cn/a/105005.html

相关文章:

  • 【Spring Boot系列】- Spring Boot事务应用详解
  • Jupyter使用技巧-环境篇
  • ES 11 新特性
  • FPGA从入门到精通(二十)SignalTapII
  • useGeneratedKeys=“true“ keyProperty=“id“
  • 经验风险最小化与结构风险最小化:优化机器学习模型的两种方法
  • 2022年12月 Python(一级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • Azure - 机器学习企业级服务概述与介绍
  • Apifox创建团队 项目 接口 邀请成员步骤演示
  • Django的查询所有,根据用户名查询,增加用户操作
  • 完美的错误处理:Go 语言最佳实践分享
  • 实现el-table打印功能,样式对齐,去除滚动条
  • 0039【Edabit ★☆☆☆☆☆】【字符串长度比较】Compare Strings by Count of Characters
  • 一文搞懂比特币的原理
  • CICD 流程学习(五)Jenkins后端工程构建
  • AlDente Pro for Mac: 掌控电池充电的终极解决方案
  • SpringBoot运行流程源码分析------阶段三(Spring Boot外化配置源码解析)
  • Spring Boot Endpoints:端点
  • 渲染对电脑伤害多大?怎么避免对本地电脑的损害?
  • 第2篇 机器学习基础 —(2)分类和回归