mysql为什么需要扩容?
- mysql是基于硬盘的有状态服务。一般当数据量超过2000万之后,查询时间会出现明显增加。
- mysql是按照页来组织资源的,一页的数据放在一起可以方便硬盘上的数据读取。同时读写也是按照页来处理的。
- 按照最常用的InnoDB引擎+B+树索引,2000万条数据会涉及到2个树页以及1个数据页,从硬盘上读取不连续的三个页需要大量的寻址时间导致速度下降。
扩容时需要注意哪些问题?
- 数据如何重新分发。
- 如何处理在数据重新分配时的脏数据。
扩容方案
- 停机方案
- 关闭业务服务,完成数据扩容迁移。
- 之后升级业务服务,对接新的数据库。
- 开放接口,开始提供服务。
- 停写方案
- 升级业务服务,禁止所有写请求,只能进行读请求。
- 开始数据库扩容迁移。
- 数据库迁移完成后,升级业务服务打开写请求。并完成新库对接。
- 日志方案
- 升级业务服务,记录某一时间之后的sql操作语句。
- 同步该时间点之前的数据,完成扩容迁移。
- 迁移完成后,使用模拟执行器执行日志中的sql语句。
- 注意,这里可能会出现数据错误。就是用户在sql语句中修改过得数据,在换到新库后又进行了一次修改。之后执行sql语句又改回去了,所以需要记录修改时间和修改内容,修改完成后需要针对这些数据再次完成修改。
- 修改结束后,升级业务服务关闭记录sq