ShardingSphere-JDBC垂直分片

文章目录

  • 1、订单库 db_order
    • 1.2、创建数据库
  • 2、用户库 db_user
    • 2.1、创建 atguigu-mysql-user 容器
    • 2.2、登录 atguigu-mysql-user 容器
    • 2.3、设置密码
    • 2.4、创建数据库
  • 3、创建实体类 TOrder
  • 4、创建实体类 TUser
  • 5、创建 TOrderMapper
  • 6、创建 TUserMapper
  • 7、application.yml
  • 8、shardingsphere.yaml
  • 9、ShardingJdbcDemoApplicationTests

垂直分片:在项目中可以将垂直分片到不同库中的多张表加载到一个项目中使用。

1、订单库 db_order

3306主 -> 3316从 :订单库 db_order
订单库将来访问压力比较大,我们要考虑主从复制
3306和3316容器我们已经在 mysql搭建主从复制的时候创建好了,参考这篇博客:mysql-搭建主从复制

1.2、创建数据库

CREATE DATABASE db_order;
USE db_order;
CREATE TABLE t_order (id BIGINT AUTO_INCREMENT,order_no VARCHAR(30),user_id BIGINT,PRIMARY KEY(id) 
);

创建完之后,我们会发现从库3316没有同步创建数据库 db_order,因为当时我们在搭建mysql的主从复制的时候,只设置了复制mydb2,mydb3数据库到3316从库中。
在这里插入图片描述

2、用户库 db_user

3326主
因为用户的数据量没有那么大,并发操作没那么多,所以我们不需要考虑主从复制

2.1、创建 atguigu-mysql-user 容器

docker run -d \
-p 3326:3306 \
-v mysql-user-conf:/etc/mysql/conf.d \
-v mysql-user-data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
--name atguigu-mysql-user \
mysql:8
[root@localhost ~]# docker run -d \
> -p 3326:3306 \
> -v mysql-user-conf:/etc/mysql/conf.d \
> -v mysql-user-data:/var/lib/mysql \
> -e MYSQL_ROOT_PASSWORD=123456 \
> --name atguigu-mysql-user \
> mysql:8
d2e24da102d53cdeb3db591b8667facec3973a3fa1d2029e2d5306f3441ff574
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE                    COMMAND                   CREATED          STATUS          PORTS                                                                                  NAMES
d2e24da102d5   mysql:8                  "docker-entrypoint.s…"   28 seconds ago   Up 26 seconds   33060/tcp, 0.0.0.0:3326->3306/tcp, :::3326->3306/tcp                                   atguigu-mysql-user
c236f876ae40   mysql:8                  "docker-entrypoint.s…"   11 days ago      Up 21 hours     33060/tcp, 0.0.0.0:3316->3306/tcp, :::3316->3306/tcp                                   atguigu-mysql-slave1
89bb2276fc3d   elasticsearch:8.8.2      "/bin/tini -- /usr/l…"   4 weeks ago      Up 22 hours     0.0.0.0:9200->9200/tcp, :::9200->9200/tcp, 0.0.0.0:9300->9300/tcp, :::9300->9300/tcp   elasticsearch
8c71efe9dca7   wurstmeister/zookeeper   "/bin/sh -c '/usr/sb…"   4 weeks ago      Up 22 hours     22/tcp, 2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp, :::2181->2181/tcp                  zookeeper
c14772057ab8   redis                    "docker-entrypoint.s…"   9 months ago     Up 22 hours     0.0.0.0:6379->6379/tcp, :::6379->6379/tcp                                              spzx-redis
ab66508d9441   mysql:8                  "docker-entrypoint.s…"   9 months ago     Up 22 hours     0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp                                   spzx-mysql

创建完容器,配置文件不需要改,因为 atguigu-mysql-user 容器 我们不需要搭建主从复制。

2.2、登录 atguigu-mysql-user 容器

[root@localhost ~]# docker exec -it atguigu-mysql-user /bin/bash
root@d2e24da102d5:/# mysql -uroot -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.27 MySQL Community Server - GPLCopyright (c) 2000, 2021, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

2.3、设置密码

-- 设置密码
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
-- 刷新权限
FLUSH PRIVILEGES;
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
Query OK, 0 rows affected (0.01 sec)mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

2.4、创建数据库

CREATE DATABASE db_user;
USE db_user;
CREATE TABLE t_user (id BIGINT AUTO_INCREMENT,uname VARCHAR(30),PRIMARY KEY (id)
);

在这里插入图片描述

3、创建实体类 TOrder

