垂直拆分
垂直拆分 : 把一个数据库, 拆分为多个数据库. 按不同的模块拆分. 原来是一个模块 , 公用一个数据库的资源, 垂直拆分后, 各个模块的项目竞争的资源, 不存在了 .
优点:
- 减轻了原有单库的压力, 提高了每个数据库的分摊数据, 给每个库的 CPU 内存, 网络压力变小了
- 业务更加清晰
- 解耦
- 系统扩展更加容易了
缺点:
- 系统复杂性增加了
- 多个数据库的联表查询, rpc调用, 可能有超时之类的问题 .
- 事务需要分布式事务处理
- 单表的数据量很大, 垂直拆分也无法解决.
上面介绍的垂直拆分的问题是, 某个库中的某个表也可能在业务的发展中, 数据量变得很大, 从而导致查询超时, rpc调用 服务雪崩等.
水平分库分表 对数据库进行拆分, 对数据库中的表进行拆分.
水平拆分的问题:
- 水平拆分过程比较复杂
- 事务处理变得复杂
- 多库多表联查复杂度大
- 水平拆分后, 多个数据库源, 单表的数据会分散到不同的数据源中.