ShardingSphere分库分表实战之广播表

news2024/11/27 7:40:36

在这里插入图片描述

🚀 ShardingSphere 🚀

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

🚀 ShardingSphere 🚀

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

🍔 目录

    • 🍀 一.ShardingSphere项目实战集群环境准备
    • 🍀 二.ShardingSphere分库分表实战之广播表
      • 🥦 2.1 广播表概念
      • 🥦 2.2 数据库创建
    • 🍀 三.SpringBoot项目中广播表的配置
      • 🥦 3.1 配置文件 - 基本配置
      • 🥦 3.2 配置文件 - 数据源
      • 🥦 3.3 配置文件 - 配置数据节点
      • 🥦 3.4 配置文件 - 广播表配置
      • 🥦 3.5 配置文件 - 分布式序列配置
        • 🍈 3.5.1 UUID
        • 🍈 3.5.2 SNOWFLAKE
    • 🍀 四.SpringBoot项目相关代码准备
      • 🥦 4.1 实体类编写
      • 🥦 4.2 Mapper编写
    • 🍀 五.ShardingSphere分库分表实战之广播表测试
      • 🥦 5.1 添加数据测试
      • 🥦 5.2 广播表查询数据测试
    • 🍀 六.总结
    • 💬 七.共勉

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

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

ShardingSphere项目实战集群环境准备
ShardingSphere分库分表实战之水平分表
ShardingSphere分库分表实战之水平分库和水平分表

🍀 二.ShardingSphere分库分表实战之广播表

🥦 2.1 广播表概念

    广播表指所有的分片数据源中都存在的表,表结构及其数据在每个数据库中均完全一致。
    广播表属于系统中数据量较小,变动少,而且属于高频联合查询的依赖表。适用于数据量不大且需要与海量数据的表进行关联查询的场景。参数表、数据字典表等属于此类型。
    可以将这类表在每个数据库都保存一份,所有更新操作都同时发送到所有分库执行。接下来看一下如何使用Sharding-JDBC实现公共表的数据维护。

🥦 2.2 数据库创建

分别在node1-shardingsphere服务器上的ljw_course_db1数据库和node2-shardingsphere服务器上的ljw_course_db2数据库上创建user表

CREATE TABLE user
(
    id BIGINT(20) NOT NULL COMMENT '主键ID',
    name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
    age INT(11) NULL DEFAULT NULL COMMENT '年龄',
    email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
    PRIMARY KEY (id)
);

表结构创建完成:

在这里插入图片描述

🍀 三.SpringBoot项目中广播表的配置

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

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,db2

# 数据源1连接信息配置
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_db1?characterEncoding=UTF-8&useSSL=false
spring.shardingsphere.datasource.db1.username = root
spring.shardingsphere.datasource.db1.password = root

# 数据源2连接信息配置
spring.shardingsphere.datasource.db2.type = com.zaxxer.hikari.HikariDataSource
spring.shardingsphere.datasource.db2.driver-class-name = com.mysql.jdbc.Driver
spring.shardingsphere.datasource.db2.url = jdbc:mysql://192.168.10.133:3306/ljw_course_db2?characterEncoding=UTF-8&useSSL=false
spring.shardingsphere.datasource.db2.username = root
spring.shardingsphere.datasource.db2.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.user.actual-data-nodes=db$->{1..2}.user

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

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

🥦 3.4 配置文件 - 广播表配置

该实战只配置了一个广播表,可以配置多个广播表

#  广播表规则列表
spring.shardingsphere.rules.sharding.broadcast-tables[0]=user

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

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

注意:下面俩种分布式ID的配置方案主要是对表user,之前文章中也讲过很多遍,,此处不做过多演示。

🍈 3.5.1 UUID

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

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

	// 省略部分代码

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

🍈 3.5.2 SNOWFLAKE

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

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

配置文件:

# 表主键生成策略
# 分布式序列配置
# 分布式序列的列名
spring.shardingsphere.rules.sharding.tables.user.key-generate-strategy.column=id
# 分布式序列-算法名称
spring.shardingsphere.rules.sharding.tables.user.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("user")
@Data
@ToString
public class User {

    @TableId(value="id",type = IdType.ASSIGN_ID)
    private Long id;

