假设我们有一套数据量庞大的前台系统需要从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. python中os.system.获取输出信息_python中os.system()的返回值
  2. lisp 发凹圆角_css能实现这样的内凹圆角吗?如何实现?具体代码是!!
  3. 数据结构-第十章 排序
  4. postman自动打开_postman---postman自动发博客
  5. 【ARM-Linux开发】DRM学习(一)
  6. java左右值_为什么C/C++等少数编程语言要区分左右值?
  7. python学习笔记:python字符串
  8. 《AIX 5L 系统管理技术》学习笔记之第七章设备管理
  9. 基于二叉链表的树结构相等的判断
  10. tensorflow2 unet加载自己的图像进行训练
  11. win10 LTSC 2019 激活
  12. 电子计算机上面cutup,cutup(cut up用法总结)
  13. 马哥教育SRE笔记【作业】week04
  14. Linux学习日记- - -配置篇##1
  15. activemq在阿里云部署启动: java.net.UnknownHostException 异常处理
  16. 腾讯云服务器nginx安装配置
  17. 使用Python和YOLO检测车牌
  18. python leetcode 202. Happy Number
  19. java基础17 模板模式
  20. C#错误之 System.Threading.ThreadAbortException:正在中止线程

热门文章

  1. [JavaScript]什么是魔术字符串?
  2. CRM原型Axure原型完整的线上在用的系统
  3. bat延时100ms_bat如何延时执行指定命令?
  4. Linux下 Qt界面程序嵌入另一个Qt界面程序_Qt应用嵌入外部进程窗口
  5. MATLAB读取nc文件并转换为.tif格式
  6. 炬力方案系统修改杂记
  7. 刀塔传奇公会管理系统 ------ Pgsql 后台
  8. 冒险王3ol服务器维护中,冒险王3OL公会系统玩法介绍_冒险王3OL该怎样加入公会_好特网...
  9. 白热化的能源汽车市场、应如何与之抗衡?
  10. 浅谈网易大数据平台下的数据质量