- 随着公司业务发展,从单表到单库单表,再到分库分表的过程。
- 根据经验来看,当某张表的数据量已经达到千万甚至上亿,同时日增数据量在 2% 以上。
- 当然这些数字并不是绝对的,最重要的还是对这张表的写入和查询都已经影响到正常业务执行,比如查询速度明显下降,数据库整体 IO 居高不下等。
- 关键:分表键,数据迁移
- 数据库IO瓶颈
- 第一种:磁盘读IO瓶颈,热点数据太多,数据库缓存放不下,每次查询会产生大量的IO,降低查询速度->分库和垂直分表
- 第二种:网络IO瓶颈,请求的数据太多,网络带宽不够 ->分库
- 数据库CPU瓶颈
- 第一种:SQl问题:如SQL中包含join,group by, order by,非索引字段条件查询等,增加CPU运算的操作->SQL优化,建立合适的索引,在业务Service层进行业务计算。
- 第二种:单表数据量太大,查询时扫描的行太多,SQl效率低,增加CPU运算的操作。->水平分表。
- 以字段为依据,按照一定策略(hash、range等),将一个库中的数据拆分到多个库中。
- 将一张大表数据通过某种路由算法将数据尽可能的均匀分配到 N 张小表中。
- 以字段为依据,按照一定策略(hash、range等),将一个表中的数据拆分到多个表中。
- 以表为依据,按照业务归属不同,将不同的表拆分到不同的库中。
- 以字段为依据,按照字段的活跃性,将表中字段拆到不同的表中(主表和扩展表)。