垂直切分和水平切分相比,可以理解为把数据表中的数据按照数据字段的维度纵向切分开。
垂直切分在复杂逻辑解耦方面很有用。例如,针对亿级访问量的系统,用户并发数和每秒的访问总量都很大,仅使用 Mysql 支撑不住全部的服务,还需要在中间增加缓存层,加速前端访问。一般在缓存层会使用垂直切分的方法。
垂直切分的时候,也会按照数据把模块复杂的功能切分开。例如,一个用户有10个字段,根据业务场景,把3个字段存储在一个缓存表中,把另外7个字段存储在另外一个缓存表中。虽然它们都属于一个主键,但根据业务场景不同,划分到不同的缓存表中。
内存相对比较贵,表中的一条记录数据字段很多,并不是用户都想要的。例如:个人资料有几十个字段,常用的也就2到3个字段。我们可以按照功能的场景来设计,针对同一个场景,在缓存表中只存和这个场景相关的业务字段。
当权重不同的、无交集的逻辑混杂在一起时,垂直切分会大大降低复杂度。
例如,一个进程处理两个功能:一个是修改用户详细资料,对用户的全部资料都要修改,一个是快速访问简单的用户资料,例如:昵称和会员标记。
在业务逻辑层,一般修改详细资料的场景很少,该功能所在的入口也很深;但对于快速访问用户的简单资料,每次登陆时都要调用该功能。一个进程虽然提供了两个功能,但这两个功能被访问的次数和对服务质量的要求相差很多。把两个功能切分后,整体会更容易维护,也降低了两种功能互相影响的概率。
按功能切分存储如下图所示。
让不同状态数据相互独立,互不干扰。但也有缺点,数据会冗余存储,相同的数据会存储多份,大大增加了维护数据一致性的难度。
|
|
优点
|
缺点 |
|
水平切分
|
将大量数据切分成少量数据,处理规模变小
|
增加了聚合类数据操作的处理难度 |
|
垂直切分
|
不同功能的数据相互独立,互不干扰
|
有些字段会冗余存储,增加了维护数据一致性的难度 |
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/chengqiuming/article/details/121870095
内容来源于网络,如有侵权,请联系作者删除!