ShardingSphere分库分表实战之水平分表

news2024/11/28 4:48:20

在这里插入图片描述

🚀 ShardingSphere 🚀

🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀
🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨
🌲 作者简介:硕风和炜,CSDN-Java领域优质创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享💎💎💎
🌲 恭喜你发现一枚宝藏博主,赶快收入囊中吧🌻
🌲 人生如棋,我愿为卒,行动虽慢,可谁曾见我后退一步?🎯🎯

🚀 ShardingSphere 🚀

在这里插入图片描述
在这里插入图片描述

🍔 目录

    • 🍀 一.ShardingSphere项目实战集群环境准备
    • 🍀 二.水平分表之数据库配置
      • 🥦 2.1 需求分析说明
      • 🥦 2.2 数据库创建
    • 🍀 三.SpringBoot项目中水平分表的配置
      • 🥦 3.1 配置文件 - 基本配置
      • 🥦 3.2 配置文件 - 数据源
      • 🥦 3.3 配置文件 - 配置数据节点
      • 🥦 3.4 配置文件 - 配置分片策略(包括分片键和分片算法)
        • 🍈 3.4.1 分片键配置
        • 🍈 3.4.2 分片算法配置
      • 🥦 3.5 配置文件 - 分布式序列配置
        • 🍈 3.5.1 UUID
        • 🍈 3.5.2 SNOWFLAKE
    • 🍀 四.SpringBoot项目相关代码准备
      • 🥦 4.1 实体类编写
      • 🥦 4.2 编写Mapper
    • 🍀 五.水平分表测试
      • 🥦 5.1 水平分表测试
      • 🥦 5.2 结果查询
    • 🍀 六.总结
    • 💬 七.共勉

🍀 一.ShardingSphere项目实战集群环境准备

关于项目启动需要提前准备并进行配置的环境我在上一篇文章中做了详细的讲解,如果还有问题的同学可以参考上一篇文章进行学习。

ShardingSphere项目实战集群环境准备

🍀 二.水平分表之数据库配置

🥦 2.1 需求分析说明

  1. 在node1-shardingsphere 192.168.10.132服务器上, 创建数据库 ljw_course_db;然后创建表 t_course_1 、 t_course_2;
  2. 约定规则:如果添加的课程 id 为偶数添加到 t_course_1 中,奇数添加到 t_course_2 中。

🥦 2.2 数据库创建

