当前位置:网站首页>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开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦
边栏推荐
猜你喜欢
随机推荐
Chrome浏览器开发新截图工具,安全浏览器截图方法
Jenkins CI平台(二)
广告电商、泰山众筹、链动2+1,这3个模式到底怎么样?
Postgresql 备份大小情况!
SQL代码需要供其他人复用,为什么传统的复制代码不可靠?
【牛客在线OJ】-字符逆序
LyScript 内存交换与差异对比
有人知道flink sql 使用tableEnv.executeSql执行后,怎么获取到任务运行的
typescript学习笔记
5000元价位高性能轻薄本标杆 华硕无双高颜能打
How does MySQL permanently support Chinese input once and for all?
H.265网页播放器EasyPlayer获取视频流正常,但是播放出现黑屏是什么原因?
实时渲染器不止lumion,Chaos Vantage你值得一试
懵逼!阿里一面被虐了,幸获内推华为技术四面,成功拿到offer,年薪40w
剑指Offer 56.数组中数字出现的次数
B628芯片电路图,B628升压IC的PCB布局PCB
Don't look down upon the WebSocket!Long connection, stateful, two-way, full-duplex king is Fried
MySQL如何 drop 大表
CodeTON Round 2 (Div. 1 + Div. 2, Rated, Prizes!) A-E
【汇编语言02】第2章 寄存器——理论知识