扩展立方体

X 轴:通过 clone 整个系统复制,集群
Y 轴:通过解耦不同功能复制,业务拆分
Z 轴:通过拆分不同数据扩展,数据分片
image.png

垂直拆分

1.拆法

a.拆库:

例如淘宝把用户信息放一个库UC,商品信息放一个库IC,订单信息放一个库TC。

b.拆表:

一个表的列数特别大的时候,拆成几个不同的表。

2.优缺点

a.优点:

1、单库(单表)变小,便于管理和维护
2、对性能和容量有提升作用
3、改造后,系统和数据复杂度降低
4、可以作为微服务改造的基础

b.缺点:

1、库变多,管理变复杂
2、对业务系统有较强的侵入性
3、改造过程复杂,容易出故障
4、拆分到一定程度就无法继续拆分

水平拆分

最常见的方式:拿ID来取模,id%2=1:去1库,id%2=0:去0库。

1.拆法

分库,分表,分库分表

a.按时间分库分表:

很多时候,我们的数据是有时间属性的,所以自然可以按照时间维度来拆分。比如当前数据表和历史数据表,甚至按季度,按月,按天来划分不同的表。这样我们按照时间维度来查询数据时,就可以直接定位到当前的这个子表。更详细的分析参考下一个小节。

b.强制按条件指定分库分表:

比如配置好某些用户的数据进入单独的库表,其他数据默认处理。

c.自定义方式分库分表:

指定某些条件的数据进入到某些库或表

d.如何选择

DBA只建议做分库,不建议做分表。一些中间件也只做分库不做分表。
一般情况下,如果数据本身的读写压力较大,磁盘 IO 已经成为瓶颈,那么分库比分表要好。分库将数据分散到不同的数据库实例,使用不同的磁盘,从而可以并行提升整个集群的并行数据处理能力。相反的情况下,可以尽量多考虑分表,降低单表的数据量,从而减少单表操作的时间,同时也能在单个数据库上使用 并行操作多个表来增加处理能力。

2.优缺点

a.优点:

1、解决容量问题
2、比垂直拆分对系统影响小
3、部分提升性能和稳定性

b.缺点:

1、集群规模大,管理复杂
2、复杂 SQL 支持问题(业务侵入性、性能)
3、数据迁移问题
4、一致性问题