数据库是大型架构核心,下面我详解数据库拆分@mikechen
垂直拆分 VS 水平拆分
首先,你要清楚:什么是垂直拆分?什么是水平拆分?

垂直拆分,按功能、或实体,将单一数据库或应用拆成多个模块。
例如:将用户信息表、订单表、日志表分别存放于不同服务或数据库。
其核心思想是按业务边界或数据列的相关性进行拆分,以降低单库复杂度并实现功能隔离。
水平拆分
按记录行将同一表的数据划分到多个分片(shard)。
例如:按用户ID范围或哈希分配到不同数据库节点。
其核心思想:是通过分担行级数据量来提高并发与存储容量。
数据规模与增长速度
可以从如下4大方面,来选择:

当单表行数与存储量超出单节点。承载能力时优先考虑水平拆分。
若数据量适中但表结构复杂、责任边界明确则优先垂直拆分。
访问模式与热点问题
若存在明显按业务模块访问隔离(例如:读写主要集中在订单服务而非日志),垂直拆分更适合。
若单一表出现写/读热点且按某一维度可均匀分布,则水平拆分能缓解瓶颈。
事务与关联查询
需要频繁跨表强一致性事务、或复杂联表查询时,垂直拆分:可能导致跨服务调用增加。
水平拆分会使跨分片事务与联表查询复杂化,应权衡一致性与性能。
运维复杂度与成本
垂直拆分通常实现与运维复杂度较低,水平拆分则需额外的路由、迁移与监控机制,成本更高。
mikechen睿哥
10年+一线大厂架构实战经验,就职于阿里、淘宝等一线大厂,操盘多个亿级大厂核心项目。