分布式系统 读书笔记(二)数据平滑迁移
可以参考方案
在开始进行数据迁移时,记录增量的日志,在迁移结束后,再对增量变化进行处理。在最后,可以把要迁移的数据的写暂停,保证增量日志都处理完毕后,再切换规则,放开所有的写,完成迁移工作。
用户信息表示示例
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中间件实践》
已有 0 人发表留言,猛击->> 这里<<-参与讨论
ITeye推荐