Mysql 分库分表

Mysql 分表分库

分库

单个数据处理能力有限,所在的服务上磁盘空间有限,单库存在 I/O 操作瓶颈。

分表

单表数据超过一定量(几百万)会导致索引膨胀,查询缓慢,超时。

拆分方案

垂直拆分

垂直分表

  • ⼤表拆⼩表,基于列的字段进⾏
  • ⼀般表中字段较多,将不常⽤的,数据较⼤的,长度较长的,拆分到扩展表

垂直分库

  • ⼀般情况下,针对⼀个系统中不同业务进⾏拆分
  • 拆分之后,可放到多个服务器上

水平拆分

水平分表

针对数据量巨⼤的单张表(⽐如订单),按照某种规则(RANGE,HASH取模),切分到多张表中,这些表还在⼀个数据库中

水平分库

将单张表的数据切分到多个服务器上,每个服务器都有相应的库和表,只是表中的数据集合不同

⽔平分库能够有效的缓解单机和单库的性能瓶颈,I/O,连接数和硬件资源等瓶颈

水平分库分表切分规则

range:根据范围,⽐如0-1000⼀个表,1001到2000⼀个表
hash取模:⽐如取ID,进⾏hash取模,根据模数分配到不同的数据库中
地理区域:按照地理范围进⾏划分
时间范围:按照时间进⾏切分