CREATE TABLE t_course_1 (
  `cid` BIGINT(20) NOT NULL,
  `user_id` BIGINT(20) DEFAULT NULL,
  `cname` VARCHAR(50) DEFAULT NULL,
  `brief` VARCHAR(50) DEFAULT NULL,
  `price` DOUBLE DEFAULT NULL,
  `status` INT(11) DEFAULT NULL,
  PRIMARY KEY (`cid`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;


CREATE TABLE t_course_2 (
  `cid` BIGINT(20) NOT NULL,
  `user_id` BIGINT(20) DEFAULT NULL,
  `cname` VARCHAR(50) DEFAULT NULL,
  `brief` VARCHAR(50) DEFAULT NULL,
  `price` DOUBLE DEFAULT NULL,
  `status` INT(11) DEFAULT NULL,
  PRIMARY KEY (`cid`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;

在这里插入图片描述

🍀 三.SpringBoot项目中水平分表的配置

sharding-jdbc进行分库分表的配置,主要包括:数据源、分片键、主键生成策略、分片策略等。

注意:项目实战过程中有不熟的概念可以参考对应的官方网站,因为内容较多,本篇文章不做过多详细的说明,包括使用到的很多知识内容,官网开发手册都有更加详细的指导说明。

ShardingSphere开发者手册

🥦 3.1 配置文件 - 基本配置

# 应用名称
spring.application.name=sharding-jdbc-demo
# 打印SQL语句
spring.shardingsphere.props.sql-show=true
# SQL输出日志
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

🥦 3.2 配置文件 - 数据源

# 定义数据源
spring.shardingsphere.datasource.names = db1

# 数据源连接信息配置
spring.shardingsphere.datasource.db1.type = com.zaxxer.hikari.HikariDataSource
spring.shardingsphere.datasource.db1.driver-class-name = com.mysql.jdbc.Driver
spring.shardingsphere.datasource.db1.url = jdbc:mysql://192.168.10.132:3306/ljw_course_db?characterEncoding=UTF-8&useSSL=false
spring.shardingsphere.datasource.db1.username = root
spring.shardingsphere.datasource.db1.password = root

🥦 3.3 配置文件 - 配置数据节点

表达式 db1.t_course_$->{1..2}

​ $ 会被大括号中的 {1..2} 所替换, ${begin..end} 表示范围区间

​ 会有两种选择: db1.t_course_1db1.t_course_2

在这里插入图片描述

# 标准分片表配置  -  配置数据节点
# 由数据源名 + 表名组成,以小数点分隔。多个表以逗号分隔,支持 inline 表达式。
spring.shardingsphere.rules.sharding.tables.t_course.actual-data-nodes=db1.t_course_$->{1..2}

注意:此处使用了行表达式,想深入了解的同学可以参考官网进行学习!

行表达式官方网站学习手册

🥦 3.4 配置文件 - 配置分片策略(包括分片键和分片算法)

分片相关内容官方网站学习手册

🍈 3.4.1 分片键配置

# 分片键名称
spring.shardingsphere.rules.sharding.tables.t_course.table-strategy.standard.sharding-column=cid

🍈 3.4.2 分片算法配置

在配置分片算法之前,我们做如下的约定:分片规则,约定cid值为偶数时,添加到t_course_1表,如果cid是奇数则添加到t_course_2表。

# 分片算法
# 分片算法名称配置
spring.shardingsphere.rules.sharding.tables.t_course.table-strategy.standard.sharding-algorithm-name=table-inline
# 分片算法类型  --> 行表达式分片算法
spring.shardingsphere.rules.sharding.sharding-algorithms.table-inline.type=INLINE
# 分片算法的属性配置
# 为什么要加1 ? 因为我们约定cid值为偶数时,添加到t_course_1,反之,添加到t_course_2,取余后是0 和 1 ,加 1 就是我们的数据库1 和 数据库2 
spring.shardingsphere.rules.sharding.sharding-algorithms.table-inline.props.algorithm-expression=t_course_$->{cid % 2 + 1}

🥦 3.5 配置文件 - 分布式序列配置

分布式主键相关内容官方网站学习手册

🍈 3.5.1 UUID

采用 UUID.randomUUID() 的方式产生分布式主键。

实体类中对应数据库表中的主键ID代码配置

	// 省略部分代码

	// 核心配置代码
    //通过MyBatisPlus生成主键
    @TableId(value="cid",type = IdType.ASSIGN_ID)
    private Long id;
    
    // 省略部分代码

🍈 3.5.2 SNOWFLAKE

在分片规则配置模块可配置每个表的主键生成策略,默认使用雪花算法(snowflake)生成 64bit 的长整型数据。

雪花算法是由 Twitter 公布的分布式主键生成算法,它能够保证不同进程主键的不重复性,以及相同进程主键的有序性。

配置文件:

# 分布式序列配置
# 分布式序列的列名
spring.shardingsphere.rules.sharding.tables.t_course.key-generate-strategy.column=cid
# 分布式序列-算法名称
spring.shardingsphere.rules.sharding.tables.t_course.key-generate-strategy.key-generator-name=alg-snowflake
# 分布式序列-算法类型
spring.shardingsphere.rules.sharding.key-generators.alg-snowflake.type=SNOWFLAKE

实体类中对应数据库表中的主键ID代码配置

	// 省略部分代码

	// 核心配置代码
    @TableId(type = IdType.AUTO)
    private Long id;
    
    // 省略部分代码

🍀 四.SpringBoot项目相关代码准备

🥦 4.1 实体类编写

编写与数据库表对应的实体类

@TableName("t_course")
@Data
@ToString
public class Course {

    @TableId(type = IdType.AUTO)
    private Long cid;

    private Long userId;

    private Long corderNo;

    private String cname;

    private String brief;

    private Double price;

    private Integer status;

}

🥦 4.2 编写Mapper

@Mapper
public interface CourseMapper extends BaseMapper<Course> {

}

🍀 五.水平分表测试

🥦 5.1 水平分表测试

	@Autowired(required = false)
    private CourseMapper courseMapper;

    @Test
    public void testInsertCourse(){
        for (int i = 0; i < 30; i++) {
            Course course = new Course();
            // 注意: cid使用雪花算法配置了(还可以使用MybatisPlus UUID),此处不用配置
            course.setUserId(1000L+i);
            course.setCname("ShardingSphere");
            course.setBrief("ShardingSphere保姆级学习教程!!!");
            course.setPrice(99L);
            course.setStatus(1);
            courseMapper.insert(course);
        }
    }

🥦 5.2 结果查询

项目运行成功 !

在这里插入图片描述

数据成功插到表1 !

在这里插入图片描述

数据成功插入表2 !

在这里插入图片描述

🍀 六.总结

本篇文章主要讲解了ShardingSphere分库分表实战之水平分表,下节预告,ShardingSphere分库分表实战之水平分库,敬请期待。

💬 七.共勉

最后,我想和大家分享一句一直激励我的座右铭,希望可以与大家共勉!

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/769518.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

科东软件入选“四化”赋能重点平台

科东软件Intewell工业嵌入式实时操作系统成功入选广州市“四化”赋能重点平台名单 2023年7月14日&#xff0c;广州市工业和信息化局公布广州市“四化”赋能重点平台名单&#xff08;第二批&#xff09;&#xff0c;科东软件凭借国产化技术创新优势、成熟的数字化转型方案&#…

与 AI 数智助理 Kyligence Copilot 携手,共同挖掘数据的无限潜能

Kyligence 用户大会近日在上海顺利召开&#xff0c;会上 Kyligence 重磅发布了 AI 数智助理 Kyligence Copilot&#xff08;预览版&#xff09;。生成式 AI&#xff08;Generative AI&#xff09;正带来人机交互方式的革命&#xff0c;并将改变人类使用数据的习惯&#xff0c;K…

MyBatis学习笔记——1

MyBatis学习笔记——1 一、MyBatis概述1.1、框架1.2、三层架构1.4、了解MyBatis1.4、ORM思想 二、MyBatis入门程序2.1、Mybatis程序的编写2.2、MyBatis入门程序的一些小细节2.3、MyBatis事务管理机制深度解析2.4、在开发中junit是如何使用的2.5、Mybatis集成日志框架logback 三…

3.9 Bootstrap 分页

文章目录 Bootstrap 分页分页&#xff08;Pagination&#xff09;默认的分页分页的状态分页的大小 翻页&#xff08;Pager&#xff09;默认的翻页对齐的链接翻页的状态 分页 Bootstrap 分页 本章将讲解 Bootstrap 支持的分页特性。分页&#xff08;Pagination&#xff09;&…

PADS VX2.5学习

1、关于库的定义 PADS中的元件库分为四个文件 &#xff1a;*.ld9 *.ln9 *.pd9 *.pt9 即CAE、 LINES、PCB DECAL、PART TYPE。只有这四个文件都存在才是一个完整的库&#xff0c;才可以加载。 我们设计的电路所用到的元件必须在PADS logic和PADS layout中都存在&#xff0c;…

【正点原子STM32连载】第六十五章 UCOSII实验3-消息队列、信号量集和软件定时器摘自【正点原子】STM32F103 战舰开发指南V1.2

1&#xff09;实验平台&#xff1a;正点原子stm32f103战舰开发板V4 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id609294757420 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html# 第六…

【Linux系统编程】Linux调试器——gdb 的基本使用

文章目录 1. 准备工作及知识补充1.1 源文件和Makefile1.2 安装gdb并解决没有调式信息的问题debug和release的了解如何解决 2. gdb的基本使用2.1 显示代码2.2 设置、删除和查看断点2.3 禁用和启用断点2.4 逐语句和逐过程调式2.5 查看函数调用堆栈2.6 查看指定变量的值2.7 跳至指…

STM32学习笔记(十二)丨RTC实时时钟

本篇文章包含的内容 一、计算机底层计时系统——时间戳1.1 时间戳简介1.2 GMT/UTC1.3 C语言和time.h库 二、STM32的BKP和RTC时钟2.1 BKP&#xff08;Backup Registers&#xff09;备份寄存器2.2 RTC&#xff08;Real Time Clock&#xff09;实时时钟2.2.1 RTC简介2.2.2 RTC的内…

行业追踪,2023-07-18,减速器,汽车零部件是重点关注板块,随时开启

自动复盘 2023-07-18 凡所有相&#xff0c;皆是虚妄。若见诸相非相&#xff0c;即见如来。 k 线图是最好的老师&#xff0c;每天持续发布板块的rps排名&#xff0c;追踪板块&#xff0c;板块来开仓&#xff0c;板块去清仓&#xff0c;丢弃自以为是的想法&#xff0c;板块去留让…

PB从入坑到放弃(五)窗口使用技巧

PB从入坑到放弃&#xff08;五&#xff09;窗口使用技巧 一、窗口类型二、窗口属性2.1 General 属性页属性2.2 Scroll 属性页属性2.3 ToolBar 属性页属性2.4 Other 属性页中的属性 三、11种常用控件四、窗口事件4.1 常用事件4.2 举个栗子 五、窗口常用函数5.1 open 函数5.2 clo…

【力扣每日一题】2023.7.19 模拟行走机器人

题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 机器人模拟类题目,力扣里有很多这样的模拟题,就是模拟机器人在坐标系上行走. 套路就是记下每个方向行走后,x轴和y轴的变化&#xff08;代码中的direction&#xff09;,例如 direction[0] 就表示向北走一次,y轴1,x轴不变.…

防静电门禁闸机的设计和功能

防静电门禁闸机是一种用于控制人员出入的设备&#xff0c;主要用于对人员进行身份验证和进出控制。它的主要功能是防止静电干扰和未经授权的人员进入特定区域。 防静电门禁闸机一般包括以下几个方面的设计和功能&#xff1a; 1. 门禁系统&#xff1a;防静电门禁闸机通常集成了…

宝塔面板登陆不上去了,一直显示加载

宝塔面板登陆不上去了&#xff0c;一直显示加载 半天了登不上去&#xff0c;不知道这是怎么回事? 解答&#xff1a; 您好&#xff0c;服务器内执行bt 16命令先修复&#xff0c;然后重新访问看下。

安卓APK反编译+修改+重打包+签名

目录 1.下载反编译工具包。2.将APK包&#xff0c;重命名为ZIP&#xff0c;解压。放到反编译根目录下。3.使用apktool反编译修改smail文件&#xff0c;进行重打包4.重新打包5.重签名 1.下载反编译工具包。 反编译工具包地址&#xff1a;百度网盘 提取码&#xff1a;dsu3 解压后…

汽配企业专用的MES管理系统与普通系统相比有哪些特征

随着全球化的加速和市场竞争的日益激烈&#xff0c;汽配企业对于生产管理的要求越来越高。为了满足这种需求&#xff0c;越来越多的汽配企业开始引入MES管理系统解决方案来管理和优化其生产线。与传统的普通系统相比&#xff0c;汽配企业MES管理系统具有以下几个显著的特征&…

Ceph 分布式存储之部署

一.Ceph 存储基础 1、单机存储设备 DAS&#xff08;直接附加存储&#xff0c;是直接接到计算机的主板总线上去的存储&#xff09; IDE、SATA、SCSI、SAS、USB 接口的磁盘 所谓接口就是一种存储设备驱动下的磁盘设备&#xff0c;提供块级别的存储 NAS&#xff08;网络附加存储…

谷歌和加州大学伯克利分校的“改革者”在单个GPU上运行64K序列

转换器模型是自然语言处理&#xff08;NLP&#xff09;研究领域越来越流行的神经网络架构&#xff0c;大型变压器可以在许多任务上实现最先进的性能。代价是转换器过多的计算消耗和成本&#xff0c;尤其是对于长序列上的训练模型。 谷歌和加州大学伯克利分校的研究人员最近发表…

C#被指定窗体的MdiParent的窗体不是MdiContainer

工作的时候遇到一个问题&#xff1a; 被指定窗体的MdiParent的窗体不是MdiContainer 这个问题的原因是父窗体的IsMdiContainer 属性设置为false导致的。将此属性设置为true&#xff0c;即可解决此问题。有两种方式设置窗体的IsMdiContainer 属性。 第一种&#xff0c;在父窗口…

IndexedDB

IndexedDB 操作流程打开数据库新建数据库新增数据读取数据遍历数据更新数据删除数据使用索引案例 indexedDB对象indexedDB.open() 操作流程 打开数据库 使用IndexedDB 的第一步是打开数据库&#xff0c;使用indexedDB.open()方法 // 第一个参数是字符串&#xff0c;表示数据…

MyBatis注解开发

1 Mybatis注解开发单表操作 1.1 MyBatis的常用注解 Mybatis也可以使用注解开发方式&#xff0c;这样可以减少编写Mapper映射文件 Insert&#xff1a;实现新增 Update&#xff1a;实现更新 Delete&#xff1a;实现删除 Select&#xff1a;实现查询 Result&#xff1a;实现…