数据倾斜问题

分库分表

MySQL单表最多只能存储千万级别的数据,当然如果表里有大字段,可能存储的量级会低一些。
当业务规模增长,数据量可能会上升到单表无法存储的情况,就需要将数据分散到多张表。

  • 按一定规则hash数据,比如按user_id分库分表,就需要用user_id计算一个hash值,对应到一张分表;

如果hash得不均匀,可能会引起数据倾斜,比如某些特殊user_id的数据量特别大扎堆到了一个分库里,那么该分库的容量和水位都会比其他的更高一些。

  • 解决1:扩库,将原来16库、1024表细分成更多,数据会被打得更散;
  • 解决2:二级分表键,除了user_id,再找一个业务的分表键,且它需要足够的区分度。