垂直拆分 vs 水平拆分:如何选择?

数据库是大型架构核心,下面我详解数据库拆分@mikechen

垂直拆分 VS 水平拆分

首先,你要清楚:什么是垂直拆分?什么是水平拆分?

垂直拆分 vs 水平拆分:如何选择?-mikechen

垂直拆分,按功能、或实体,将单一数据库或应用拆成多个模块。

例如:将用户信息表、订单表、日志表分别存放于不同服务或数据库。

其核心思想是按业务边界或数据列的相关性进行拆分,以降低单库复杂度并实现功能隔离。

 

水平拆分

按记录行将同一表的数据划分到多个分片(shard)。

例如:按用户ID范围或哈希分配到不同数据库节点。

其核心思想:是通过分担行级数据量来提高并发与存储容量。

 

数据规模与增长速度

可以从如下4大方面,来选择:

垂直拆分 vs 水平拆分:如何选择?-mikechen

当单表行数与存储量超出单节点。承载能力时优先考虑水平拆分。

若数据量适中但表结构复杂、责任边界明确则优先垂直拆分。

访问模式与热点问题

若存在明显按业务模块访问隔离(例如:读写主要集中在订单服务而非日志),垂直拆分更适合。

若单一表出现写/读热点且按某一维度可均匀分布,则水平拆分能缓解瓶颈。

事务与关联查询

需要频繁跨表强一致性事务、或复杂联表查询时,垂直拆分:可能导致跨服务调用增加。

水平拆分会使跨分片事务与联表查询复杂化,应权衡一致性与性能。

运维复杂度与成本

垂直拆分通常实现与运维复杂度较低,水平拆分则需额外的路由、迁移与监控机制,成本更高。

mikechen睿哥

10年+一线大厂架构实战经验,就职于阿里、淘宝等一线大厂,操盘多个亿级大厂核心项目。

评论交流
    说说你的看法