分布式系统 读书笔记(二)数据平滑迁移

可以参考方案

在开始进行数据迁移时,记录增量的日志,在迁移结束后,再对增量变化进行处理。在最后,可以把要迁移的数据的写暂停,保证增量日志都处理完毕后,再切换规则,放开所有的写,完成迁移工作。

 用户信息表示示例

id     name   age   gender

我们希望根据id去模把上面这个表 划分到两个数据库中,  也就是id  mod 2 为0的还在原数据库  为1的在新库中

假设我们有4条数据

根据前面描述

1首先我们确定要开始扩容,并且开始记录数据库的数据变更的增量日志

    源库表          增量日志       新库表

     id=1 v=1

     id=2 v=1

     id=3 v=1

     id=4 v=2

id标识记录   v 标识版本号

2 接下来,数据开始复制到新库表,并且更新进来。可能形成以下格式

     源库表          增量日志         新库表

     id=1 v=2       id=1 update    id=1 v=1

     id=2 v=2       id=2 update    id=3 v=2

     id=3 v=2       id=3 update

     id=4 v=2   

可以看到1 和3 的已经在新库中。但是id=1的记录版本是旧的 id=3是新的

3.当全量迁移结束后,我们把增量日志中的数据也进行迁移 ,如下

  源库表          增量日志         新库表

     id=1 v=2       id=1 update    id=1 v=2

     id=2 v=2       id=2 update    id=3 v=2

     id=3 v=2       id=3 update  

     id=4 v=2       id=4 update

                          id=3 update

虽然不能保证新库和源库一直,但这是一个逐渐收敛的过程

4 然后我们进行数据比对,这时可能会有新库数据和源库数据不同的情况,把它们记录下来。

5、接着我们停止源数据库中对于要迁移的数据的写操作,然后进行递增日志处理,以使得新库表的数据时最新的。

6最后更新路由规则,所有新数据的读和写就到了新库表,这样就完成了迁移过程

书名《大型网站系统和Java中间件实践》

猜你喜欢

转载自xjl712.iteye.com/blog/2077318