当前位置:网站首页>MySQL读写分离的三种实现方案
MySQL读写分离的三种实现方案
2022-08-03 18:38:00 【m0_67401660】
MySQL读写分离的三种实现方案
文章目录
一、搭建一个“一主两从”的MySQL集群
先搭建一个mysql集群(一主两从),半同步复制:mysql 半同步复制,三个节点。
二、读写分离实现:方案一
2.1 配置多个数据源
(1)、基于 Spring/Spring Boot,配置多个数据源(例如2个,master 和 slave)
(2)、根据具体的 Service 方法是否会操作数据,注入不同的数据源,1.0版本
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 服务器,对业务系统无侵入
先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦
边栏推荐
猜你喜欢
随机推荐
多肽介导PEG磷脂——靶向功能材料之DSPE-PEG-RGD/TAT/NGR/APRPG
字节跳动三面拿offer:网络+IO+redis+JVM+GC+红黑树+数据结构,助你快速进大厂!!
荧光标记多肽FITC/AMC/FAM/Rhodamine/TAMRA/Cy3/Cy5/Cy7-Peptide
【汇编语言03】第2章 寄存器——实验1:查看CPU和内存,用机器指令和汇编指令编程
When does MySQL use table locks and when to use row locks?You should know this
cocos creater 3.x 插件安装方法
【汇编语言02】第2章 寄存器——理论知识
WEB 渗透之CSRF
Don't look down upon the WebSocket!Long connection, stateful, two-way, full-duplex king is Fried
常见荧光染料修饰多种基团及其激发和 发射波长数据一览数据
多线程和并发编程(四)
Higher mathematics - chapter ten infinite series - constant term series
理想L9旗舰级的安全性有多强?守护一家人安全出行“底线”
U-Net生物医学图像分割讲解(Convolutional Networks for BiomedicalImage Segmentation)
Postgresql 备份大小情况!
vulnhub pyexp: 1
C#爬虫之通过Selenium获取浏览器请求响应结果
机器学习的方法总结
flink-sql 客户端 可以设置并行度 吗?断开算子链
Flask框架——项目可安装化