Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >想用数据库“读写分离” 请先明白“读写分离”解决什么问题

想用数据库“读写分离” 请先明白“读写分离”解决什么问题

作者头像
架构师修行之路
发布于 2019-07-23 08:15:01
发布于 2019-07-23 08:15:01
2.6K0
举报
文章被收录于专栏:架构师架构师

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

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

什么是读写分离?

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

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

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

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

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

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

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

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

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

为什么用缓存

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

为什么呢?

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

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

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

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

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

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

数据库水平切分

什么是数据库水平切分?

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

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

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-10-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 架构师修行之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
数据库读写分离架构,为什么我不喜欢
RD:单库数据量太大,数据库扛不住了,我要申请一个数据库从库,读写分离。 DBA:数据量多少? RD:5000w左右。 DBA:读写吞吐量呢? RD:读QPS约200,写QPS约30左右。 上周在公司
架构师之路
2018/02/28
1.9K0
数据库读写分离架构,为什么我不喜欢
1分钟,啥是数据库读写分离架构?
额,数据库读写分离虽然不难,但并不是所有的“数据库扛不住”的场景,都应该用读写分离。今天花1分钟简单介绍下这个场景。
架构师之路
2020/05/28
6890
典型数据库架构设计与实践 | 架构师之路
本文,将介绍数据库架构设计中的一些基本概念,常见问题以及对应解决方案,为了便于读者理解,将以“用户中心”数据库为例,讲解数据库架构设计的常见玩法。 一、用户中心 用户中心是一个常见业务,主要提供用户注册、登录、信息查询与修改的服务,其核心元数据为: User(uid, uname, passwd, sex, age,nickname, …) 其中: uid为用户ID,主键 uname, passwd, sex, age, nickname, …等为用户的属性 数据库设计上,一般来说在业务初期,单库单表就能够
架构师之路
2018/03/02
1.7K0
典型数据库架构设计与实践 | 架构师之路
数据库读写分离这个坑,你应该踩过吧?
每个支付通道支付失败的时候都会返回特定的错误码,业务内部需要将通道特定的错误码转义成内部的错误码,这样对外就可以统一返回我们自己的错误码。
andyxh
2020/12/10
3960
数据库读写分离这个坑,你应该踩过吧?
数据库分库分表解决方案汇总
关系型数据库本身比较容易成为系统瓶颈,单机存储容量、连接数、处理能力都有限。当单表的数据量达到1000W或100G以后,由于查询维度较多,即使添加从库、优化索引,做很多操作时性能仍下降严重。此时就要考虑对其进行切分了,切分的目的就在于减少数据库的负担,缩短查询时间。
用户4283147
2022/10/27
2.3K0
数据库分库分表解决方案汇总
一文浅谈“读写分离”技术
读写分离,作为一种常用的数据库访问优化手段,得到广泛的应用。本文尝试从读写分离的技术实现、适用场景及典型产品等角度,阐述这一技术的整体现状。
用户5548425
2023/02/16
3.9K0
一文浅谈“读写分离”技术
程序员修神之路--略懂数据库集群读写分离而已
一个可以抵抗高并发流量系统的背后必定有一个高性能的数据库集群,就像每一个成功的男人背后总有一个强势的女人一样。数据库集群在部署模式上属于分布式,但是CAP原则却不适用于分布式数据库,具体原因可见之前文章:、
架构师修行之路
2020/09/14
4180
程序员修神之路--略懂数据库集群读写分离而已
如何搞定数据库水平切分?
本文将介绍数据库架构设计中的一些基本概念,常见问题以及对应解决方案,为了便于读者理解,将以“用户中心”为例,讲解数据库架构设计的常见玩法。
用户1737318
2019/08/29
5980
如何搞定数据库水平切分?
IM开发基础知识补课(三):快速理解服务端数据库读写分离原理及实践建议
IM应用从服务端数据的角度来看,它是一种很特殊的应用场景,抛开基础数据、增值业务和附属功能不谈,单从IM聊天工具的立身之本——聊天数据来说,理论上是不需要在服务端存储的(或者说只需要短暂存储——比如离线消息,上线即拉走),这也是为什么微信在前段时间号称绝不存储用户聊天数据的原因(从技术上说这不是没有道理的,但到底有没有存储,这已经超越技术范畴了,不在此文讨论之列 ^_^)。
JackJiang
2018/08/29
1.1K0
为什么我的系统慢?“三大分离”架构上了吗?(5000字长文,收藏)
创业型公司早期讲究快速迭代,随着业务发展,用户量越来越多,系统会开始遇到一些性能瓶颈。“三大分离”架构设计准则,可以在对原有系统改造尽可能小的情况下,快速提升系统性能,是架构师在接手一个“创业型系统”时,最喜欢用的三板斧。
架构师之路
2024/12/24
1420
为什么我的系统慢?“三大分离”架构上了吗?(5000字长文,收藏)
别扯什么CQRS,服务做什么读写分离,就离谱!
1. 一般来说,垂直拆分,是按照“子业务”维度进行拆分,而不是按照“读写”维度进行拆分,这是模块化设计的基本准则;
架构师之路
2025/04/27
3070
别扯什么CQRS,服务做什么读写分离,就离谱!
数据库架构:主备+分库?主从+读写分离?
1、高可用分析:高可用,主库挂了,keepalive(只是一种工具)会自动切换到备库。这个过程对业务层是透明的,无需修改代码或配置。 2、高性能分析:读写都操作主库,很容易产生瓶颈。大部分互联网应用读多写少,读会先成为瓶颈,进而影响写性能。另外,备库只是单纯的备份,资源利用率50%,这点方案二可解决。 3、一致性分析:读写都操作主库,不存在数据一致性问题。 4、扩展性分析:无法通过加从库来扩展读性能,进而提高整体性能。 5、可落地分析:两点影响落地使用。第一,性能一般,这点可以通过建立高效的索引和引入缓存来增加读性能,进而提高性能。这也是通用的方案。第二,扩展性差,这点可以通过分库分表来扩展。
搜云库技术团队
2019/10/17
1.3K0
典型数据库架构设计与实践 | 架构师之路
本文,将介绍数据库架构设计中的一些基本概念,常见问题以及对应解决方案,为了便于读者理解,将以“用户中心”数据库为例,讲解数据库架构设计的常见玩法。
Javen
2018/08/21
6430
典型数据库架构设计与实践 | 架构师之路
数据库典型架构实践
本文将介绍数据库架构设计中的一些基本概念,常见问题以及对应解决方案,为了便于读者理解,将以“用户中心”为例,讲解数据库架构设计的常见玩法。
CSDN技术头条
2019/08/23
5930
关系型数据库的架构演变
在系统初期,整体的并发了相对较小,因此一般都是将所有的数据信息存储在单库中进行读/写操作。但是随着用户规模不断提升,单库逐渐力不从心,TPS/QPS越来越低。因此到了这个时候,dba会将数据库设置为读写分离状态(生产环境一般会采用一主一从或者一主多从),Master负责写操作,Slave作为备库,不开放写操作,但是允许读操作,主从之间保持数据同步即可。 读写分离之后,可以大大提升单库无法支撑的负载压力 需要注意的是:如果Master存在TPS存在较高的情况,Master之前最好将同一份数据落到缓存中,以避免高并发情况下,从Slave中获取不到指定数据的情况发生 [MySQL 主从同步延迟的原因及解决办法(https://blog.csdn.net/soar_away/article/details/72615012)
石臻臻的杂货铺[同名公众号]
2021/07/14
6390
mysql读写分离延迟问题_MySQL读写分离后的延迟解决方案
根据上图可以看到QPS:10.73k,实际上真实的并发大量数据到达的时候,我这里最高的QPS是将近15k.而目前单个数据库分片(实例)4CPU8G内存的配置下,最高的性能是7k的QPS。
全栈程序员站长
2022/09/02
1.4K0
数据库MySQL-读写分离
数据库读写分离对于大型系统或者访问量很高的互联网应用来说,是必不可少的一个重要功能。
cwl_java
2021/08/30
1.4K0
数据库MySQL-读写分离
服务读写分离架构,绝不推荐
缘起 在《服务读写分离(读服务,写服务),是否可行?》中,对背景做了交代,互联网架构设计上,数据库可以读写分离,服务能否读写分离呢? 下面是两种常见的“服务读写分离”架构: 一、单纯服务读写分离 如上
架构师之路
2018/03/02
2.6K0
服务读写分离架构,绝不推荐
当数据库扼住系统性能咽喉,直接分库分表能解决吗?
众所周知,数据库很容易成为应用系统的瓶颈。单机数据库的资源和处理能力有限,在高并发的分布式系统中,可采用分库分表突破单机局限。
lyb-geek
2022/03/10
6840
当数据库扼住系统性能咽喉,直接分库分表能解决吗?
数据库读写分离这个坑,你应该踩过吧?
每个支付通道支付失败的时候都会返回特定的错误码,业务内部需要将通道特定的错误码转义成内部的错误码,这样对外就可以统一返回我们自己的错误码。
huofo
2022/03/18
2120
数据库读写分离这个坑,你应该踩过吧?
推荐阅读
相关推荐
数据库读写分离架构,为什么我不喜欢
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档