为什么要分布分表
1、单体数据库具有瓶颈问题,所以要分库
- 单体数据库连接数有限,导致连接数不够,触发程序的重试机制,导致数据库压力更大
- 数据库磁盘和备份问题,单个服务器的数据磁盘空间有限,并且数据库备份压力大
- 单体的数据库的内存限制
2、数据库的单表具有瓶颈问题,所以要分表
- 数据库单表超过2000万条记录,需要3次以上磁盘IO,导致查询时间过长
- 单表数据超过2000万条记录,数据排序和索引查询都是耗时的
如何分库分表
1、垂直分库
- 根据不同的业务场景,分不同的业务库,比如商家运营库,用户库
2、垂直分表
- 根据业务场景和查询场景,拆分用户表字段,分为核心表和非核心表,拆分逻辑满足数据库三大范式
3、水平拆分表
- 生成订单,存储到消息中间件,然后根据不同的场景,根据shardKey生成不同分表数据,比如根据订单id分表,在根据用户id分表,在根据商家id分表,通过冗余多份数据,实现不同业务场景查询
- 分表的个数,一般是2的次幂,比如4张表,16张表,2的次幂的分表便于数据迁移