数据库 分表分库 上线部署

133 阅读2分钟

背景

一开始可能没有分表分库,因为数据不多。后面数据多了,才开始分表分库。怎么分?一般按时间维度分。或者按id。

怎么分,是分表分库的算法。确定了算法之后,怎么上线?具体怎么操作?

停机

一种就是停机的。然后,写一个程序,读数据,写数据。

读数据,是从旧数据里读。即从旧数据库读。

写数据,是写到新库。


架构图

分表分库中间件

写数据的时候,怎么才能实现分表分库?答案是,使用分表分库中间件。大厂都有自己的中间件。当当,京东。

其实,本质就是:
1.写的时候,id字段——》hash,写到一个库
2.读的时候,id字段——》hash,从同一个库读

不停机

使用消息中间件

分两步
1.先迁移旧数据
2.后迁移新数据 //新数据指的是增量新数据

先迁移旧数据

后迁移新数据


消息中间件的作用

就是为了把增量新数据,写到消息中间件,后面再异步处理消息中间件里的数据。

增长新数据,具体是什么?其实就是sql语句。

使用binlog

刚才说了,消息中间件的作用,只是临时存储数据,那么除了消息中间件,还有没有其他方法?有。答案就是mysql的binlog。

刚才说了,消息中间件存储的数据是增量新数据,即sql。binlog存储的刚好也是增量新数据。


binlog
1.增量新数据,指非读sql
2.为什么是非读?因为binlog主要作用就是为了备份,从而恢复数据。


架构图


优点
作用是一样,优点是什么?1.消息中间件,是入侵的。具体是入侵代码,因为你要改代码,写数据到消息中间件2.binlog不入侵,因为是mysql自带的。

参考

mp.weixin.qq.com/s/fDNTMx1KC…