ShardingSphere-Proxy读写分离详解与实战

news2024/9/23 13:15:54

在这里插入图片描述

🚀 ShardingSphere 🚀

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

🚀 ShardingSphere 🚀

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

🍔 目录

    • 🍀 一.ShardingSphere-Proxy核心概念
    • 🍀 二.ShardingSphere-Proxy读写分离详解与实战
      • 🥦 2.1 实战环境准备
      • 🥦 2.2 shardingproxy服务器上修改配置文件config-readwrite-splitting.yaml
      • 🥦 2.3 命令行远程连接简单测试
      • 🥦 2.4 创建SpringBoot程序 - 引入依赖
      • 🥦 2.5 创建SpringBoot程序 - 实体类
      • 🥦 2.6 创建SpringBoot程序 - 数据库Mapper接口 & 主启动类
      • 🥦 2.7 创建SpringBoot程序 - 配置信息连接代理
    • 🍀 三.ShardingSphere-Proxy读写分离实战测试
      • 🥦 3.1 编写测试 - 读写分离 - 主库插入
      • 🥦 3.2 编写测试 - 读写分离 - 从库读取
    • 🍀 四.总结
    • 💬 五.共勉

🍀 一.ShardingSphere-Proxy核心概念

  Sharding-Proxy是ShardingSphere的第二个产品,定位为透明化的数据库代理端,提供封装了数据库二进制协议的服务端版本,用于完成对异构语言的支持。 目前先提供MySQL版本,它可以使用任何兼容MySQL协议的访问客户端(如:MySQL Command Client, MySQL Workbench等操作数据,对DBA更加友好。

  • 向应用程序完全透明,可直接当做MySQL使用
  • 适用于任何兼容MySQL协议的客户端

在这里插入图片描述

🍀 二.ShardingSphere-Proxy读写分离详解与实战

🥦 2.1 实战环境准备

注意:这篇文章的实战讲解是建立在之前的文章实操基础上的,如果你之前的环境还没有搭建好,可以先去搭建好环境,然后再来学习本篇文章的实战就会非常快,事半功倍!

  1. 192.168.10.134服务器(shardingproxy)上部署的ShardingSphere-Proxy代理192.168.10.132服务器和192.168.10.133服务器;
  2. 之前在192.168.10.132服务器(node1-shardingsphere)和192.168.10.133服务器(node2-shardingsphere)配置的MySQL读写分离一主一从架构;
  3. 同步的数据库test;

🥦 2.2 shardingproxy服务器上修改配置文件config-readwrite-splitting.yaml

#schemaName用来指定->逻辑表名
schemaName: readwrite_splitting_db

dataSources:
  write_ds:
    url: jdbc:mysql://192.168.10.132:3306/test?serverTimezone=UTC&useSSL=false&characterEncoding=utf-8
    username: root
    password: root
    connectionTimeoutMilliseconds: 30000
    idleTimeoutMilliseconds: 60000
    maxLifetimeMilliseconds: 1800000
    maxPoolSize: 50
    minPoolSize: 1
  read_ds_0:
    url: jdbc:mysql://192.168.10.133:3306/test?serverTimezone=UTC&useSSL=false&characterEncoding=utf-8
    username: root
    password: root
    connectionTimeoutMilliseconds: 30000
    idleTimeoutMilliseconds: 60000
    maxLifetimeMilliseconds: 1800000
    maxPoolSize: 50
    minPoolSize: 1
    
rules:
- !READWRITE_SPLITTING
  dataSources:
    readwrite_ds:
      staticStrategy:
        writeDataSourceName: write_ds
        readDataSourceNames:
          - read_ds_0

在这里插入图片描述

🥦 2.3 命令行远程连接简单测试

mysql -h192.168.10.134 -P13308 -uroot -p

逻辑库建立

在这里插入图片描述

🥦 2.4 创建SpringBoot程序 - 引入依赖

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>

    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.3.1</version>
    </dependency>

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
        <exclusions>
            <exclusion>
                <groupId>org.junit.vintage</groupId>
                <artifactId>junit-vintage-engine</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
</dependencies>

🥦 2.5 创建SpringBoot程序 - 实体类

编写与读写分离test数据库Products表中对应的实体类

@TableName("products")
@Data
public class Products {

    @TableId(value = "pid",type = IdType.AUTO)
    private Long pid;

    private String pname;

    private Integer price;

    private String flag;

}

🥦 2.6 创建SpringBoot程序 - 数据库Mapper接口 & 主启动类

编写对应的数据库持久层UserMapper接口

@Repository
public interface ProductsMapper extends BaseMapper<Products> {
}

@Repository注解的类需要交给我们的Spring容器进行管理,因此需要我们在主启动类加上扫描接口的注解。

@SpringBootApplication
@MapperScan("com.ljw.mapper")
public class ShardingproxyDemoApplication{

    public static void main(String[] args) {
        SpringApplication.run(ShardingproxyDemoApplication.class, args);
    }
}

🥦 2.7 创建SpringBoot程序 - 配置信息连接代理

# 应用名称
spring.application.name=sharding-proxy-demo

# mysql数据库 ---> 连接的是 proxy
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://192.168.10.134:13308/readwrite_splitting_db?serverTimezone=GMT%2B8&useSSL=false&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=root

# mybatis日志
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

🍀 三.ShardingSphere-Proxy读写分离实战测试

🥦 3.1 编写测试 - 读写分离 - 主库插入

	@Autowired
    private ProductsMapper productsMapper;
    
    @Test
    public void testInsert(){
        Products products = new Products();
        products.setPname("手机");
        products.setPrice(8080);
        products.setFlag("1");
        productsMapper.insert(products);
    }

启动成功!

在这里插入图片描述

数据库中数据插入成功 & 成功同步!

在这里插入图片描述

🥦 3.2 编写测试 - 读写分离 - 从库读取

    @Autowired
    private ProductsMapper productsMapper;
    
    @Test
    public void testSelect(){
        productsMapper.selectList(null).forEach(System.out::println);
    }

执行成功!

在这里插入图片描述

🍀 四.总结

本篇文章主要讲解了ShardingSphere-Proxy读写分离详解与实战,实操过程非常重要,大家一定要动手亲自实践一下,必须掌握。下节预告,ShardingSphere-Proxy垂直分片详解与实战,大家敬请期待呦!!!。

💬 五.共勉

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

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

基于springboot的公交线路查询系统vue

本次开发一套公交线路查询系统有管理员&#xff0c;用户两个角色。管理员功能有个人中心&#xff0c;用户管理&#xff0c;公交线路管理&#xff0c;网站公告管理&#xff0c;友情链接管理&#xff0c;留言管理&#xff0c;系统管理。用户可以注册登录&#xff0c;查看公告线路…

java使用easyexcel读写文件

文章目录 前言一、引入pom二、write1.代码部分2.执行结果 三、read1.代码部分2.运行结果 总结 前言 Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存&#xff0c;poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题…

掌握文件锁:使用flock实现多个进程之间的无缝文件同步

使用flock实现多个进程之间的无缝文件同步&#xff1f; 博主简介一、引言二、文件锁的概述2.1、定义文件锁2.2、文件锁的种类2.3、文件锁的作用 三、使用flock实现文件锁3.1、flock的简介3.2、flock的使用方法3.3、flock文件锁命令3.4、flock对文件同步的帮助 四、实现多个进程…

Sestra 实用教程(二)方程求解器

目 录 一、前言二、超单元分析三、惯性释放四、模态叠加法4.1 Eigenvalue solvers4.2 Static back substitution 五、模态综合法六、Master-Slave七、参考文献 一、前言 SESAM &#xff08;Super Element Structure Analysis Module&#xff09;是由挪威船级社&#xff08;DNV-…

QMediaPlayer播放视频

简介 使用QT的QMediaPlayer类播放MP4格式的视频。 代码示例 头文件 Ui::MainWindow *ui; QMediaPlaylist *playlist; QMediaPlayer *player; QVideoWidget *videoWidget;方式一 应用窗体外播放视频。 .cpp文件 playlist new QMediaPlaylist;playlist->addMedia(QUrl(…

ShardingSphere-Proxy垂直分片详解与实战

&#x1f680; ShardingSphere &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&…

python:图片修改尺寸和裁剪

作者:CSDN @ _养乐多_ 本文记录了使用python语言的PIL库对jpg格式的图像进行修改尺寸,按指定像素间隔裁剪的代码。 文章目录 一、修改图片尺寸二、按照指定像素裁剪图片2.1 将小块保存在本地2.2 将小块以一定间隔生成新的图片原图: 一、修改图片尺寸 修改尺寸后, from PI…

c++学习(布隆过滤器)[23]

布隆 布隆过滤器&#xff08;Bloom Filter&#xff09;是一种概率型数据结构&#xff0c;用于判断一个元素是否可能存在于一个集合中。它使用多个哈希函数和位图来表示集合中的元素。 布隆过滤器的基本原理如下&#xff1a; 初始化&#xff1a;创建一个长度为m的位图&#xf…

ARM 详解

一、ARM 的发展史 ARM 的发展历史可以追溯到 1978 年&#xff0c;当年克里斯库里&#xff08;Chris Currry&#xff09;所任职的公司遭遇财务危机&#xff0c;发展每况愈下&#xff0c;库里在和创始人深入沟通后&#xff0c;决定离职。当时的库里对微型计算机很感兴趣&#xf…

大致了解Redis

为了保证数据的可靠性&#xff0c;Redis 需要在磁盘上读写 AOF 和 RDB&#xff0c;但在高并发场景里&#xff0c;这就会直接带来两个新问题&#xff1a;一个是写 AOF 和RDB 会造成 Redis 性能抖动&#xff0c;另一个是 Redis 集群数据同步和实例恢复时&#xff0c;读 RDB 比较慢…

什么是EPC?

文章目录 一、什么是EPC&#xff1f;二、EPC的优势和特征2.1、EPC的优势2.2、EPC的特征 三、EPC项目管理平台3.1、平台简介3.2、平台优势3.3、平台功能模块 一、什么是EPC&#xff1f; EPC&#xff08;Engineering Procurement Construction&#xff09;是指公司受业主委托&am…

MySQL中锁的简介——表级锁-元数据锁、意向锁

1.元数据锁 查看元数据锁 select object_type,object_scheme,object_name,lock_type,lock_duration from perfomance_scheme.metadata_locks;2.意向锁 线程A开启事务后在执行update更新语句时候&#xff0c;会给数据加上行锁&#xff0c;加上行锁以后&#xff0c;会对整张表加…

JMM是如何保证原子性呢?

3.3.1加锁 锁是一种通用技术&#xff0c;比如Java提供的Synchronized关键字就是锁的一种实现&#xff0c;Synchronized是排他锁/独占锁&#xff0c;就是有你没我的意思&#xff0c;只要其他线程到来访问&#xff0c;发现锁还未释放&#xff0c;就要在外面等待&#xff0c;因为S…

【雕爷学编程】Arduino动手做(175)---机智云ESP8266开发板模块6

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

Docker 入门终极指南[详细]

前言 富 Web 时代&#xff0c;应用变得越来越强大&#xff0c;与此同时也越来越复杂。集群部署、隔离环境、灰度发布以及动态扩容缺一不可&#xff0c;而容器化则成为中间的必要桥梁。 本节我们就来探索一下 Docker 的神秘世界&#xff0c;从零到一掌握 Docker 的基本原理与实…

Nginx配置WebSocket反向代理

1、WebSocket协议 ​ WebSocket协议相比较于HTTP协议成功握手后可以多次进行通讯&#xff0c;直到连接被关闭。但是WebSocket中的握手和HTTP中的握手兼容&#xff0c;它使用HTTP中的Upgrade协议头将连接从HTTP升级到WebSocket。这使得WebSocket程序可以更容易的使用现已存在的…

Java8使用CompletableFuture实现多异步任务同步等待结果

一、应用场景 在实际的开发工作中&#xff0c;我们可能会遇到一些比较复杂且耗时的功能&#xff0c;例如一个业务数据表格的导出&#xff0c;假定业务数据表本身都很大&#xff0c;需要组装的数据又比较多&#xff0c;就会造成整个实现过程很耗时甚至可能出现接口请求超时&…

Android 之 MediaPlayer 播放音频与视频

本节引言&#xff1a; 本节带来的是Android多媒体中的——MediaPlayer&#xff0c;我们可以通过这个API来播放音频和视频 该类是Androd多媒体框架中的一个重要组件&#xff0c;通过该类&#xff0c;我们可以以最小的步骤来获取&#xff0c;解码 和播放音视频。它支持三种不同的…

Carla教程三:参考线平滑理论完全解析(二次规划)

参考线平滑理论 决策规划流程第一步是参考线的生成&#xff0c;然后将障碍物进行投影到以参考线为坐标轴的frenet坐标系。参考线是很关键的一部&#xff0c;解决了导航路径过长&#xff0c;不平滑&#xff0c;不利于坐标转换找匹配点的问题。利用参考线&#xff0c;每一个规划…

LeetCode 2050. Parallel Courses III【记忆化搜索,动态规划,拓扑排序】困难

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…