package com.atguigu.sharding.jdbc.demo.bean;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Data
@TableName("t_order")
public class TOrder {@TableId(type = IdType.AUTO)private Long id;private String orderNo;private Long userId;
}

4、创建实体类 TUser

package com.atguigu.sharding.jdbc.demo.bean;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Data
@TableName(value = "t_user")
public class TUser {private Long id;private String uname;}

5、创建 TOrderMapper

package com.atguigu.sharding.jdbc.demo.mapper;import com.atguigu.sharding.jdbc.demo.bean.TOrder;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;@Mapper
public interface TOrderMapper extends BaseMapper<TOrder> {
}

6、创建 TUserMapper

package com.atguigu.sharding.jdbc.demo.mapper;import com.atguigu.sharding.jdbc.demo.bean.TUser;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;@Mapper
public interface TUserMapper extends BaseMapper<TUser> {
}

7、application.yml

spring:datasource:
#    driver-class-name: com.mysql.cj.jdbc.Driver# 驱动类:使用shardingjdbc提供的驱动类driver-class-name: org.apache.shardingsphere.driver.ShardingSphereDriver
#    username: root
#    password: 123456
#    url: jdbc:mysql://192.168.74.148:3306/mydb2?serverTimezone=GMT%2B8url: jdbc:shardingsphere:classpath:shardingsphere.yaml

8、shardingsphere.yaml

# 模式配置
mode:# shardingjdbc:使用的是单机模式type: Standalonerepository:type: JDBC
# 数据源配置
dataSources:write_ds:dataSourceClassName: com.zaxxer.hikari.HikariDataSourcedriverClassName: com.mysql.cj.jdbc.DriverjdbcUrl: jdbc:mysql://192.168.74.148:3306/mydb2username: rootpassword: 123456read_ds_0:dataSourceClassName: com.zaxxer.hikari.HikariDataSourcedriverClassName: com.mysql.cj.jdbc.DriverjdbcUrl: jdbc:mysql://192.168.74.148:3316/mydb2username: rootpassword: 123456user_ds:dataSourceClassName: com.zaxxer.hikari.HikariDataSourcedriverClassName: com.mysql.cj.jdbc.DriverjdbcUrl: jdbc:mysql://192.168.74.148:3326/db_userusername: rootpassword: 123456order_ds:dataSourceClassName: com.zaxxer.hikari.HikariDataSourcedriverClassName: com.mysql.cj.jdbc.DriverjdbcUrl: jdbc:mysql://192.168.74.148:3306/db_orderusername: rootpassword: 123456rules:# 读写分离配置:指定读交给哪个数据源 写交给哪个- !READWRITE_SPLITTINGdataSources:readwrite_ds:writeDataSourceName: write_dsreadDataSourceNames:- read_ds_0transactionalReadQueryStrategy: PRIMARY # 事务内读请求的路由策略,可选值:PRIMARY(路由至主库)、FIXED(同一事务内路由至固定数据源)、DYNAMIC(同一事务内路由至非固定数据源)。默认值:DYNAMIC# 配置读操作的负载均衡策略loadBalancerName: randomloadBalancers:random:type: RANDOMround_robin:type: ROUND_ROBINweight:type: WEIGHTprops:read_ds_0: 1# 垂直分片配置- !SHARDINGtables:t_user:actualDataNodes: user_ds.t_usert_order:actualDataNodes: order_ds.t_order
# 输出sql:
props:# 打印 sharding 的sql日志sql-show: true

9、ShardingJdbcDemoApplicationTests

package com.atguigu.sharding.jdbc.demo;import com.atguigu.sharding.jdbc.demo.bean.TOrder;
import com.atguigu.sharding.jdbc.demo.bean.TUser;
import com.atguigu.sharding.jdbc.demo.mapper.TOrderMapper;
import com.atguigu.sharding.jdbc.demo.mapper.TUserMapper;
import jakarta.annotation.Resource;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest
class ShardingJdbcDemoApplicationTests {@ResourceTUserMapper tUserMapper;@ResourceTOrderMapper torderMapper;@Testvoid contextLoads() {TUser tUser = new TUser();tUser.setUname("张三");tUserMapper.insert(tUser);TOrder tOrder = new TOrder();tOrder.setOrderNo("1234");tOrder.setUserId(1L);torderMapper.insert(tOrder);}}
2024-09-25T11:53:56.395+08:00  INFO 15748 --- [           main] ShardingSphere-SQL                       : Logic SQL: INSERT INTO t_user  ( id,
uname )  VALUES  ( ?,
? )
2024-09-25T11:53:56.395+08:00  INFO 15748 --- [           main] ShardingSphere-SQL  Actual SQL: user_ds ::: INSERT INTO t_user  ( id,
uname )  VALUES  (?, ?) ::: [1838788985485291522, 张三]
2024-09-25T11:53:56.436+08:00  INFO 15748 --- [           main] ShardingSphere-SQL                       : Logic SQL: INSERT INTO t_order  ( order_no,
user_id )  VALUES  ( ?,
? )
2024-09-25T11:53:56.437+08:00  INFO 15748 --- [           main] ShardingSphere-SQL  Actual SQL: order_ds ::: INSERT INTO t_order  ( order_no,
user_id )  VALUES  (?, ?) ::: [1234, 1]

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

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

