MySQL读写分离的三种实现方案

MySQL读写分离的三种实现方案文章目录MySQL读写分离的三种实现方案一、搭建一个“一主两从”的MySQL集群二、读写分离实现:方案一2.1配置多个数据源2.2使用AbstractRoutingDataSource2.3这个版本的缺点:三、读写分离实现:方案二3.1通过ShardingSphere-jdbc实现读写分离3.2这个版本的缺点:四、读写分离实现:方案三4.1通过ShardingSphere-Proxy实现读写分离一、搭建一个“一主两从”的MySQL集群先搭建一个mysql

大家好,又见面了,我是你们的朋友全栈君。

MySQL读写分离的三种实现方案

一、搭建一个“一主两从”的MySQL集群

先搭建一个mysql集群(一主两从),半同步复制:mysql 半同步复制,三个节点

二、读写分离实现:方案一

2.1 配置多个数据源

(1)、基于 Spring/Spring Boot,配置多个数据源(例如2个,master 和 slave)

(2)、根据具体的 Service 方法是否会操作数据,注入不同的数据源,1.0版本

通过配置多个数据源,在service层实现读写分离

2.2 使用AbstractRoutingDataSource

(3)、改进一下1.1:基于操作 AbstractRoutingDataSource 和自定义注解 readOnly 之 类的,简化自动切换数据源

(4)、改进二下1.2:支持配置多个从库;

使用AbstractRoutingDataSource和自定义注解

(5)、改进三下1.3:支持多个从库的负载均衡

思路:在myreadwritesep-abstract-rounting-v1基础之上,多一个read类型的数据源,然后判断注解的name为read时候,在read01和read02 中随机选择。

-- 创建用户, 在主节点上执行
create schema performance;
CREATE USER 'performance'@'%' IDENTIFIED BY 'performance^pw';
GRANT ALL ON performance.* TO 'performance'@'%';
flush privileges;

-- 在主节点上执行
create table performance.t_model_info(
  m_id    int(11)  not null primary key auto_increment comment '主键,自增',
  model_type varchar(128) not null unique comment '模块类型',
  model_name varchar(128) not null unique comment '模块名称',
  model_status tinyint(1)  not null default 0 comment '0 启用, 1 不启用'
)Engine=InnoDB AUTO_INCREMENT=1 default CHARSET=utf8mb4;

2.3 这个版本的缺点:

  • 侵入性强;
  • “写完读”不一致问题,server方法,先向主库insert语句,然后立刻select,却查不出数据;

三、读写分离实现:方案二

3.1 通过ShardingSphere-jdbc 实现读写分离

改进v1.0,ShardingSphere-jdbc 的 Master-Slave 功能

1)SQL 解析和事务管理,自动实现读写分离

  • 第一,将事务都管理起来;
  • 第二,做SQL解析,自动实现读写分离;

2)解决”写完读”不一致的问题

  • 如果在一个事务中,先写后读,该框架有个优化;在一个事务里,前几个都是毒,正常读就行,只要碰到一个写,后面不管有多少条读,都走主库。这样就完美解决了“写完读”不一致的问题。

通过Shardingsphere-jdbc框架实现读写分离

3.2 这个版本的缺点:

  • 对业务还是有侵入性(这一套东西,需要配置到业务代码中);
  • 对已存在的旧系统改造不友好;

四、读写分离实现:方案三

4.1 通过ShardingSphere-Proxy 实现读写分离

改进v2.0, MyCat/ShardingSphere-Proxy 的 Master-Slave 功能

1)需要部署一个中间件,规则配置在中间件

2)模拟一个 MySQL 服务器,对业务系统无侵入

shardingsphere-proxy实现读写分离

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/126809.html原文链接:https://javaforall.net

(0)
上一篇 2022年4月8日 下午7:00
下一篇 2022年4月8日 下午7:00


相关推荐

  • matlab如何生成两个随机矩阵,matlab怎么生成随机矩阵

    matlab如何生成两个随机矩阵,matlab怎么生成随机矩阵1 rand 产生均值为 0 5 幅度在 0 1 之间的伪随机数 2 randn 产生均值为 0 方差为 1 的高斯白噪声 3 randperm n 产生 1 到 n 的均匀分布随机序列 4 normrnd a b c d 产生均值为 a 方差为 b 大小为 cXd 的随机矩阵在 MATLAB 中 我们常常会用到一些随机数据 那么这些数据是怎么生成的呢 下面一起来看一看方法 unifrnd a b 产生一个

    2026年3月19日
    2
  • 激活成功教程网络尖兵

    激活成功教程网络尖兵ADSL 给大家上网带来的极大地方便 许多家庭都有好几台计算机 通过 ADSL 共享上网的方式可以各自上网 互不干扰 可最近很多朋友告诉我 如果只有一台机子访问互联网 一切正常 若两台机子都要访问互联网 则都打不开网页 打听来的消息说 电信新装网络硬件 网络尖兵 上网查了一下关于网络尖兵的资料 只提到了实现的功能 没有提到实现原理 要想解决不能共享上网必须摸清它的工作原理 ADSL 共享上网有两种方式

    2026年3月26日
    2
  • Coordinator Layout使用

    Coordinator Layout使用

    2021年6月17日
    119
  • linux日志管理命令_shell查看日志命令

    linux日志管理命令_shell查看日志命令文章目录一.企业中:软件包管理二.任务计划1.一次性调度执行——at2.循环调度执行——cron三.日志管理rsyslogd配置文件rules规则四.日志轮转logrotateLinux11任务计划,日志管理一.企业中:软件包管理1.清理原有的YUM配置——国外下载源,速度慢把原来/etc/yum.repos.d/的内容都丢到/tmp(mv移动)这里可能有一个小问题,需要先检测一下有没有wget 命令,没有的话要用原有的yum配置先下载wget:#yum -y install wget,因为后面

    2022年8月9日
    6
  • 深度相机:结构光、TOF、双目相机

    深度相机:结构光、TOF、双目相机随着人工智能与机器人 无人驾驶的火热 深度相机的技术和应用也受到关注 何谓深度相机 顾名思义 就是可以测量物体到相机的距离 深度 传统的 RGB 彩色普通相机称为 2D 相机 只能拍摄相机视角内的物体 没有物体到相机的距离信息 只能凭感觉感知物体的远近 没有明确的数据 RGB D 深度相机 又称 3D 相机 其中 D 代表 Depth 为深度信息 可获取物体到相机的距离信息 加之 2D 平面的 X Y 坐标 可计算出每个点的三维坐标 以此我们可推断深度相机的应用 如三维重建 目标定位 识别深度相机分类目前主流的深度相机有结

    2026年3月19日
    2
  • 数据库怎么创建学生表_设计数据库,创建数据库和数据表

    数据库怎么创建学生表_设计数据库,创建数据库和数据表知识点:数据库表的相关概念、创建数据库表的方法、设计数据库表、向数据库表中插入数据、建立不同数据库表之间的关系、删除数据库表。1、数据表相关的一些概念1.1数据库里的数据是如何保存的?数据库到底是怎么存储数据的?比如要把学生信息存储到数据库里,能把学生塞进数据库吗?肯定是把学生的数据信息抽象出来,把一些重要信息以文字或数字的形式保存到数据库中去。…

    2026年3月8日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号