背景
一开始可能没有分表分库,因为数据不多。后面数据多了,才开始分表分库。怎么分?一般按时间维度分。或者按id。
怎么分,是分表分库的算法。确定了算法之后,怎么上线?具体怎么操作?
停机
一种就是停机的。然后,写一个程序,读数据,写数据。
读数据,是从旧数据里读。即从旧数据库读。
写数据,是写到新库。
架构图
分表分库中间件
写数据的时候,怎么才能实现分表分库?答案是,使用分表分库中间件。大厂都有自己的中间件。当当,京东。
其实,本质就是:
1.写的时候,id字段——》hash,写到一个库
2.读的时候,id字段——》hash,从同一个库读
不停机
使用消息中间件
分两步
1.先迁移旧数据
2.后迁移新数据 //新数据指的是增量新数据
先迁移旧数据
后迁移新数据
消息中间件的作用
就是为了把增量新数据,写到消息中间件,后面再异步处理消息中间件里的数据。
增长新数据,具体是什么?其实就是sql语句。
使用binlog
刚才说了,消息中间件的作用,只是临时存储数据,那么除了消息中间件,还有没有其他方法?有。答案就是mysql的binlog。
刚才说了,消息中间件存储的数据是增量新数据,即sql。binlog存储的刚好也是增量新数据。
binlog
1.增量新数据,指非读sql
2.为什么是非读?因为binlog主要作用就是为了备份,从而恢复数据。
架构图
优点
作用是一样,优点是什么?1.消息中间件,是入侵的。具体是入侵代码,因为你要改代码,写数据到消息中间件2.binlog不入侵,因为是mysql自带的。