Skip to content

Latest commit

 

History

History
36 lines (23 loc) · 1.81 KB

分库分表.md

File metadata and controls

36 lines (23 loc) · 1.81 KB

分库分表

前言

  • 随着公司业务发展,从单表到单库单表,再到分库分表的过程。

image-20210225143722538

分库分表前提

  • 根据经验来看,当某张表的数据量已经达到千万甚至上亿,同时日增数据量在 2% 以上。
  • 当然这些数字并不是绝对的,最重要的还是对这张表的写入和查询都已经影响到正常业务执行,比如查询速度明显下降数据库整体 IO 居高不下等。
  • 关键:分表键,数据迁移
  • 数据库IO瓶颈
    • 第一种:磁盘读IO瓶颈,热点数据太多,数据库缓存放不下,每次查询会产生大量的IO,降低查询速度->分库和垂直分表
    • 第二种:网络IO瓶颈,请求的数据太多,网络带宽不够 ->分库
  • 数据库CPU瓶颈
    • 第一种:SQl问题:如SQL中包含join,group by, order by,非索引字段条件查询等,增加CPU运算的操作->SQL优化,建立合适的索引,在业务Service层进行业务计算。
    • 第二种:单表数据量太大,查询时扫描的行太多,SQl效率低,增加CPU运算的操作。->水平分表。

水平分库

  • 以字段为依据,按照一定策略(hash、range等),将一个库中的数据拆分到多个库中。

水平分表

  • 将一张大表数据通过某种路由算法将数据尽可能的均匀分配到 N 张小表中。
  • 以字段为依据,按照一定策略(hash、range等),将一个表中的数据拆分到多个表中。

垂直分库

  • 以表为依据,按照业务归属不同,将不同的表拆分到不同的库中。

垂直分表

  • 以字段为依据,按照字段的活跃性,将表中字段拆到不同的表中(主表和扩展表)。