Mysql 分库分表
Mysql 分表分库
分库
单个数据处理能力有限,所在的服务上磁盘空间有限,单库存在 I/O 操作瓶颈。
分表
单表数据超过一定量(几百万)会导致索引膨胀,查询缓慢,超时。
拆分方案
垂直拆分
垂直分表
- ⼤表拆⼩表,基于列的字段进⾏
- ⼀般表中字段较多,将不常⽤的,数据较⼤的,长度较长的,拆分到扩展表
垂直分库
- ⼀般情况下,针对⼀个系统中不同业务进⾏拆分
- 拆分之后,可放到多个服务器上
水平拆分
水平分表
针对数据量巨⼤的单张表(⽐如订单),按照某种规则(RANGE,HASH取模),切分到多张表中,这些表还在⼀个数据库中
水平分库
将单张表的数据切分到多个服务器上,每个服务器都有相应的库和表,只是表中的数据集合不同
⽔平分库能够有效的缓解单机和单库的性能瓶颈,I/O,连接数和硬件资源等瓶颈
水平分库分表切分规则
range:根据范围,⽐如0-1000⼀个表,1001到2000⼀个表
hash取模:⽐如取ID,进⾏hash取模,根据模数分配到不同的数据库中
地理区域:按照地理范围进⾏划分
时间范围:按照时间进⾏切分