如果用户注册人数过亿,数据信息量大。此时就需要考虑分库分表
单库分表
垂直拆分和水平拆分
垂直拆分
拆分列
水平分表——常见
本质把大表拆分小表——Id取模分表
数据迁移问题:
如果一开始将数据预估量很大。建议根据id范围分表。——多用于分表数据不能很好扩展问题
问题:一两张分表进行频繁读写操作。其他表业务空闲的状态
所以提出分摊数据读写压力——读写热点问题
解决:将ID变的随机——使得ID随机分散到所有表上。分摊读写压力。
同时id取模分表和id范围分表
先用ID范围去分表;然后在某个id范围内引入取模的功能。
不管是单库分表还是分库分表。都要进行中间层逻辑做路由。把这部分逻辑封装起来,放在数据库和业务代码之间。比如在代码和数据库之间添加服务Proxy
没有什么是加中间层不能解决的
分库分表会导致读扩散问题
一般情况下,会将数据库主键作为分片键。如果使用where条件查询除id主键以外的普通索引列。比如name。没有办法定位在哪一个分表当中,那么会进行并发遍历分表进行读扩散操作。