假设我们有一套数据量庞大的前台系统需要从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完成

这是我的一些看法。在不影响用户的前提下,希望以后能够实现完美的数据迁移,呵呵。

原文地址:http://www.taobaodba.com/html/564_%E5%A2%9E%E9%87%8F%E6%97%A5%E5%BF%97%E8%BF%AD%E4%BB%A3%E5%90%8C%E6%AD%A5%E5%92%8C%E9%98%BF%E5%9F%BA%E9%87%8C%E6%96%AF%E6%82%96%E8%AE%BA.html

转载于:https://blog.51cto.com/hzcsky/558190

增量日志迭代同步和阿基里斯悖论相关推荐

  1. 破解芝诺悖论之阿基里斯追乌龟

    版权所有.所有权利保留. 欢迎转载,转载时请注明出处: http://blog.csdn.net/xiaofei_it/article/details/15333481 阿基里斯是古希腊神话中善跑的英 ...

  2. 阿基里斯永远追不上乌龟

    芝诺是古希腊一个极善于诡辩的哲学家.他的一个众人皆知的"阿基里斯永远追不上乌龟"的诡辩是这样的:阿基里斯是古希腊神话中善跑的英雄.假设乌龟先爬一段路然后阿基里斯去追它.芝诺认为阿基 ...

  3. “阿基里斯和乌龟”与逻辑推理的各向异性

    有一个很有名的"阿基里斯和乌龟"的故事,说的是古希腊勇士阿基里斯有一天要和一只乌龟赛跑,乌 龟和他打赌说,只要阿基里斯让乌龟先跑一段,然后再追它,那么不管阿基里斯跑得有多快,也永远 ...

  4. 阿基里斯追乌龟的思考,空间,时间,速度非连续

    高中的时候才接触和了解,诺阿基里斯追乌龟的悖论,一直萦绕在自己的心头.在上大学的时候,学习了微积分,自己以为自己懂了,但是最近又思考的时候,发现大学里的那种想法还是存在着一些矛盾,自己没有意识到.再度 ...

  5. AI的阿基里斯之踵:模糊性

    来源:IEEE电气电子工程师学会 摘要:网罗全球科技前沿动态,为科研创业打开脑洞. 很多年前,我和一位朋友去参观一个果园.他的儿子是这个果园的经理,向我们介绍了其工作.我的这位朋友和我都是工程师,开始 ...

  6. 标准库——C++的阿基里斯之踵

    说实话,为了解决同样的问题,能不用C++我就尽量不用C++,因为,我觉得C++编程太繁琐了!为什么这样说?且听我慢慢道来. C++,作为一种程序语言,有着非常精美和简练的语法.和C一脉相承的C++,其 ...

  7. mysql batch mode_MySQL数据库增量日志解析工具 Canal 实战

    简介 canal,阿里开源工具,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费 应用场景 数据库实时备份 业务cache刷新 索引构建和实时维护,例:将商品数据推送到es中构建 ...

  8. ogg oracle 测试kafka_利用ogg实现oracle到kafka的增量数据实时同步

    前言 ogg即Oracle GoldenGate是Oracle的同步工具,本文讲如何配置ogg以实现Oracle数据库增量数据实时同步到kafka中,其中同步消息格式为json. 下面是我的源端和目标 ...

  9. 工业用科技激光SLAM拣货潜伏式AGV多层料箱机器人|海格里斯HEGERLS助你实现生产全自动化

    随着物流自动化.智能化的不断发展,企业已经不再局限于对单一产线或者仓储进行自动化升级改造,所以整厂物流步伐加快,大物流时代开始来临.而在当下的移动机器人市场格局中,受制于行业发展的不足,单一厂家要想独 ...

最新文章

  1. springboot springcloud 热部署
  2. ppt倒计时3分钟_PPT做的又慢又丑?花3分钟学会这5个PPT神技巧,快速做出好看PPT...
  3. 华为防火墙ftp_FTP被动模式访问问题
  4. Jerry制作的软件工程里Design for Change的培训材料
  5. http 请求报文和响应报文
  6. java程序默认使用的xmx_为什么JAVA进程占用内存会超过Xmx设置
  7. python image 转成字节_Python 办公自动化之 Excel(下)
  8. java面试(葵花宝典)
  9. Linux面试题,浅析常见Linux命令面试题及答案
  10. docker - 常用命令详解
  11. Chrome 进阶:用扩展武装自己
  12. MacOS Mojave的安装
  13. 此时流泪,彼时花开。。。。
  14. 科比投篮预测——数据处理与分析
  15. Divan and bitwise operations(组合数+思维)
  16. Spring Boot 学习之路之 Spring Security(二)加入mybatis
  17. 2022年最新Upwork注册申请教程
  18. ubuntu10.10+双显卡I卡N卡+bumbleb…
  19. 基于深度学习的人工林地面激光扫描点云立木特征参数提取方法
  20. c uml mysql_UML图不包括()。

热门文章

  1. 【系统分析师之路】第十八章 系统分析师专业英语
  2. 共享私人管家?几百亿的市场了解一下?
  3. VCS门级仿真系列文章之sdf文件和$sdf_annotate反标
  4. Python 漏斗图分析 之 MOOC商业数据分析作业
  5. MATLAB安装后的DOS框出现、脚本文件图标不显示、启动路径修改等问题解决
  6. Java的编程基础-----Java中二进制与十进制的转换
  7. 【Java】panel.getGraphics()报错空指针异常的解决方法
  8. pandas修改列的名字
  9. 对Linux既拉又打 微软与开源的“爱恨情仇”
  10. 来一场轰轰烈烈的HTTP协议扫盲革命