分布分表最佳实践

162 阅读1分钟

为什么要分布分表

1、单体数据库具有瓶颈问题,所以要分库

  1. 单体数据库连接数有限,导致连接数不够,触发程序的重试机制,导致数据库压力更大
  2. 数据库磁盘和备份问题,单个服务器的数据磁盘空间有限,并且数据库备份压力大
  3. 单体的数据库的内存限制

2、数据库的单表具有瓶颈问题,所以要分表

  1. 数据库单表超过2000万条记录,需要3次以上磁盘IO,导致查询时间过长
  2. 单表数据超过2000万条记录,数据排序和索引查询都是耗时的

如何分库分表

1、垂直分库

  1. 根据不同的业务场景,分不同的业务库,比如商家运营库,用户库

2、垂直分表

  1. 根据业务场景和查询场景,拆分用户表字段,分为核心表和非核心表,拆分逻辑满足数据库三大范式

3、水平拆分表

  1. 生成订单,存储到消息中间件,然后根据不同的场景,根据shardKey生成不同分表数据,比如根据订单id分表,在根据用户id分表,在根据商家id分表,通过冗余多份数据,实现不同业务场景查询
  2. 分表的个数,一般是2的次幂,比如4张表,16张表,2的次幂的分表便于数据迁移