相关文章

Vue常用PC端和移动端组件库、Element UI的基本使用(完整引入和按需引入)

目录 1. Vue常用PC端和移动端组件库2. Element UI的基本使用2.1 完整引入2.2 按需引入 1. Vue常用PC端和移动端组件库 提供常用的布局、按钮、输入框、下拉框等UI布局&#xff0c;以组件的形式提供。使用这些组件&#xff0c;结构、样式、交互就都有了 移动端常用UI组件库 Van…

如何借助Java批量操作Excel文件?

最新技术资源&#xff08;建议收藏&#xff09; https://www.grapecity.com.cn/resources/ 前言 | 问题背景 在操作Excel的场景中&#xff0c;通常会有一些针对Excel的批量操作&#xff0c;批量的意思一般有两种&#xff1a; 对批量的Excel文件进行操作。如导入多个Excel文件…

工业制造场景中的设备管理深度解析

在工业制造的广阔领域中&#xff0c;设备管理涵盖多个关键方面&#xff0c;对企业的高效生产和稳定运营起着举足轻重的作用。 一、设备运行管理 1.设备状态监测 实时监控设备的运行状态是确保生产顺利进行的重要环节。通过传感器和数据采集系统等先进技术&#xff0c;获取设备…

最详细的AI产品经理学习路径|精确到天

&#x1f48c;最近很多想转行AI产品经理的小伙伴问我&#xff0c;AI产品经理到底要学哪些东西呢&#xff1f; ⏩这里&#xff0c;我整理了一份详细的AI产品经理学习路径&#xff0c;大家只要按照思维导图&#xff0c;进行学习就可以了 &#x1f48e;整个学习框架和体系是精心…

GESP等级考试C++二级-while语句

while语句用于循环执行某些语句。 1 while语句格式 while语句的格式如图1所示。 图1 while语句的格式 当while后面跟的条件是true时&#xff0c;则执行尖括号内的操作&#xff0c;执行完成之后&#xff0c;如果条件依然是true&#xff0c;则继续执行尖括号内的操作&#xff…

FortiOS SSL VPN 用户访问权限配置

简介 使用不同用户组或用户登录 SSL VPN 隧道模式后&#xff0c;可配置不同的访问权限。 本文介绍为不同用户组分配不同访问权限的配置方法。 相关组件 FortiGate&#xff1a;FortiOS v6.4.14 build2093 (GA) 客户端&#xff1a;Windows11&#xff0c;安装 FortiClient VPN 7.…

vscode下pnpm命令执行不了

今天使用pnpm install 报错&#xff0c;信息如下&#xff1a; 解决方法 一、安装pnpm 用cmd执行命令 npm install pnpm -g 二、用powershell 以管理员身份运行 执行命令 set-ExecutionPolicy RemoteSigned 回到vscode执行 pnpm install已经可以执行了

3D Slicer医学图像全自动AI分割组合拳-MONAIAuto3DSeg扩展

3D Slicer医学图像全自动AI分割组合拳-MONAIAuto3DSeg扩展 1 官网下载最新3D Slicer image computing platform | 3D Slicer 版本5.7 2 安装torch依赖包&#xff1a; 2.1 进入安装目录C:\Users\wangzhenlin\AppData\Local\slicer.org\Slicer 5.7.0-2024-09-21\bin&#xff0…

UE4_Niagara基础实例—使用自定义参数

实现的功能&#xff1a;使用自定义的参数来调整粒子远离发射器后粒子大小的变化 效果图&#xff1a; 操作步骤&#xff1a; 1、创建Niagara系统&#xff0c;使用Simple Sprite Burst模板作为新系统的发射器&#xff0c;更名为NS_Custompara。 2、双击打开Niagara系统编辑界面…

闰年判断-C语言

