当前位置:网站首页>MySQL读写分离的三种实现方案
MySQL读写分离的三种实现方案
2022-07-23 17:57:00 【全栈程序员站长】
大家好,又见面了,我是你们的朋友全栈君。
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 服务器,对业务系统无侵入
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/126809.html原文链接:https://javaforall.cn
边栏推荐
- How can zero foundation self-study software testing? Ten year test Laoniao's strongest software test learning Roadmap
- LeetCode每日一题(1514. Path with Maximum Probability)
- 三维点云课程(六)——三维目标检测
- Sui of the public chain (New Public chain project established by former Facebook /meta employees)
- Notes of benthos
- .net core implements background tasks (scheduled tasks) longbow Tasks component (III)
- GPS北斗时钟服务器(NTP网络时钟系统)施工部署方案
- MySQL 啥时候用表锁,啥时候用行锁?
- 二叉树高度 [log2n]+1与log2(n+1)是否相等
- not all arguments converted during string formatting
猜你喜欢

进程调度的基本过程

AtCoder Regular Contest 144【VP记录】

lendingclub贷款状态loan status业务详解-current,charge off,issued,Fully Paid,grace period

USB3.0: layout guide for vl817q7-c0

Educational Codeforces Round 132 (Rated for Div. 2)【比赛记录】

LeetCode每日一题(1514. Path with Maximum Probability)

【leetcode天梯】链表 · 203 移除链表元素

Technical scheme of face recognition system

Using FRP to achieve intranet penetration

基于自学习的机器人决策系统(达闼科技赵开勇)
随机推荐
二、MFC窗口和消息
mBio | 海洋所孙超岷组在深海原位验证了微生物介导的单质硫形成新通路
ACM MM 2022 Oral | DIG: 自监督文字识别的新框架,刷新11个公开场景文字数据集的识别性能,平均提升5%...
LeetCode刷题:回文数
Basic process of process scheduling
基于自学习的机器人决策系统(达闼科技赵开勇)
【leetcode天梯】链表 · 203 移除链表元素
H7-TOOL的CANFD/CAN接口脱机烧写操作说明, 已经更新(2022-07-12)
PHP file lock lottery to prevent concurrency
R语言使用ggpubr包的ggarrange函数将多幅图像组合起来、使用ggexport函数将可视化图像保存为bmp格式(width参数指定宽度、height参数指定高度、res参数指定分辨率)
Figure learning summary
paddle实现,多维时序数据增强 ,mixup(利用beta分布制作连续随机数)
R语言使用tidyr包的gather函数将从宽表转化为长表(宽表转化为长表)、第一个参数指定原多个数据列名称生成的新数据列名称、第二个参数指定原表内容值、第三个和第四个参数指定不变的列名称列表
C language small project - address book (static version + dynamic version + file version)
.Net CLR R2R编译的原理简析
Tuple error caused by different regularization
使用 frp 实现内网穿透
单调队列优化DP
C语言小项目 -- 通讯录(静态版+动态版+文件版)
小鱼送激光雷达啦 | 恰饭即抽奖第一期