当前位置:网站首页>MySQL数据库:读写分离
MySQL数据库:读写分离
2022-06-29 13:05:00 【全栈程序员站长】
一、读写分离的原理:
1、实现原理:
读写分离解决的是,数据库的写操作,影响了查询的效率,适用于读远大于写的场景。读写分离的实现基础是主从复制,主数据库利用主从复制将自身数据的改变同步到从数据库集群中,然后主数据库负责处理写操作(当然也可以执行读操作),从数据库负责处理读操作,不能执行写操作。并可以根据压力情况,部署多个从数据库提高读操作的速度,减少主数据库的压力,提高系统总体的性能。
2、读写分离提高性能的原因:
(1)增加物理服务器,负荷分摊;
假如我们有1主3从,假设现在1分钟内有10条写入,150条读取。那么,1主3从相当于共计40条写入,而读取总数没变,因此平均下来每台服务器承担了10条写入和50条读取(主库不承担读取操作)。因此,虽然写入没变,但是读取大大分摊了,提高了系统性能。另外,当读取被分摊后,又间接提高了写入的性能。所以,总体性能提高了,也就是拿机器和带宽换性能。
(2)主从只负责各自的写和读,极大程度的缓解X锁和S锁争用;
(3)从库可配置MyISAM引擎,提升查询性能以及节约系统开销;
(4)主从复制另外一大功能是增加冗余,提高可用性,当一台数据库服务器宕机后能通过调整另外一台从库来以最快的速度恢复服务。
3、Mysql读写分写的实现方式:
(1)基于程序代码内部实现:
在代码中根据select 、insert进行路由分类,这类方法也是目前生产环境下应用最广泛的。优点是性能较好,因为程序在代码中实现,不需要增加额外的硬件开支,缺点是需要开发人员来实现,运维人员无从下手。
(2)基于中间代理层实现:
代理一般介于应用服务器和数据库服务器之间,代理数据库服务器接收到应用服务器的请求后根据判断后转发到后端数据库,有以下代表性的代理层。
①mysql_proxy。mysql_proxy是Mysql的一个开源项目,通过其自带的lua脚本进行sql判断。 ②Atlas。是由 奇虎360, Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它是在mysql-proxy 0.8.2版本的基础上,对其进行了优化,增加了一些新的功能特性。360内部使用Atlas运行的mysql业务,每天承载的读写请求数达几十亿条。支持事务以及存储过程。 ③Amoeba。由阿里巴巴集团在职员工陈思儒使用序java语言进行开发,阿里巴巴集团将其用户生产环境下,但是他并不支持事物以及存储过程。
经过上述简单的比较,不是所有的应用都能够在基于程序代码中实现读写分离,像一些大型的java应用,如果在程序代码中实现读写分离对代码的改动就较大,所以,像这种应用一般会考虑使用代理层来实现。
二、读写分离的搭建:
有关读写分离的搭建步骤,可以阅读这两篇博客:
https://blog.csdn.net/starlh35/article/details/78735510
https://blog.csdn.net/justdb/article/details/17331569
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/100074.html原文链接:https://javaforall.cn
边栏推荐
- 测试用例设计方法之等价类划分方法
- 【云驻共创】通过Rust语言计算加速技术突破图片识别性能瓶颈
- Equivalence class partition method for test case design method
- [high concurrency] 28000 words' summary of callable and future interview knowledge points. After reading it, I went directly to ByteDance. Forgive me for being a little drifting (Part 1)
- ##Mondo Rescue制作镜像文件(有利于镜像损坏恢复)
- Appkey when applying for offline packaging of uniapp
- Matlab fmincon precision, fmincon and quadprog error
- 逆向调试入门-PE文件节表与区块03/07
- 嵌入式开发:硬件在环测试
- Windbg常用命令详解
猜你喜欢

What if the excel table exported from the repair record is too large?

微信小程序:全新獨家雲開發微群人脈

微信小程序:全新独家云开发微群人脉

System.currentTimeMillis() 和 System.nanoTime() 哪个更快?大部分人都会答错!

Uncover the secret! Pay attention to those machines under the membership system!

【云驻共创】通过Rust语言计算加速技术突破图片识别性能瓶颈

Wechat applet: repair collection interface version cloud development expression package

Imile uses Zadig's multi cloud environment to deploy thousands of times a week to continuously deliver global business across clouds and regions

硬件开发笔记(八): 硬件开发基本流程,制作一个USB转RS232的模块(七):创建基础DIP元器件(晶振)封装并关联原理图元器件

weserver发布地图服务
随机推荐
喜迎市科协“十大”•致敬科技工作者 | 卢毅:守护电网传输安全的探索者
微信小程序:(更新)云开发微群人脉
System.currentTimeMillis() 和 System.nanoTime() 哪个更快?大部分人都会答错!
WinDbg debugging tool introduction
PG Basics - logical structure management (1)
[document translation] camouflaged object detection
投资人跌下神坛:半年0出手,转行送外卖
Yyds dry inventory solution sword finger offer: find the nearest common ancestor of two nodes in the binary tree
机器学习 Out-of-Fold 折外预测详解 | 使用折外预测 OOF 评估模型的泛化性能和构建集成模型
二叉树习题总结
HTAP X 云原生: TiDB 加速释放数据价值,实现数据敏捷
嵌入式开发:硬件在环测试
微信小程序:图片秒加水印制作生成
Mondo rescue creates an image file (which is conducive to image damage recovery)
Koa2+better-sqlite3 to add, delete, change and query
GBase8s数据库遇到951错误是什么原因?
昨天面试居然聊了半个多小时的异常处理
Open source machine learning platform
Application of ansvc reactive power compensation device in a shopping mall in Hebei
golang7_TCP编程