写点什么

一次做数据报表的踩坑经历,让我领略了数据同步增量和全量的区别

  • 2022 年 8 月 03 日
  • 本文字数:2739 字

    阅读完需:约 9 分钟


嗨喽,大家好,我是创作 i 新人,新时代新的农民工小赵,在今年的七月结束了大学生活,目前在一家大数据公司做开发。对于初入职场的同学来说,在实际的工作开发中会遇到各种各样问题,将问题沉淀、输出、总结,才会让后面的路走的越来越轻松。那么,接下来我会通过以下五个方面进行分享。


一、背景介绍


首先来说一下此次问题的一个背景,我是在去年的 12 月已经进入公司进行实习了,刚进入公司避免不了各种各样的学习,学习公司产品、技术、体系架构、企业文化......。进行了两个月的学习后,我迎来了第一个公司内部的项目,和同事一起搭建维护一个内部使用的工单系统。换句话说,就是优化各个职能岗位做事流程的一个系统,可以在每个流程节点看到对应同学的一些动作。今年 3 月底试运行,5 月底正式上线。


随着内部同学的推广、系统的不断优化、各个同学的配合,在工单系统试运行一段时间后,使用的同学就越来越多。领导有一天突然找我说:”小赵啊,工单系统做的不错,值得表扬啊,嗯。。。斯。。,现在想让你基于工单系统再做一个工单报表系统怎么样呀“。我说:”好。。好的领导“。话音刚落,我就百度了一下”什么是报表系统?“,百度是这样说的:”将计算机技术与会计报表编制方法相结合设计出专门用于报表数据处理的软件。报表系统是用于统计报表制作及报表及数据填报的企业级报表分析软件“。当时看完我就明白了,哦,原来是这样,开始搞!!!



二、问题概述


介绍完背景后,接下来回顾分析一下当时出现的问题。


首先,因为工单报表系统是基于工单系统来做的,所以报表系统接的数据源是工单系统的,所有的数据保存在 MYSQL 数据库中。那么,第一步就是将工单的数据接入到报表系统中,此步操作放到了前端视图中,只需要在页面上对 MYSQL 信息进行配置,元数据就可以加载进来。配置完数据源后,紧接着有一步操作就是配置数据是全量更新导入或者增量更新导入,当然也可配置按时间周期性,比如:每天的凌晨两点刷一次数据。换句话说,就是设置一个时间节点去泡一个定时任务。当时我是第一次接触到这两个技术名词,我询问了周围的同学。经过一番强有力的交流之后,我所悟到:

  • 全量导入:定时的将所有数据更新一次,然后重新进行导入。如果数据量不大的话,这种方案就适合,但是考虑到,如果以后数据量庞大的话,这种方案效率不高。

  • 增量导入:数据库中的每张表都会有一个更新时间的字段,如果数据有更新,只需要根据更新时间的字段,将最新的一条数据拉过来,然后覆盖掉之前的数据,这样的好处就是,数据量不会变得很大,不会有冗余的脏数据产生,感觉效率挺不错的。

当然,以上只是我自己的理解,对比下来,如果长远的看待的话,觉得增量导入会比较好,然后我就根据自己的感觉,勾选了增量导入


就这样,报表系统平稳的运行了几天后,在某一天的上午,小王同学看完报表统计数据后找到我说:“小赵啊,你们做的工单系统听牛 X 的,都提了两千多个单子了,大佬,强的很!!”。当时听完自己心里还窃喜了一下,还真觉得自己牛 X。冷静下来思考一分钟觉得不对劲,这玩意儿是给我们内部使用的,难道这玩意儿这么好用,突然这么多同学都开始用啦?怀着既开心又心慌的心情,上到报表系统的数据库查了一下,如下图所示,果真,两千九百条数据!!!现在回想起只记得那天上午,阳光特别明媚,笑容如此的灿烂。



到了那天下午,工作群有个哥们工单群里面反馈出现了一个 bug,领导在群里 @我让我迅速处理一下。当即给群里回复了一句“交给我,你放心”。然后我二话没说,三下五除二就把 bug 给解决了,不知道为何,那天下午的阳光更加的明媚起来了,笑容也更加灿烂。解决完后,闲着没事就去工单系统的数据库溜达一下,

