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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • IP地址、子网掩码、默认网关和DNS服务器之间的联系与区别

    IP地址、子网掩码、默认网关和DNS服务器之间的联系与区别转自:[https://www.cnblogs.com/JuneWang/p/3917697.html]IP地址,子网掩码、默认网关,DNS服务器是什么意思?(一)问题解析问:IP地址,子网掩码,默认网关,DNS服务器,有什么区别呀?我知道没有IP地址就不能上网,我也知道没设DNS就不能上外网,可它们都有什么功能,有什么区别呢?还有真奇怪,我的计算机没设DNS,竟然能上QQ,却不能…

    2022年4月30日
    78
  • 【转载】关于Hash

    【转载】关于Hash

    2021年11月20日
    50
  • 从零开始学习UCOSII操作系统15–总结篇[通俗易懂]

    从零开始学习UCOSII操作系统15–总结篇[通俗易懂]从零开始学习UCOSII操作系统15–总结篇前言:在大学的时候,我们班级上面都有很多人觉得学习UCOSII(包括UCOSIII)是没什么厉害的,因为很多人都喜欢去学习Linux操作系统,但是,但是,真实的对整个UCOSII操作系统进行学习,我可以保证,如果你是基于源码级别的阅读的话,绝对是不简单的。仅仅是调用几个API的话,是永远用不好UCOSII的操作系统的。还有你真正学通了UCO

    2022年5月4日
    283
  • 2022 CCF中国开源大会会议通知(第四轮)[通俗易懂]

    2022 CCF中国开源大会会议通知(第四轮)[通俗易懂]2022CCF中国开源大会(CCFChinaOSC)拟于2022年8月20日至21日在陕西省西安高新国际会议中心召开。大会由中国计算机学会(CCF)与开放原子开源基金会主办,CCF开源发展委员会、西安电子科技大学承办,西安电子科技大学计算机科学与技术学院(国家示范性软件学院)具体落实,西安市智能软件工程重点实验室负责实施,得到西安高新区管委会的大力支持,西安软件园发展中心具体执行。大会由华为技术有限公司作为白金赞助商,阿里巴巴集团、汇丰科技、东软集团股份有限公司、江苏引跑网络科技有限公司作为赞助商。本届

    2022年9月14日
    3
  • 解读Take-Two新财报:营收、利润增长均不及预期,游戏巨头如何迎来第二春?

    解读Take-Two新财报:营收、利润增长均不及预期,游戏巨头如何迎来第二春?5月14日,美国发行商Take-Two对外发布了2019财年第四季度的新财报。根据财报内容来看,Take-Two在营收、净利润等核心数据上保持了一定同比增速,但均没有超出市场期待。受财报发布后的影响,Take-Two的股价一度下跌超6%。回顾Take-Two前几个季度的财报来看,整体股价表现并不是很稳定,这也说明Take-Two的营收表现并没有让投资者很满意。随着全球游戏市场的竞争加剧,尤其是移…

    2022年6月6日
    58
  • QT3D场景的快速绘制

    QT3D场景的快速绘制    QT3D场景提供了一种快速设置3D场景的一种方式,用户凭借着封装好的实体可以快速的在顶层实体(画布)当中增加各种各样的实体,并且通过3DMax软件构造的OBJ文件与QT3D实现信息交互可以的帮助用户摆脱OpenGL的用代码绘制图形的繁琐。本人在做这方面的工作时也看了很多来自CSDN的文章,但是直接将封装好的3D实体放入画布的例子有点少(是不是大家觉得太简单了?),所以作为一个QT3D建模…

    2022年6月4日
    29

发表回复

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

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