    private String name;

    private Integer age;

    private String email;
}

🥦 4.2 Mapper编写

@Mapper
public interface UserMapper extends BaseMapper<User> {

}

🍀 五.ShardingSphere分库分表实战之广播表测试

🥦 5.1 添加数据测试

	@Autowired(required = false)
    UserMapper userMapper;

    @Test
    public void testInsert(){
        User user=new User();
        user.setName("硕风和炜");
        user.setAge(18);
        user.setEmail("xxxxxxx@qq.com");
        userMapper.insert(user);
    }

结果查询

在这里插入图片描述

数据库表查询:

在这里插入图片描述

在这里插入图片描述

🥦 5.2 广播表查询数据测试

	@Test
    public void testSelect(){
        List<User> users = userMapper.selectList(null);
        users.forEach(System.out::println);
    }

结果查询

在这里插入图片描述

🍀 六.总结

本篇文章主要讲解了ShardingSphere分库分表实战之广播表:
    广播表指所有的分片数据源中都存在的表,表结构及其数据在每个数据库中均完全一致。
    广播表属于系统中数据量较小,变动少,而且属于高频联合查询的依赖表。适用于数据量不大且需要与海量数据的表进行关联查询的场景。参数表、数据字典表等属于此类型。
    可以将这类表在每个数据库都保存一份,所有更新操作都同时发送到所有分库执行。下节预告,ShardingSphere分库分表实战之读写分离应用方案,敬请期待。

💬 七.共勉

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

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

多个springmvc项目共用同一个redis导致session冲突的问题 的解决方案

由于redis来做session的统一管理插件&#xff0c;如果多个项目使用同一个redis来管理session的话&#xff0c;那么session很有可能会出现冲突。 下图&#xff1a;默认session在redis中的key值是spring:session:sessions:sessionId&#xff0c;如果多个项目中出现了相同的sessi…

网络安全(黑客)自学的一些建议

1.选择方向 首先是选择方向的问题&#xff0c;网络安全是一个很宽泛的专业&#xff0c;包含的方向特别多。比如 web安全&#xff0c;系统安全&#xff0c;无线安全 &#xff0c;二进制安全&#xff0c;运维安全&#xff0c;渗透测试&#xff0c;软件安全&#xff0c;IOT安全&a…

docker-compose搭建RocketMq集群

集群架构&#xff1a;双主 机器&#xff1a;172.50.2.41 172.50.2.42 一、创建目录 mkdir -p /docker/alibaba/rocketmq/logs/nameserver mkdir -p /docker/alibaba/rocketmq/logs/broker mkdir -p /docker/alibaba/rocketmq/store/broker mkdir -p /docker/alibaba/rocket…

通过Appium和Accessibility Inspector获取iOS应用元素定位的方法

在 iOS 移动应用程序上使用选择器查找元素定位是我们在移动端 UI 自动化测试的先决条件。 但是&#xff0c;由于应用程序内容在原生 iOS 应用程序中的呈现方式&#xff0c;我们可以用来定位应用程序元素的选择器与 Web 浏览器元素有很大不同。 在本文中&#xff0c;我们将了解 …

Spring Boot 日志文件有什么用

目录 一、自定义打印日志 1.1 日志框架说明 1.2 实现自定义打印日志 1.3 日志的格式说明 2.1 日志的级别 2.2 设置日志级别的作用&#xff1a; 2.3 如何设置日志的级别 二、 日志的持久化 3.1 设置日志保存路径 &#xff08;在 .yml 配置文件中设置日志保存路径&…

一、二维前缀和算法

文章目录 前缀和模板724. 寻找数组的中心下标238. 除自身以外数组的乘积560. 和为 K 的子数组974. 和可被 K 整除的子数组525. 连续数组1314. 矩阵区域和 前缀和模板 一维前缀和&#xff1a; import java.util.*;public class Main {public static void main(String[] args) …

docker-compose启动minio

一、创建文件夹 mkdir -p /docker/stand-alone-minio/data mkdir -p /docker/stand-alone-minio/configchmod 777 -R /docker/stand-alone-minio/data chmod 777 -R /docker/stand-alone-minio/config 二、docker-compose.yml version: 3.9services:minio:image: minio/mini…