只见我熟练的在编辑器中敲下那行代码,,

select count(*) from xxx ;
复制代码

自信的点击运行,结果如图所示,oh my god!显示只有八百多条数据,不知为何,那天下午的天起逐渐下起了小雨,笑容逐渐退却,留下的只有硕大的眼睛和长大的嘴巴。重复执行了几次后,我悟了,数据同步出问题了,报表系统数据冗余,产生了脏数据



经过反复的推理,验证,最后我从工单系统中拉出一条数据,在报表系统中单查这一条数据,结果如下图,一条数据在库中重复出现了七次,总共八条数据。刹那间,突然想起来,报表系统同步工单数据从开始到那天刚好八天,也就是说,这条数据每天都同步了一次且没有被覆盖。紧接着回想起当初进行数据同步时,使用的增量导入,当时的理解是:如果数据有更新,根据更新字段,每天定时将最新的数据同步,然后覆盖掉旧的数据


结果猜测:

增量导入数据,如果数据有更新,就会定时将新的数据进行同步且旧的数据依然存在,不会被覆盖。


真正的结论到底是什么?增量导入数据是如何同步的呢?与全量导入的区别到是什么?接下来就聊聊全量和增量。

三、聊聊全量和增量


在了解全量和增量之前,我们先聊聊什么数据同步?

  • 数据如果保留多份或者多处使用,就会存在一致性问题,解决一致性问题就需要同步,

  • 同步分为两大类:全量和增量


换句话说,就是如果一个数据源需要被多个系统所使用,或者需要备份在多个机器中,在使用或者保存的过程中数据有可能发生后变化,所以会导致数据不一致的问题,这时就需要进行数据同步,确保数据的一致性


那什么是全量?

  • 每天定时(避开业务高峰期)或者周期性,全量把数据从一个地方拷贝到另外一个地方;

  • 采用直接全部覆盖(使用“新”数据覆盖“旧”数据);或者更新逻辑(覆盖前判断下,如果新旧不一致,就更新。


什么是增量?

  • 增量的基础是全量,就是要使用某种方式先把全量数据拷贝过来,然后再采用增量方式同步更新;

  • 抓取某个时刻(更新时间)或者检查点(checkpoint)以后的数据来同步,不是无规律的全量同步。


他们之间有什么区别呢?

  • 全量是有规律的、周期性的;增量是无规则、无规律的;

  • 增量的基础是全量;

  • 全量会让新的数据覆盖掉旧的数据,而增量无法覆盖旧数据;


回想一下之前对增量的理解:如果数据有更新,根据更新字段,每天定时将最新的数据同步,然后覆盖掉旧的数据。显而易见,全量才会覆盖掉旧的数据,增量做不到,这就导致了数据从工单系统同步到报表系统后,随着工单系统数据更新,报表中数据原来越多。

知道了问题的根本原因后,当机立断切掉数据源,使用全量重新进行同步,数据恢复正常!



四、总结


数据,已成为了我们日常生活中必不可少的组成部分。无论是做逻辑复杂的业务系统,或是做海量数据的大数据处理系统,究其根本,也就是在和千千万万的数据在打交道。数据同步在我们的实际工作中用的是较为频繁的,做好各系统间数据的同步或备份,懂得在合适的场景中使用合理的技术,对我们来说非常重要,这样会极大程度的降低人为的成本,提高日常工作的效率。本此分享的内容到这里就结束了,愿大家在工作中减少数据操作带来的困扰,此次文章整体的内容较为浅薄,希望对大家有所帮助!!



发布于: 刚刚阅读数: 4
用户头像

该来的总会来,或迟或早。🎈 2022.06.13 加入

有JAVA方面3年学习经验,csdn/51cto等平台优质作者,华为云云享专家、阿里云受邀专家博主,擅长JAVA,大数据等方面的技术等。

评论

发布
暂无评论
一次做数据报表的踩坑经历,让我领略了数据同步增量和全量的区别_数据同步_百思不得小赵_InfoQ写作社区