一、读写分离的原理:

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

MySQL数据库:读写分离相关推荐

  1. mybatis获取mysql源数据类型_spring集成mybatis实现mysql数据库读写分离

    前言 在网站的用户达到一定规模后,数据库因为负载压力过高而成为网站的瓶颈.幸运的是目前大部分的主流数据库都提供主从热备功能,通过配置两台数据库主从关系,可以将一台数据库的数据更新同步到另一台服务器上. ...

  2. mysql数据库字段变形_详解如何利用amoeba(变形虫)实现mysql数据库读写分离

    摘要:这篇MySQL栏目下的"详解如何利用amoeba(变形虫)实现mysql数据库读写分离",介绍的技术点是"MySQL数据库.数据库读写分离.amoeba.MySQL ...

  3. Python开发之:Django基于Docker实现Mysql数据库读写分离、集群、主从同步详解 | 原力计划...

    作者 | Pythonicc 责编 | 王晓曼 出品 | CSDN博客 简介 1.什么是数据库读写分离 读写分离,基本的原理是让主数据库处理事务性增.改.删操作(INSERT.UPDATE.DELET ...

  4. ceph集群和数据库到底是储存数据_Python开发之:Django基于Docker实现Mysql数据库读写分离、集群、主从同步详解 | 原力计划...

    作者 | Pythonicc责编 | 王晓曼出品 | CSDN博客简介1.什么是数据库读写分离读写分离,基本的原理是让主数据库处理事务性增.改.删操作(INSERT.UPDATE.DELETE),而从 ...

  5. 利用mycat实现mysql数据库读写分离

    1.这里是在mysql主从复制实现的基础上,利用mycat做读写分离,架构图如下: 2.Demo 2.1 在mysql master上创建数据库创建db1 2.2 在数据库db1创建表student ...

  6. mycat定时向mysql存储数据_【实战演练】Linux操作系统20-MyCat实现Mysql数据库读写分离与自动切换...

    #本文欢迎转载,转载请注明出处和作者. 理论部分,详见:繁星亮与鲍包包:[理论研究]业务系统高可用及负载均衡​zhuanlan.zhihu.com 本篇主要实现"8.Mysql读写分离&qu ...

  7. amoeba mysql exists_Amoeba实现MySQL数据库读写分离

    一 环境以及软件版本: 系统:CentOS Linux release 7.2.1511 (Core) MySQL:Server version: 5.6.33 Amoeba:amoeba-mysql ...

  8. Linux安装Mycat1.6.7.6实现Mysql数据库读写分离

    1.Mycat简介 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务.ACID.可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群 一个 ...

  9. 你如何理解mysql的读写分离_面试官:谈谈你对Mysql数据库读写分离的了解,并且有哪些注意事项?...

    这篇文章讲述的不是Mysql具体的如何实现读写分离,而是指什么时候需要上读写分离,及其相关的注意事项. 因为用户的增多,数据的增多,单机的数据库往往支撑不住快速发展的业务,所以数据库集群就产生了!今天 ...

  10. yii2 mysql in_yii2 mysql数据库读写分离配置

    复制和读写分离(Replication and Read-Write Splitting) 许多数据库支持数据库复制来获得更好的数据库可用性, 以及更快的服务器响应时间.通过数据库复制功能, 数据从所 ...

最新文章

  1. 今日头条告今日油条赔 200 万,各大公司表示不服
  2. 最优化课堂笔记03:整数规划
  3. 二分查找递归与非递归的时间比较_我们说一说Python的查找算法!
  4. css html 字竖,CSS实现文字竖排 DIV CSS文字垂直竖列排版显示如何实现?
  5. CodeForces - 233A Perfect Permutation
  6. 计算机组成原理的实验节拍,一种计算机组成原理的实验装置
  7. cannot convert 'this' pointer from 'const class A' to 'class A '
  8. sqoop 中文文档 User guide 三 export
  9. 用vue手脚架生成的项目直接修改时.vue文件后,保存编译就报一大堆的错,这是咋回事呢?
  10. C++最小函数模板demo
  11. 发言倒计时器_单面会议计时器 会议发言倒计时器
  12. 高德地图经纬度比较并返回范围内要求个数可用
  13. 网络安全学习第14篇 - 游戏(仙剑奇侠传95)外挂之修改游戏资源文件(修改人物属性)
  14. MTK LED驱动异常检测步骤
  15. 更改文字颜色为红色HTMl语言,怎样用css将文字改为红色?
  16. 小米手机miui12系统连接数据线usb共享网络方法
  17. m4a怎么转换成mp3
  18. 用python绘制熊猫图案_在matplotlib中绘制熊猫日期
  19. Linux编程基础案例:第4章Shell编程
  20. 图像分类,一文入魂(上)

热门文章

  1. 【大数据教程】MapReduce基本架构、统计文件中每个字符出现的次数,IP去重、计算每个人的最高分,总分
  2. EM算法和GMM(下)
  3. baseline发布!OPPO安全AI挑战赛,人脸识别对抗攻击赛题详解
  4. 利用一个样本估计类别数据分布,9行代码提高少样本学习泛化能力
  5. 机器学习理论《统计学习方法》学习笔记:第十章 隐马尔可夫模型(HMM)
  6. 小程序获取input 的value_[小发现] 现在可以获取任意小程序的小程序码了!
  7. flask与js交互的示例代码_dapr实战(1):dapr locally环境的搭建和部署官方的Hello world示例...
  8. 【JavaScript代码】使用JavaScript实现简单的区块链(签名+工作量证明机制)
  9. Java RMI 多个JVM间相互通信
  10. c语言对称矩阵的压缩存储_【数据结构】对称矩阵及对称矩阵的压缩存储