1:为什么数据库要读写分离

在互联网的系统应用是一个  读多写少的应用,比如电商系统中,商品浏览的次数是比下单要多的。数据库承载压力大,主要是由这些读的请求造成的,那么我们是不是可以把读操作和写操作分开,让所有读的请求落到专门负责读的数据库上,所有写的操作落到专门负责写的数据库上,写库的数据同步到读库上,这样保证所有的数据修改都可以在读取时,从读库获得,系统的架构如图所示:

如果系统的读请求比较多的话,读库可以多部署几台,这样读请求就可以均摊到多台读库上,降低每一个读库上的压力。但是在写数据的时候,数据要落在一个确定,且唯一的写库中。上图中,咱们的写库只有一个,你当然可以部署多个写库,但是数据怎么分片是一个十分重要的问题,目前仅以一个写库为例,比如:商户发布商品时,将这个商品的数据落在了写库上,同时,写库将这条数据同步给两个读库,买家在网站浏览商品时,会从读库将这个商品数据读取,至于从哪个读库取出数据,那就要看这个请求在当前的路由情况了。

2:读写分离的优缺点

优点:

  • 将大量的读操作从数据库中剥离,让读操作从专用的读数据库中读取数据,大大缓解了数据库的访问压力,也使得数据的响应速度得到了大大的提升。

缺点:

  • 数据从写入到数据库,到从数据库取出,读写分离的架构多了一个同步的操作,同步的操作时间是多少,延迟如果太大对系统有没有影响,如果同步挂了怎么办?例如:电商个人中心的订单列表页,功能挺简单的,只需要将订单数据取出来,在页面上展示就可以了,但是在做的时候,订单以及订单相关的数据都是从读库取出的,其中就包括支付状态,这个用户非常敏感的字段。就在某一天的某一时段,突然接到了用户大量的投诉,说用户已经付了钱了,但是订单的状态还是未支付,去数据库里查询,发现订单状态就是未支付,没有问题。为了保险起见,去写库再查一下这个订单吧,发现写库的订单状态确实是已支付,这下完了,写库和读库取出来的数据不一致,问题根源就是    同步挂掉了
  • 当同步挂掉,或者同步延迟比较大时,写库和读库的数据不一致,这个数据的不一致,用户能不能接受,订单支付状态这个不一致当然是不能接受的了,其他的业务场景能不能接受呢?这个要对不同的业务场景做具体的分析了

3:读写分离的适用场景

一些对数据实时性要求不高的业务场景,可以考虑使用读写分离。但是对数据实时性要求比较高的场景,比如订单支付状态,还是不建议采用读写分离的,或者你在写程序时,老老实实的从写库去读取数据,如果你做数据的同步,你的网络延迟应该在5ms以内,这个对网络环境要求是非常高的,大家可以ping 一下你网络中的其他机器,看看能不能达到这个标准,如果你的网络环境很好,达到了要求,那么使用读写分离是没有问题的,数据几乎是实时同步到读库,根本感觉不到延迟。

读写分离呢,大家在使用的时候,还是要从业务出发,看看你的业务是否适合使用读写分离,每种技术架构都有自己的优缺点,没有好不好,只有适不适合,只有适合业务的架构才是好的架构