1.问题&#xff1a; 判断某一年是否是闰年。 2.解答&#xff1a; 闰年是公历中的名词&#xff0c;分为普通闰年和世纪闰年&#xff0c;普通闰年:公历年份是4的倍数的&#xff0c;且不是100的倍数&#xff0c;为普通闰年&#xff1b;世纪闰年:公历年份是整百数的&#xff0c;必…

5个被低估的Huggingface工具

Hugging Face Hub 拥有超过 85 万个公共模型&#xff0c;每月新增约 5 万个模型&#xff0c;而且这个数字似乎还在不断攀升。我们还提供企业中心订阅&#xff0c;可解锁合规性、安全性和治理功能&#xff0c;以及推理端点上的额外计算能力&#xff0c;用于生产级推理&#xff0…

Vue 自定义指令实现权限控制

一. 引言 Vue.js 提供了一种简单、灵活的方式来创建交互式的用户界面。在 Vue.js 中&#xff0c;指令是一种特殊的属性&#xff0c;可以附加到 HTML 元素上以执行一些操作。我们可以使用自定义指令来实现各种功能&#xff0c;比如&#xff1a;权限控制、自动聚焦、拖动指令等等…

网安加·百家讲坛 | 刘寅:人工智能(AI)是解决软件工程问题的“银子弹”吗?

作者简介&#xff1a;刘寅&#xff0c;东南大学电子工程系本、硕&#xff0c;南京大学EMBA&#xff0c;PMP&#xff0c;前科大讯飞技术副总经理&#xff0c;曾就职于中兴通讯、摩托罗拉、趋势科技、初速度等国内、国际名企&#xff0c;多次负责过质量体系从0到1的搭建&#xff…

【研赛A题成品论文】24华为杯数学建模研赛A题成品论文+可运行代码丨免费分享

2024华为杯研究生数学建模竞赛A题精品成品论文已出&#xff01; A题 风电场有功功率优化分配 一、问题分析 A题是一道工程建模与优化类问题&#xff0c;其目的是根据题目所给的附件数据资料分析风机主轴及塔架疲劳损伤程度&#xff0c;以及建立优化模型求解最优有功功率分配…

「JVS更新日志」智能BI、低代码、逻辑引擎9.25功能更新说明

项目介绍 JVS是企业级数字化服务构建的基础脚手架&#xff0c;主要解决企业信息化项目交付难、实施效率低、开发成本高的问题&#xff0c;采用微服务配置化的方式&#xff0c;提供了 低代码数据分析物联网的核心能力产品&#xff0c;并构建了协同办公、企业常用的管理工具等&am…

【C++掌中宝】用最少的话让你全方位理解内联函数

文章目录 引言1. 什么是内联函数2. 工作原理3. 内联函数的编程风格4. 使用限制5. 内联函数与宏的比较6. 优缺点7. 何时使用内联函数8. 补充9. 总结结语 引言 在C编程中&#xff0c;函数的调用开销是程序运行效率的一个重要影响因素。为了解决频繁调用函数时的性能问题&#xf…

人工智能助力阿尔茨海默症治疗:微软与上海精神卫生中心的新研究

最近&#xff0c;微软研究院与上海市精神卫生中心合作&#xff0c;基于微软 Azure OpenAI 服务中的多模态大模型&#xff0c;开发了一种名为“忆我”&#xff08;ReMe&#xff09;的个性化认知训练框架。这一创新项目旨在通过数字化手段扩展自动化认知训练的范围&#xff0c;为…

如何瞬间建造一个百亿商品的网上商城?借助API,无需逐个上传商品数据,自动对接电商平台百亿商品数据

在快速发展的电商时代&#xff0c;构建一个拥有百亿级商品数据的网上商城曾是许多企业遥不可及的梦想。然而&#xff0c;随着技术的不断进步&#xff0c;特别是电商平台API接口的广泛应用&#xff0c;这一梦想正逐渐变为现实。本文将详细介绍如何通过调用电商平台API接口&#…

用AI绘画年入百万?揭秘高效起始号与现变路径...

part.1 AI绘画的优势 AI绘画的魅力在于其高效和灵活 无论你是通过Midjourney还是Stable Diffusion&#xff0c;只需输入简单的提示词&#xff0c;再加上一些额外的控制调整&#xff0c;AI绘画就能快速生成各种创意内容。角色IP设计、游戏原画、3D场景甚至是天马行空的创意都…

扫雷老年版2.0无猜模式

扫雷老年版2.0无猜模式 打破记录5秒&#xff0c;到达4秒。