有一些技术同学可能对于“读写分离”了解不多,认为数据库的负载问题都可以使用“读写分离”来解决。

这其实是一个非常大的误区,我们要用“读写分离”,首先应该明白“读写分离”是用来解决什么样的问题的,而不是仅仅会用这个技术。

什么是读写分离?

其实就是将数据库分为了主从库,一个主库用于写数据,多个从库完成读数据的操作,主从库之间通过某种机制进行数据的同步,是一种常见的数据库架构。

一个主从同步集群,通常被称为是一个“分组”。

数据库分组架构解决什么问题?

大多数互联网业务,往往读多写少,这时候,数据库的读会首先称为数据库的瓶颈。这时,如果我们希望能够线性的提升数据库的读性能,消除读写锁冲突从而提升数据库的写性能,那么就可以使用“分组架构”(读写分离架构)。

用一句话概括,读写分离是用来解决数据库的读性能瓶颈的。

但是,不是任何读性能瓶颈都需要使用读写分离,我们还可以有其他解决方案。

在互联网的应用场景中,常常数据量大、并发量高、高可用要求高、一致性要求高,如果使用“读写分离”,就需要注意这些问题:

  • 数据库连接池要进行区分,哪些是读连接池,哪个是写连接池,研发的难度会增加;
  • 为了保证高可用,读连接池要能够实现故障自动转移;
  • 主从的一致性问题需要考虑。

在这么多的问题需要考虑的情况下,如果我们仅仅是为了解决“数据库读的瓶颈问题”,为什么不选择使用缓存呢?

为什么用缓存?

缓存,也是互联网中常常使用到的一种架构方式,同“读写分离”不同,读写分离是通过多个读库,分摊了数据库读的压力,而存储则是通过缓存的使用,减少了数据库读的压力。他们没有谁替代谁的说法,但是,如果在缓存的读写分离进行二选一时,还是应该首先考虑缓存。

为什么呢?

  • 缓存的使用成本要比从库少非常多;
  • 缓存的开发比较容易,大部分的读操作都可以先去缓存,找不到的再渗透到数据库。

当然,如果我们已经运用了缓存,但是读依旧还是瓶颈时,就可以选择“读写分离”架构了。简单来说,我们可以将读写分离看做是缓存都解决不了时的一种解决方案。

当然,缓存也不是没有缺点的

对于缓存,我们必须要考虑的就是高可用,不然,如果缓存一旦挂了,所有的流量都同时聚集到了数据库上,那么数据库是肯定会挂掉的。

对于常见的数据库瓶颈是什么呢?

其实是数据容量的瓶颈。例如订单表,数据量只增不减,历史数据又必须要留存,非常容易成为性能的瓶颈,而要解决这样的数据库瓶颈问题,“读写分离”和缓存往往都不合适,最适合的是什么呢?

数据库水平切分

什么是数据库水平切分?

数据库水平切分,也是一种常见的数据库架构,是一种通过算法,将数据库进行分割的架构。一个水平切分集群中的每个数据库,通常称为一个“分片”。每一个分片中的数据没有重合,所有分片中的数据并集组成全部数据。

水平切分架构解决什么问题呢?

大部分的互联网业务,数据量都非常大,单库容量最容易成为瓶颈,当单库的容量成为了瓶颈,我们希望提高数据库的写性能,降低单库容量的话,就可以采用水平切分了。

而有少部分程序员,会没有分析数据库的性能瓶颈是什么,就贸贸然的使用“读写分离”,殊不知“水平切分”才是正道。