2:为什么要读写分离相关推荐

  1. thinkphp mysql 密码加密_thinkphp框架实现mysql读写分离

    基于thinkphp3.2.3,官方手册:http://www.kancloud.cn/manual/thinkphp/1733 注意事项: 1.首先得配置好mysql主从,可以多主多从 2.在读写分 ...

  2. 缓存成神路:Redis读写分离难以理解?一文解析Redis读写分离技术

    背景 云数据库Redis版不管主从版还是集群规格,replica作为备库不对外提供服务,只有在发生HA的时候,replica提升为master后才承担读写流量.这种架构读写请求都在master上完成, ...

  3. mysql读写分离(MySQL Proxy 安装和使用)

    一.必备软件: 1.LUA    可以去LUA的官方下载:www.lua.org 2.MySQL Proxy    这里有好多二进制版本.     http://mysql.cdpa.nsysu.ed ...

  4. mysql查询并设置高亮_Thinkphp3.2.3设置MySql主从读写分离后,简单调用主数据库查询

    图/文:迷神 Thinkphp是一款不错的国产框架,使用范围广,应用也比较多.随着网站访问增大往往需要使用mysql主从同步功能,本身Thinkphp自带了主从读写分离的功能了. 但是我们经常有一个场 ...

  5. 使用Mycat构建MySQL读写分离、主从复制、主从高可用

    数据库读写分离对于大型系统或者访问量很高的互联网应用来说,是必不可少的一个重要功能. 从数据库的角度来说,对于大多数应用来说,从集中到分布,最基本的一个需求不是数据存储的瓶颈,而是在于计算的瓶颈,即S ...

  6. mysql主从配置读写分离笔记

    第二次回头看了,第一次学完后感觉都会了,回头再看才发现什么都想不起来了.还得查资料再学习,虽然很简单.还是做个笔记吧!笔记有点糙 就是自己看的 因为主要是测试主从和读写分离 所以直接 yum inst ...

  7. mysql+mycat搭建稳定高可用集群,负载均衡,主备复制,读写分离

    数据库性能优化普遍采用集群方式,oracle集群软硬件投入昂贵,今天花了一天时间搭建基于mysql的集群环境. 主要思路 简单说,实现mysql主备复制-->利用mycat实现负载均衡. 比较了 ...

  8. Mysql实现非程序控制读写分离

    五一假期,有个博友给我发邮件,说我的这篇blog:http://bobwu.blog.51cto.com/2918362/537077 只能通过程序员在程序中实现读写分离,咨询能否实现程序员无察觉的读 ...

  9. Mysql 基于 Amoeba 的 读写分离(2)

    <?xml version="1.0" encoding="gbk"?> <!DOCTYPE amoeba:configuration SYS ...

  10. proxy实现 mysql 读写分离

    实现 mysql 读写分离 图解: 环境: iptables 和 selinux 关闭 proxy:test2 172.25.1.2 Master: test3 172.25.1.3 Slave:te ...

最新文章

  1. centos下设置node.js开机启动(并且启动自己的项目js)
  2. ios alertview 链接_iOS-MobLink集成流程
  3. bs4爬取的时候有两个标签相同_python爬虫初体验,爬取中国最好大学网大学名次...
  4. 最基本的弹出窗口代码
  5. 即时通讯音视频开发(七):音频基础及编码原理入门
  6. Forbidden Attack:7万台web服务器陷入被攻击的险境 1
  7. leetcode 397 整数替换
  8. 卸载已有的navicat for mysql,安装破解版navicat for mysql
  9. 我的世界服务器显示大字,我的世界上面指令让界面出现字体 | 手游网游页游攻略大全...
  10. python调用报表制作工具_Python如何使用xlwt制作一个表格
  11. 2. 【containerd】 containerd-shim-runc-v1与 containerd-shim-runc-v2 区别
  12. 用最科学的方法展示最形象的图表——前端数据可视化实践
  13. matlab ssd检测,基于SSD神经网络的违章停车车辆实时检测方法与流程
  14. 手游平台开发怎么做?
  15. 【大数据】SQL的作业题(仅适合初学者)
  16. 蚂蚁金服智能推荐引擎解决方案与实践 1
  17. 【读论文】LiDAR数据特征的提取与智能分类研究(一)
  18. 采集练习(九) php 获得手机号归属地
  19. cocos creator 2.43 使用 BMFont文字会变黑块,drawCall飙升
  20. R中install_github中无法安装遇到的问题与解决方法

热门文章

  1. 【北亚数据恢复案例】raid0硬盘故障导致服务器崩溃的数据恢复
  2. [译]Vue官方成员:Vite生态发展的怎么样了
  3. 什么是项目建设方案?与项目建议书的联系与区别?
  4. 如何计算马来西亚的每月PCB所得税
  5. android 苹果日历提醒功能,一日一技 | 在 iOS 和 Android 之间同步日历、联系人和提醒事项...
  6. 乌班图五子棋c语言,毕业设计(论文)-网络五子棋设计与实现.doc
  7. NVIDIA,显卡驱动,CUDA版本之间兼容关系及安装
  8. xp计算机共享上限,Win7/xp系统下共享文件夹最大连接数限制怎么解除
  9. 西门子HMI精致面板画面跳转功能
  10. 概率论与数理统计---随机事件及其概率(一)