- 一张表数据量达到500w到1000w就要进行分库分表
一般分为两种:
- 垂直拆分:垂直拆库,根据业务拆分成不同的数据库
- 水平拆分:水平拆表,一张表拆成多个
hash分表
根据id取模的方式计算应该被放入哪站表,迁移起来困难但没有热点问题,承担压力的表可能有多张,减少并发加锁的概率。
range分表
根据范围进行分表,比如0-1000万放入0表,1000万-2000万放入1表,不需要迁移数据有热点问题,并发高的情况下,很多操作全都针对同一张表,一些加锁操作影响性能。
数据迁移
- 停机迁移
- 不停机迁移
- 1.分批进行迁移(全量同步),2.根据数据库binlog日志监听将修改的数据再重新写入新的数据库中(增量同步)
- 出现的问题:全量和增量同步会有先后顺序问题,比如先通过binlog执行了一条update语句但是全量同步那里还没执行insert语句,会造成新库中还是老数据,所以执行update和delelet语句的时候如果影响条数是0可以放到mq延迟队列中一段时间之后重新执行一次。