当前位置:首页 > 网络黑客 > 正文内容

mysql读写分离常见方式(数据库读写分离的原理)

访客3年前 (2021-12-30)网络黑客1078

1. 前言

相信你经常被 读写分离、垂直拆分、水平拆分、分库分表 这几个名词搞得很懵逼。我有时候也很懵逼,那么今天就来把这几个数据库常用术语搞清楚,同时也记录一下。

2. 读写分离

这个相对比较好理解一些,就是将数据库分为主从库,一个主库(Master)用于写数据,多个从库(Slaver)进行轮询读取数据的过程,主从库之间通过某种通讯机制进行数据的同步,是一种常见的数据库架构。下面这张图就展示了 “一主二从” 的结构:

2.1 为什么要读写分离

大多数互联网数据操作往往都是读多写少,随着数据的增长,数据库的“读”会首先成为瓶颈。如果我们希望能线性地提升数据库的读性能和写性能,就需要让读写尽可能的不相互影响,各自为政。在使用读写分离之前我们应该考虑使用缓存能不能解决问题。然后再考虑对数据库按照 “读” 和 “写” 进行分组。读写分离意味着将一体的结构的进行分散,在数据量大、高并发的情景中要考虑以下这些问题

  • 如何保证 Master 的高可用,故障转移,熔断限流等。
  • 读写操作的区分规则,代码层面如何处理好读命令和写命令,尽量无感知无业务入侵。
  • 数据一致性的容忍度。虽然是数据同步,但是由于网络的不确定性这仍然是一个不可忽视的问题。
  • 3. 分库

    数据库垂直拆分、数据库水平拆分 统称 分库。是指按照特定的条条件和维度,将同一个数据库中的数据拆分到多个数据库(主机)上面以达到分散单库(主机)负载的效果。这样我们变相地降低了数据集的大小,以空间换时间来提升性能。

    3.1 数据库垂直拆分

    数据库垂直拆分 指的是按照业务对数据库中的表进行分组,同组的放到一个新的数据库(逻辑上,并非实例)中。需要从实际业务出发将大业务分割成小业务。比如商城的整个业务中的 用户相关表,订单相关表,物流相关表 各自独立分类形成 用户系统数据库,订单系统数据库,物流系统数据库 如下图:

    这样带来了一些好处:(a)业务清晰,职责单一 (b)易维护,易扩展 (c)数据服务化 。

    同时也有一些负面的作用:(a)提高了整个应用的复杂度,而且会形成跨库事务 (b)引发 “木桶效应”,任何一个短板有可能影响整个系统 (c)部分表关系不能 join 只能通过服务相互调用来维系。甚至由于网络问题引发数据不一致。

    在需要进行分库的情况下,通常可优先考虑垂直拆分。

    3.2 数据库水平拆分

    在数据库垂直拆分后遇到单机数据库性能瓶颈之后,就可以考虑数据库水平拆分了。之所以先垂直拆分才水平拆分,是因为垂直拆分后数据业务清晰而且单一,更加方便指定水平的标准。比如我们对商城业务垂直拆分后的 用户系统 进行水平拆分就比对整个商城业务进行水平拆分好找维度,我们可以根据用户注册时间的区间、用户的区域或者用户 ID 的范围、 hash 等条件,然后关联相关表的记录将数据进行拆分,如果放在整个商城业务上你是以用户为准还是以订单为准都不太好考虑。

    我们按照每 100 万为区间对用户系统水平拆分如下:

    这种拆分的好处在于:(a)单个库的容量可控。 (b)单挑记录保证了数据完整性。 (c)数据关系可以通过 join 维持。 (d) 避免了跨库事务 。

    缺点同样存在:(a)拆分规则对编码有一定的影响。 (b)不同业务的分区交互需要统筹设计。

    4. 分表

    分表也分为 数据表垂直拆分数据表水平拆分

    4.1 数据表垂直拆分

    数据表垂直拆分就是纵向地把表中的列分成多个表,把表从“宽”变“窄”。一般遵循以下几个点进行拆分:

    • 冷热分离,把常用的列放在一个表,不常用的放在一个表。
    • 大字段列独立存放
    • 关联关系的列紧密的放在一起

    我们把用户表中常用的和不常用的而且大字段分离成两张表:

    4.2 数据表的水平拆分

    表的水平拆分感觉跟库的水平拆分思想上都是一样的,只不过粒度不同。表结构维持不变。也就是说拆分后数据集的并集等于拆分前的数据集。理解了 3.2 章节 之后这个就没有什么可说的了。

    5. 总结

    这里简单阐述了几个数据库优化概念,在实际操作中往往会组合使用。我们在实际操作之前要做好数据量的预估,这样能够根据预测未来数据的增量来进行选型。业务数据增长较小,常用于表的拆分。增长特别大达到上万级别则可以选择分库,比如一些资金积分流水,历史记录之类的。有些时候并不是拆分完就万事大吉了,比如我们按照地区拆分后,A 地区业务增长很快业绩很好,而 B 地区推广不力竞争激烈业绩萧条,造成了数据倾斜。也会影响分库分表的期望效果。这需要建立长效的监控预测机制来应对,甚至根据实际情况及时调整策略。数据拆分还面临分布式的很多问题,分布式事务,高可用,数据一致性,全局唯一性都是应该考虑的问题。希望我的讲解能够帮助你,还希望多多关注!

    扫描二维码推送至手机访问。

    版权声明:本文由黑客接单发布,如需转载请注明出处。

    本文链接:https://therlest.com/30701.html

    分享给朋友:

    “mysql读写分离常见方式(数据库读写分离的原理)” 的相关文章

    淘宝什么时候发货(淘宝一般都是什么时候发货)

    随着12月的到来,“双12推广”也如约而至。作为2020年电商最后一次推广,三天爆发也需要提前布局。 1双十二赛马规则 过去双十一促销,很多商家说没有达到预期,甚至很多免费流量也没有改变。问题的关键其实在于赛马规则。大推广前会有额外的赛马规则分配免费流量。想要在推广期获得更确定性的流量,必须了解...

    奥运会遭到俄罗斯黑客攻击!黑客攻击微信聊天记录

    人民网2021年8月13日02:28:03的消息,黑客攻击微信聊天记录 东京奥运会惨遭俄罗斯黑客攻击! 英国国家网络安全中心日前揭露了一项惊人的黑客计划:俄罗斯军事情报部门曾准备对原定今夏举办的东京奥林匹克运动会和残奥会发起网络攻击。据悉,其攻击目标涵盖赛事组织者、后勤公司和赞助商。 打开百...

    我老公老是让他家的亲戚来我家,我该怎么办?请各位帮我想想办法,我

    我老公老是让他家的亲戚来我家,我该怎么办?请各位帮我想想办法,我 请各位帮我想想办法,开网店怎么找女装货源唔爱神起助您成就财富人生,想做微商?想开实体店?想开淘宝店?什么才是你创业的最重要步骤?货源!想在微商卖童装母婴用品纸尿裤女装,开童装女装店铺,你去哪里找最好的货源?如何找童装女装一手货源呢?...

    怎样辨别有农药残留的蔬菜?

    怎样辨别有农药残留的蔬菜? 一、不吃形状、颜色异常的蔬菜: 形状:颜色正常的蔬菜,一般是常规栽培,是未用激素等化学品处理的,可以放心地食用。 “异常”蔬菜可能用激素处理过,如韭菜,当它的叶子特别宽大肥厚,比一般宽叶一次同学聚会,我发现很多同学已经有房有车,毕竟毕业三年了,而我还只是每个月三千块...

    宋pro1.5t买哪款合算 - 奇瑞1.5t发动机通病

    而且车内空间也比轿车更宽敞。这款发动机的油耗还是比较高的,油耗、操控,比亚迪在科技配置方面一向是非常舍得,外观各方面均不错。该发动机为单顶置凸轮轴,奇瑞的技术储备应该是首当其冲的,而且保有量大将来保养维修也比较实惠。 缺点是技术老,在发动机第一盘变速箱方面拥有非常多的,身边朋友都劝他别买,它搭载的是...

    不锈钢水箱制作厂家(小型家用储水箱不锈钢

    福瑞达不锈钢水箱厂,产品外形美观,不锈钢水箱按用途可以分为生活水箱和,采用进口食品级304不锈钢材料制作而成,农村,宝汇不锈钢水箱,比较满意,金诚铭不锈钢水箱,比较满意,现在对生活水箱不是很清楚的了解. 有很多的水箱,安装快,含镍量、生产基地位于江西省南昌英雄城。1-9000T水箱都能定做。 此类水...

    评论列表

    笙沉氿雾
    2年前 (2022-08-21)

    做好数据量的预估,这样能够根据预测未来数据的增量来进行选型。业务数据增长较小,常用于表的拆分。增长特别大达到上万级别则可以选择分库,比如一些资金积分流水,历史记录之类的。有些时候并不是拆分完就万事大吉了,比如我们按照地区拆分后,A 地区业务增长很快业绩

    孤央倥絔
    2年前 (2022-08-21)

    1. 前言相信你经常被 读写分离、垂直拆分、水平拆分、分库分表 这几个名词搞得很懵逼。我有时候也很懵逼,那么今天就来把这几个数据库常用术语搞清楚,同时也记录一下。2. 读写分离这个相对比较好理解一些,就是将数据库分为主从库,一个主库(Master)用于写数据,多个从库(Slaver)

    晴枙情授
    2年前 (2022-08-21)

    护,易扩展 (c)数据服务化 。同时也有一些负面的作用:(a)提高了整个应用的复杂度,而且会形成跨库事务 (b)引发 “木桶效应”,任何一个短板有可能影响整个系统 (c)部分表关系不能 join 只能

    弦久秋酿
    2年前 (2022-08-21)

    r)用于写数据,多个从库(Slaver)进行轮询读取数据的过程,主从库之间通过某种通讯机制进行数据的同步,是一种常见的数据库架构。下面这张图就展示了 “一主二从” 的结构:2.1 为什么要读写分离大多数互联网数据操作往往都是读多写少,随着数据的

    双笙晌融
    2年前 (2022-08-21)

    避免了跨库事务 。缺点同样存在:(a)拆分规则对编码有一定的影响。 (b)不同业务的分区交互需要统筹设计。4. 分表分表也分为 数据表垂直拆分 和 数据表水平拆分 。4

    发表评论

    访客

    ◎欢迎参与讨论,请在这里发表您的看法和观点。