PHP中的数据存储 MySQL分库分表 (下)

年关将至,工作上也没什么大的安排。闲暇时间从一个PHP工程师的角度去学习一下微服务架构,毕竟谁都想进步嘛,哇哈哈


垂直拆分有哪些优缺点

先看一下它的特点。每一个库表结构都是不一样的,每一个库表,它的数据至少有一列是一样的,因为它需要经过这一列来关联,比如说刚才都是通过user ID来关联的。第三个就是每一个库表,它的并级,就是全量数据。优点是什么呢?因为它是按照业务拆分的,所以拆分后业务逻辑就会更加清晰。另外,按照业务拆分之后,数据就会按照业务保存在不同的服务器上,这样数据维护就会比较简单。那么缺点是什么呢?因为它只是根据字段来拆分了,所以当单表数据量大时,问题还是没有解决,因为每个表中数据还是那么多,比如说有1000万表拆分成了若干小表,每个小表中还是有1000万条数据。另外一个就是它受业务的影响,热门业务压力比较大,冷门的业务就会造成资源浪费,比如说用户业务比较大,那么用户的服务器压力会比较大,而另外有一个积分的业务,如果比较冷门,那么这台服务器几乎就没有什么压力,也没有什么访问,就造成了资源的浪费。

水平拆分

再来看下水平拆分。水平分表是针对数据量巨大的单表,按照某种规则拆分到多个表中,但是这些表还是在一个库中。水平分库分表它都是按照某种规则来的,把拆分的表再拆到不同的库中去。看一下规则,先看第一个,按照范围拆分,比如0-1万的放到一个表,10001-2万的放到一个表,然后是通过哈希取模来拆分,比如说通过用户ID来取模,最简单的就是ID除以10,直接分到了10个表中。另外还有根据地理区域分的,一般做云的这种区分呢会比较多,还有根据时间拆分的,比如说将6个月前的数据拆出去放到一个表中,随着时间的流逝,这些表中的数据查询的几率很小,这个也就是冷热数据的分离。

再通过上边的两张图来看一下水平拆分。左边这张图,优则表刚一开始是一个服务器,然后根据ID,0-1万放到服务器一上,10001-2万放到服务器二上,20001-3万放到服务器三上进行拆分。查询的时候,刚一开始where ID等于2的都到了服务器以上拆分完之后,查询where ID等于一的就请求服务器一,等于ID等于2的时候通过2取模等于0的就访问0这台服务器,这个就是水平拆分和垂直拆分对比,还是这张表u表他是怎么拆分的呢?他并没有根据字段来拆分开,拆分成了两个表u表1和u表2,结构是一样的。拆分完之后程序几乎不用动,改动会很小,而且数据扩容难度大,比如说取模的值由2变成了10,这个时候旧数据都要全部重新再处理一遍,因为不同的取模,它落到的库是不一样的,但是刚才讲的一致性哈希算法有效的解决了这个问题。

关于分库分表就讲到这里。

相关推荐
前端小张同学2 小时前
服务器部署 gitlab 占用空间太大怎么办,优化思路。
后端
databook2 小时前
Manim实现闪光轨迹特效
后端·python·动效
武子康3 小时前
大数据-98 Spark 从 DStream 到 Structured Streaming:Spark 实时计算的演进
大数据·后端·spark
该用户已不存在3 小时前
6个值得收藏的.NET ORM 框架
前端·后端·.net
文心快码BaiduComate3 小时前
文心快码入选2025服贸会“数智影响力”先锋案例
前端·后端·程序员
neoooo3 小时前
🌐 Cloudflare Tunnel vs ZeroTier:两个世界的内网穿透哲学
后端
涡能增压发动积3 小时前
当你不了解“异步”时请慎用“异步”——记一次生产环境故障排查之旅
后端
文心快码BaiduComate3 小时前
用Comate Zulu开发一款微信小程序
前端·后端·微信小程序
用户8356290780513 小时前
Python 删除 Excel 工作表中的空白行列
后端·python
Json_3 小时前
使用python-fastApi框架开发一个学校宿舍管理系统-前后端分离项目
后端·python·fastapi