【Vue3基础】计算属性

一、需求 二、代码 1、创建项目 创建项目&#xff1a; 1、 npm init vuelatest 2、一路回车 3、输入项目名&#xff0c;不要大写&#xff0c;如vue3bilibili 4、 cd vue3bilibili 5、 npm install 6、npm run dev启动&#xff0c;可以获取网址 2、App.vue文件中&#xff1a;…

UNIX网络编程卷一 学习笔记 第二十五章 信号驱动式IO

信号驱动式IO指进程预先告知内核&#xff0c;当某个描述符上发生某事时&#xff0c;内核使用信号通知相关进程&#xff0c;它在历史上曾被称为异步IO&#xff0c;但信号驱动式IO不是真正的异步IO&#xff0c;真正的异步IO通常定义为进程执行IO系统调用告知内核启动某个IO操作&a…

Kafka-partition和消费者的关系

Kafka-partition 目录概述需求&#xff1a; 设计思路实现思路分析1.Kafka-partition2.消费者数量小于分区数量3. 拓展实现 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a…

五笔打字练习经验总结

背景 我之前对键盘不太熟悉&#xff0c;打字的速度我测了一下大概是在30/m的样子&#xff0c;于是想提高自己的打字速度&#xff0c;就练习了下&#xff0c;现在大概到了60/m。由于自己打字拼音打字错误率较高&#xff0c;因为手指键位练习不到位&#xff0c;已经很难纠正了。所…

LeetCode[148]排序链表

难度&#xff1a;Medium 题目&#xff1a; 给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 示例 1&#xff1a; 输入&#xff1a;head [4,2,1,3] 输出&#xff1a;[1,2,3,4]示例 2&#xff1a; 输入&#xff1a;head [-1,5,3,4,0] 输出&…

IOR的安装及使用

简介 IOR 是一种并行 IO 基准测试&#xff0c;可用于测试使用各种接口和访问模式的并行存储系统的性能。IOR存储库还包括mdtest基准测试&#xff0c;专门测试不同目录结构下存储系统的峰值元数据速率。两个基准测试都使用通用并行 I/O 抽象后端&#xff0c;并依赖 MPI 进行同步…

Vue复选框、下拉框使用案例,复选框选项元素(el-checkbox)换行竖向显示

一、复选框 1、<el-checkbox-group></el-checkbox-group>的选项元素默认是行横向显示 <el-checkbox-groupv-model"additionalPermissionsParams.permissionList"change"permissionChange($event)"><el-checkbox label"10"…

c++学习(红黑树)[20]

概念 红黑树&#xff08;Red-Black Tree&#xff09;是一种自平衡的二叉搜索树&#xff0c;它在插入和删除节点时通过一系列的旋转和重新着色操作来保持树的平衡。红黑树的平衡性质使得它在插入、删除和查找等操作上具有较好的性能。 红黑树具有以下特点&#xff1a; 每个节…

【项目开发】商城 - 三级分类 - 简单笔记

目录标题 后端业务类实体类 前端最终实现效果排序变化批量删除 后端 业务类 // 省略其他简单的CRUDOverridepublic List<CategoryEntity> listWithTree() {// 1、查出所有分类List<CategoryEntity> list baseMapper.selectList(null);// 2. 找出所有的一级分类Li…

NOAA官网下载的气象雷达原始数据转化为NC文件详细步骤

一、准备工作 1.先在NOAA官网下载好气象雷达原始数据 NOAA官网下载气象雷达资料详细步骤_珞瑜的博客-CSDN博客 下载好的雷达数据有两种类型Level-2和Level-3。 如上图所示,为气象雷达数据的Level-2产品,站点名字:K

springboot mybatis-plus 多数据源配置(HikariCP)

1.导入依赖jar <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>org.postgresql</groupId><artifactId>postgres…

iOS--虚拟内存

参考文章 要想了解什么是VM Regions&#xff0c;就得先了解什么是虚拟内存。当我们向系统申请内存时&#xff0c;系统并不会给你返回物理内存的地址&#xff0c;而是给你一个虚拟内存地址。每个进程都拥有相同大小的虚拟地址空间&#xff0c;对于32位的进程&#xff0c;可以拥有…