首页 > 数据库 >什么是数据库读写分离

什么是数据库读写分离

时间:2024-05-24 15:41:52浏览次数:24  
标签:缓存 架构 瓶颈 读写 分离 数据库

有一些技术同学可能对于“读写分离”了解不多,认为数据库的负载问题都可以使用“读写分离”来解决。   这其实是一个非常大的误区,我们要用“读写分离”,首先应该明白“读写分离”是用来解决什么样的问题的,而不是仅仅会用这个技术。 什么是读写分离? 其实就是将数据库分为了主从库,一个主库用于写数据,多个从库完成读数据的操作,主从库之间通过某种机制进行数据的同步,是一种常见的数据库架构。 一个组从同步集群,通常被称为是一个“分组”。   数据库分组架构解决什么问题? 大多数互联网业务,往往读多写少,这时候,数据库的读会首先称为数据库的瓶颈,这时,如果我们希望能够线性的提升数据库的读性能,消除读写锁冲突从而提升数据库的写性能,那么就可以使用“分组架构”(读写分离架构)。 用一句话概括,读写分离是用来解决数据库的读性能瓶颈的。   但是,不是任何读性能瓶颈都需要使用读写分离,我们还可以有其他解决方案。 在互联网的应用场景中,常常数据量大、并发量高、高可用要求高、一致性要求高,如果使用“读写分离”,就需要注意这些问题: 数据库连接池要进行区分,哪些是读连接池,哪个是写连接池,研发的难度会增加;为了保证高可用,读连接池要能够实现故障自动转移;主从的一致性问题需要考虑。在这么多的问题需要考虑的情况下,如果我们仅仅是为了解决“数据库读的瓶颈问题”,为什么不选择使用缓存呢? 为什么用缓存 缓存,也是互联网中常常使用到的一种架构方式,同“读写分离”不同,读写分离是通过多个读库,分摊了数据库读的压力,而存储则是通过缓存的使用,减少了数据库读的压力。他们没有谁替代谁的说法,但是,如果在缓存的读写分离进行二选一时,还是应该首先考虑缓存。   为什么呢? 缓存的使用成本要比从库少非常多;缓存的开发比较容易,大部分的读操作都可以先去缓存,找不到的再渗透到数据库。当然,如果我们已经运用了缓存,但是读依旧还是瓶颈时,就可以选择“读写分离”架构了。简单来说,我们可以将读写分离看做是缓存都解决不了时的一种解决方案。 当然,缓存也不是没有缺点的 对于缓存,我们必须要考虑的就是高可用,不然,如果缓存一旦挂了,所有的流量都同时聚集到了数据库上,那么数据库是肯定会挂掉的。   对于常见的数据库瓶颈是什么呢? 其实是数据容量的瓶颈。例如订单表,数据量只增不减,历史数据又必须要留存,非常容易成为性能的瓶颈,而要解决这样的数据库瓶颈问题,“读写分离”和缓存往往都不合适,最适合的是什么呢?   数据库水平切分 什么是数据库水平切分? 数据库水平切分,也是一种常见的数据库架构,是一种通过算法,将数据库进行分割的架构。一个水平切分集群中的每个数据库,通常称为一个“分片”。每一个分片中的数据没有重合,所有分片中的数据并集组成全部数据。   水平切分架构解决什么问题呢? 大部分的互联网业务,数据量都非常大,单库容量最容易成为瓶颈,当单库的容量成为了瓶颈,我们希望提高数据库的写性能,降低单库容量的话,就可以采用水平切分了。 而有少部分程序员,会没有分析数据库的性能瓶颈是什么,就贸贸然的使用“读写分离”,殊不知“水平切分”才是正道。   原文地址:想用数据库“读写分离” 请先明白“读写分离”解决什么问题 (baidu.com)

标签:缓存,架构,瓶颈,读写,分离,数据库
From: https://www.cnblogs.com/zhang2000/p/18211083

相关文章

  • Django数据库查询
    一、DjangoORM(对象关系映射)进行数据库查询操作    示例模型:fromdjango.dbimportmodelsfromdatetimeimportdatetime,timedeltaclassFruitModel(models.Model):create_time=models.DateTimeField(auto_now_add=datetime.now())update_time=......
  • 数据库SQL语言基础编程
    目录一、简单查询查询员工表与部门表的笛卡尔积在上述操作的基础上完成连接的选择操作和投影操作对查询数据进行排序操作查询工资超过2500的员工基本信息查询月总收入超过2500的员工基本信息查询工资超过2500的员工的姓名及其所在部门名称查询所有员工的工资、奖金、总......
  • SQL数据库必会的9个基础语句
    数据库代码通常指的是用于创建、查询、更新和删除数据库及其数据的SQL(结构化查询语言)语句。但是,由于数据库的复杂性和多样性,下面我将给出一些基本的SQL代码示例,这些示例可以在关系型数据库管理系统(如MySQL,PostgreSQL,SQLite,Oracle,SQLServer等)中使用。创建数据库:CR......
  • mysql 中索引类型有哪些,以及对数据库的性能的影响?
    索引类型普通索引:允许被索引的数据列包含重复的值唯一索引:可以保证数据记录的唯一性主键索引:是一种特殊的唯一素引,在一张表中只能定义一个主键索引,主键用于唯一标识一条记录,使用关键字primarykey来创建联合索引:索引可以覆盖多个数据列全文索引:通过建立倒排索引,可以极大......
  • Django+Vue前后端分离的原理
    Django+Vue创建项目并实现前后端分离的原理,主要涉及两个主要部分:Django作为后端框架,负责处理业务逻辑和数据;Vue作为前端框架,负责构建用户界面和与后端进行通信。以下是对这一原理的详细讲解:前后端分离的概念:前后端分离是一种软件架构模式,它将应用程序的前端(用户界面)和后端(数......
  • MySQL大师课:36秘技解锁数据库性能与管理新高度?
     ......
  • 社区医院|基于SprinBoot+vue的社区医院管理服务系统(源码+数据库+文档)
    社区医院管理服务系统目录基于SprinBoot+vue的社区医院管理服务系统一、前言二、系统设计三、系统功能设计 1系统功能模块2管理员功能模块3用户功能模块4医生功能模块四、数据库设计 五、核心代码 六、论文参考七、最新计算机毕设选题推荐八、源码获取:博......
  • 家政服务|基于SprinBoot+vue的家政服务管理平台(源码+数据库+文档)
    家政服务管理平台目录基于SprinBoot+vue的家政服务管理平台一、前言二、系统设计三、系统功能设计 1前台模块设计2后台功能模块5.2.1管理员功能模块5.2.2用户功能模块5.2.3服务人员功能模块四、数据库设计 五、核心代码 六、论文参考七、最新计算机毕设选题推......
  • 家乡特色|基于SprinBoot+vue的家乡特色推荐系统(源码+数据库+文档)
    家乡特色推荐系统目录基于SprinBoot+vue的家乡特色推荐系统一、前言二、系统设计三、系统功能设计 1系统功能模块2管理员功能模块3用户功能模块四、数据库设计 五、核心代码 六、论文参考七、最新计算机毕设选题推荐八、源码获取:博主介绍:✌️大厂码农|毕设......
  • 家政服务|基于SprinBoot+vue的家政服务管理平台(源码+数据库+文档)
    家政服务管理平台目录基于SprinBoot+vue的家政服务管理平台一、前言二、系统设计三、系统功能设计 1前台模块设计2后台功能模块5.2.1管理员功能模块5.2.2用户功能模块5.2.3服务人员功能模块四、数据库设计 五、核心代码 六、论文参考七、最新计算机毕设选题推......