数据库的“读写分离”相关推荐

  1. 基于 EntityFramework 的数据库主从读写分离架构(1) - 原理概述和基本功能实现...

    回到目录,完整代码请查看(https://github.com/cjw0511/NDF.Infrastructure)中的目录: src\ NDF.Data.EntityFramework\Maste ...

  2. mysql读写分离_Mysql数据库09MySQL读写分离

    Mysql数据库09-MySQL读写分离 一.读写分离应用案例分析 在企业用户中,在大量的数据请求下,单台数据库将无法承担所有读写操作.解决方法:配置多台数据库服务器以实现主从复制+读写分离. 二.读 ...

  3. Django项目配置mysql主从数据库实现读写分离

    1.在配置文件中添加slave数据库的配置 DATABASES = {     'default': {         'ENGINE': 'django.db.backends.mysql',   ...

  4. Mycat - 实现数据库的读写分离与高可用

    前言 开心一刻 上语文课,不小心睡着了,坐在边上的同桌突然叫醒了我,并小声说道:"读课文第三段".我立马起身大声读了起来.正在黑板写字的老师吓了一跳,老师郁闷的看着我,问道:&qu ...

  5. ef mysql 读写分离_基于 EntityFramework 的数据库主从读写分离服务插件

    基于 EntityFramework 的数据库主从读写分离服务插件 1. 版本信息和源码 1.1版本信息 v1.01 beta(2015-04-07),基于 EF 6.1 开发,支持 EF 6.1 之 ...

  6. 17.sql server数据库使用规则、二八原则、数据库查询集群--数据库读写分离多种实现、数据库配置读写分离(by-朝夕)

    Database 课程目标 环境准备: 一.二八原则 二.数据库读写分离 好处: 绝大部分的企业内部应用,可能不需要上图那么庞大的架构,一台主数据库服务器和一台查询服务器通常能满足读写分离的要求.而且 ...

  7. 徐无忌MySQL笔记:案例实战:如何实现MySQL数据库的读写分离?

    徐无忌MySQL笔记:案例实战:如何实现MySQL数据库的读写分离? 完成:第一遍 1.理想的主从架构实现的效果是怎样的? 主库负责所有读写操作,从库只实现对主库备份功能,这样的主从架构性价比是很低的 ...

  8. linux企业实战 --MySQL数据库之读写分离

    文章目录 1. MySQL读写分离 2. MySQL-proxy实现读写分离 1. MySQL读写分离 Mysql的主从复制和Mysql的读写分离两者有着紧密联系. 首先部署主从复制,只有主从复制完了 ...

  9. 基于 EntityFramework 的数据库主从读写分离架构(2)- 改进配置和添加事务支持...

    回到目录,完整代码请查看(https://github.com/cjw0511/NDF.Infrastructure)中的目录: src\ NDF.Data.EntityFramework\Maste ...

  10. thinkphp读写mysql的枷锁_thinkphp5 数据库配置读写分离

    mysql配置主从数据库同步成功后,接下来就要在程序中配置数据库来实现读写分离啦 我们这里用的thinkphp5框架 配置读写分离非常简单 return [ // 数据库类型 'type' => ...

最新文章

  1. 计算机操作培训主持词,魅力女性沙龙会主持词文稿.docx
  2. 服务器系统日志4625,win2008 r2 成千上万的“审核失败”日志 事件ID 4625
  3. DataGrid 或 DataView 中删除项时告知是否删除
  4. 旧金山GDC2008见闻一
  5. ubuntu 12.04 开启root
  6. Android编译笔记之五
  7. 音视频技术开发周刊 | 150
  8. MSSQL-to-MySQL v5.3, 从MSSQL迁移到mySQL的最佳工具
  9. Mysql系列:高可用(HA)-keeplived
  10. 被request.getLocalAddr()苦闷了很久
  11. oracle rac升级补丁及中间的错误提示
  12. verilog实现四位全加器(基于一位全加器)
  13. Vue音乐播放器入门Demo及Vue环境搭建运行
  14. word编辑公式并编号
  15. 影子系统PowerShadow v2.6.0511中文破解版
  16. 原生JS实现中文简繁切换,引入即可整站变繁体
  17. android surface 旋转屏幕,[Android/安卓]屏幕旋转时改变SurfaceView(视频)宽高
  18. PD快充磁吸移动电源方案
  19. 【RMQ】POJ 3264 Balanced Lineup
  20. 快速提升SEO关键词搜索排名的5大伎俩

热门文章

  1. 云米发布上市后首份财报:非GAAP净利3875万 同比增36%
  2. 基于Pytorch源码对SGD、momentum、Nesterov学习
  3. Huhu Command 正式发布!实用命令行存取工具
  4. 机器学习 | 变量选择
  5. Designing an IAM Framework with Oracle Identity and Access Management Suite[文摘]
  6. 我的苹果电脑中毒了?mac也会中病毒?喜闻乐见(附杀毒软件测试)
  7. 计算机组装时各配件的安装顺序,如何组装一台电脑 组装一台电脑配件及步骤【详解】...
  8. Node微服务之Seneca的使用
  9. Android自动播放U盘视频
  10. python爬取淘宝数据魔方_《淘宝数据魔方技术架构解析》阅读笔记