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实现读写分离

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • linux sftp和ftp的区别在哪?

    linux sftp和ftp的区别在哪?sftp和ftp

    2022年10月23日
  • IntelliJ IDEA优秀插件(编程通用)「建议收藏」

    IntelliJ IDEA优秀插件(编程通用)「建议收藏」一、IntelliJIDEA开发最近大部分开发IDE工具都切换到了,所以也花了点心思去找了相关的插件。这里整理的适合各种语言开发的通用插件,也排除掉IntelliJIDEA自带的常用插件了(有些插件在安装IntelliJIDEA的时候可以安装)。二、IDEA插件安装IDEA的插件安装非常简单,对于很多插件来说,只要你知道插件的名字就可以在IDEA里面直接安装。Preferences—>Pl

  • Base64编码与图片互转工具[通俗易懂]

    Base64编码与图片互转工具[通俗易懂]packagecom.willdas.test;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream;importja

  • C语言学生成绩管理系统(设计报告和全部源码)「建议收藏」

    C语言学生成绩管理系统(设计报告和全部源码)「建议收藏」实现如下功能:1)能够实现学生成绩信息的插入、删除和修改;2)能够实现各种查询(分别根据学生学号、姓名、课程名称等);3)能够实现按照考试成绩、总评成绩进行排序;4)能够查询某门课程的最高分、最低分并输出相应学生信息;5)能够查询某门课程的优秀率(90分及以上)、不及格率;学生成绩管理系统设计与实现1)系统功能模块学生成绩管理系统主要功能是。。。。模块结构如“图1-1系统功能结构图”所示。图1-1系统功能结构图我是事先定义了:typedefstructNode{in

  • JMM模型_kmv模型

    JMM模型_kmv模型1.JMM介绍: javamemorymodel,java内存模型2.JMM内存模型的组成:主内存(共享内存):*heap堆:存放所有对象的实例;堆不存放对象引用和基本数据类型,只存放对象实例本身*methodarea方法区(也叫静态区):方法区存放Class类对象以及一些static,final变量;方法区的数据都是唯一的,常量池也在方法区中工作内存(线程私有内存,每个…

  • pycharmlinux安装教程_怎么安装pycharm及环境变量配置

    pycharmlinux安装教程_怎么安装pycharm及环境变量配置1.在官网下载pycharm安装包1.1进入官网:DownloadPyCharm:PythonIDEforProfessionalDevelopersbyJetBrains,选择Professional专业版,直接下载;【自己可以选择pycharm的不同版本】1.2进入跳转页面后,出现提示框,点savefile;1.3下载完成后,打开安装包下载的位置;2.安装pycharm2.1解压文件2.打开终端,进入pych…

发表回复

您的电子邮箱地址不会被公开。

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