编写迁移数据程序的几点反思

最近有个项目需要迁移旧系统的数据,原来以为确定好数据口径,写个程序跑一遍就完事了。程序逻辑也比较简单,读旧库遍历需要的数据,写入新库,加上并发执行的逻辑。然而现实却是问题多多,频频返工修改程序。最终还被扣了分哎。反思了整个过程,总结了以下几点,避免以后犯同样的问题。

1. 捋清数据迁移的口径

此次项目我初次接手,业务逻辑不熟悉,由另外一个同事提供迁移数据的口径,原始问题也源于此:同事告知的数据的口径有误,迁移完后才发现缺少一部分数据。虽然很无奈但也没办法,接着修改下程序又再跑一遍。这都算了,最离谱是上线后,又被告知迁移的数据仍有缺漏,上司又告诉我以另一个口径全量跑一遍,真是崩溃。

事后我琢磨着从自身角度如何能尽量避免这个事发生,可能能够去做的就是在确定数据口径时,应该首先跟熟悉业务的同事确定好,随后在小组群里@上司同步一下结论,进行二次确认。这样的话无论结果如何,此环节也已尽到了工具人的责任了。(┓( ´∀` )┏ )

2. 注意读取旧数据的性能

发现第一步的问题后,立即修改读取数据的SQL语句,改着改着语句条件出现了慢查询的问题,导致跑起来的时候影响到数据库性能。

这个问题属于低级错误,修改程序时应该时刻注意着读取语句的性能问题。出现问题,不但影响原业务,也会导致迁移程序的效率低下。

3. 脚本执行可断点续跑

执行程序过程中,由于各种原因(比如:并发太高,数据库压力过大),导致程序被迫停止。但程序被迫停止以后,重新执行又要从头开始执行。

回想处理线上问题时,情绪比较紧张,总是很急于快点改好程序,就开始执行,也由于最初设计脚本时,迁移数据口径清晰,并没有考虑要反复去跑的可能,所以设计上没有加入可以断点续跑。如果程序需要执行数小时,这一点很关键,多花一些时间去支持它,你就会在意外中断发生时,保持从容。

4. 脚本执行的幂等性

由于迁移设计没有考虑断点续跑,程序被迫中断以后,不得不重头开始跑,所以程序上要支持重复执行的幂等性。基本做法就是写入之前判断是否已经写入过啦,这一点非常重要,万一重复写入了,很有可能引发其他的数据问题。

5. 脚本执行进度可监测

从发现问题到迁移程序执行完毕,整个过程都要时不时回复业务方或者上司的灵魂拷问:「跑完了吗?跑了多少?进度如何?」。由于这次实现的程序只记录了插入信息的日志,而且数据源是分表分库多实例的架构,无法通过SQL语句来查询对比分析出迁移进度,每次的问都没法准确回复,让我越发焦躁。

因此在程序真正开始跑之前,需要考虑记录哪些关键信息,其实统计进度的维度不一定要细到记录的粒度,也可按照表的粒度来统计,粗略估算出整体进度即可。

当然,数据量如果不大,自己预计能在几十分钟能执行完的可不用考虑这一点。但如果预计要跑数小时的话,建议要考虑整体进度的监测,这样不用每次被问到都只能支支吾吾地回复:还在跑,没那么快。

6. 选择合适的脚本语言

这一次用了Python实现迁移程序,整体数据量预估有接近10亿,在跑数据时也怀疑过是不是用go写这个程序可以跑的快一点。但仔细分析瓶颈其实在于数据库,不能把并发提到太高,所以选择合适的语言时,语言性能不是最重要的,更重要是:个人熟悉程度、友好的并发支持。

7. 总结

上面描述过程的问题,可能有些情绪,毕竟背锅了,但自觉不是全部是个人的问题。也不想回头调整文字了,就这样吧。自己整体做的也不是很好,核心问题是对迁移数据的事情经验不足,遇事不够冷静。不怪别人,下次争取做的更好吧。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,012评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,628评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,653评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,485评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,574评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,590评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,596评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,340评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,794评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,102评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,276评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,940评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,583评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,201评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,441评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,173评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,136评论 2 352

推荐阅读更多精彩内容

  • 大数据集群迁移这件事,不知道有多少同学做过。我说的不是把一个集群的数据备份到另一个集群上。我指的是整个数据平台与大...
    彩色蚂蚁阅读 1,947评论 0 5
  • feisky云计算、虚拟化与Linux技术笔记posts - 1014, comments - 298, trac...
    不排版阅读 3,842评论 0 5
  • 在“数据库优化方案(二):写入数据量增加时,如何实现分库分表?”中我曾经提到,由于 MySQL 不像 MongoD...
    逗逼程序员阅读 319评论 0 2
  • 今天学习课文《项链》,昨晚已经布置预习,要求把课文读熟。 今天揭题完毕,带领孩子们齐读“项链”两个字。然后问孩子们...
    江南丹橘阅读 832评论 0 0
  • 综合教程 1.我从本篇文章中学到的一个重要概念: 别看一个成功的作家是多么的辉煌,其实他们经历过你所没有过的困难与...
    应数二班王秀磊阅读 237评论 2 0