增量日志迭代同步和阿基里斯悖论
来源:互联网 发布:java中自定义异常类 编辑:程序博客网 时间:2024/04/30 23:47
假设我们有一套数据量庞大的前台系统需要从MySQL上转到Hbase上,比较粗糙的数据同步方法有: 用户体验看起来比较友好的数据同步方法有: 问题: 这个问题我没有想到答案, 阿基里斯真的追不上乌龟?当然不可能: 回到增量日志迭代同步的问题。我们在什么前提下,可以认为迭代可终止: 这是我的一些看法。在不影响用户的前提下,希望以后能够实现完美的数据迁移,呵呵。增量日志迭代同步和阿基里斯悖论
1、将整个前台系统变为只读
2、全量dump MySQL数据
3、将MySQL数据导入到Hbase上
4、将前台系统切换到Hbase上,并打开更新
该方案比较简单,易于维持数据一致性,但是缺点是影响了所有用户的写入,并且时间过长。
1、全量dump某个时间点之前的数据,并记录期间的增量日志A
2、apply日志A内的数据,并记录期间的增量日志B
3、apply日志B内的数据,并记录期间的增量日志C
4、不断重复第3步,直到日志C足够小
5、将整个前台系统变为只读,apply日志C内的数据
6、将前台系统切换到Hbase上,并打开更新
该方案实现比较复杂,迭代日志的做法看起来没完没了,而且容易引起少部分用户数据不一致。但是只读的时间非常短,大部分用户都能在数据同步期间自由使用应用。
简单概括一下:
方案1:所有用户都会受到长时间的小影响(只读)
方案2:少部分用户会受到短时间的大影响(数据不一致)
是不是牺牲小部分人来成全大部分人就是对的?
在这个问题上,德先生(democracy)是不是最终答案?
但是针对迭代日志是不是没完没了的疑问,阿基里斯悖论给了我一点线索:
阿基里斯是一个跑得很快的神话人物,芝诺提出“假如乌龟领先阿基里斯1000米,则阿基里斯永远不可能追上乌龟”。这个结论的推理过程是这样的:
1、乌龟领先阿基里斯1000米
2、阿基里斯追了1000米
3、乌龟前进了100米(假设乌龟速度是阿基里斯的十分之一)
4、阿基里斯追了100米
5、乌龟前进了10米
。。。
6、阿基里斯追了n米
7、乌龟前进了n/10米
。。。
8、阿基里斯无限逼近乌龟,但是永远不可能追上
1000*(1+0.1+0.01+…)=1000*(1+1/9)=10000/9
在10000/9米处,阿基里斯就会和乌龟并驾齐驱,然后超越。
1、日志apply无停顿(阿基里斯一直在跑)
如果apply完一段日志,不是马上去aply新产生的增量日志,那么迭代很可能无法终止
2、日志apply速度大于增量日志生成速度(阿基里斯要跑得比乌龟快)
这个比较显而易见。如果不是这样,日志只会越积越多,不可能apply完成
- 增量日志迭代同步和阿基里斯悖论
- 阿基里斯与乌龟的悖论
- 破解芝诺悖论之阿基里斯追乌龟
- 芝诺悖论2 阿基里斯与乌龟
- 迭代开发和增量开发
- 增量和迭代的概念:
- 增量和迭代的概念
- 迭代开发和增量开发
- 增量与迭代
- 关于增量模型和迭代模型的区别
- 关于增量模型和迭代模型的区别
- 关于增量模型和迭代模型的区别
- “阿基里斯和乌龟”与逻辑推理的各向异性
- 阿基里斯之踵
- 晚餐趣事-----增量还是迭代?
- Flink批处理中的增量迭代
- 捷克,阿基里斯之踵
- 阿基里斯永远追不上乌龟
- 在C++实现回调(续)
- Cannot modify header information - headers already sent by
- Zen cart后台管理账号密码忘记怎么办
- Arm-linux-gcc安装
- Java读取文件中含有中文的解决办法
- 增量日志迭代同步和阿基里斯悖论
- JavaScript自动点击链接 防止绕过浏览器访问
- Ubuntu 8.04下编译Android源码全过程
- KB和Kib 关于字节(byte/B)的进制问题
- 07 年注册的账号,博客失效了,只能再开一个空间
- C# 序列化
- gcc中long long
- u10.04下 tevlive-xetex 、texmaker 、ctex宏包 安装成功(附过程)
- Setup TAHI environment for IPv6 test