00:00
好,那用户行为数据的这个同步我们就完事了,哎,已经把这个topic-log啊,这topic里的数据我们给它发送到哪了,哎,发送到HDFS了。然后我们的离线数仓,它是不是就可以消费这里的数据了啊,可以从为次DFS当中,哎,漏的数据啊,漏的数据进来就可以计算了,好,那么关于计算的这事,我们在离线输仓这来再去讲解啊好,那接下来我们看看业务数据的同步,哎,业务数据我们是在哪啊啊行,我们再来到这个架构图看一看啊,业务数据啊,我们是存放在my circle当中,然后呢,我们已经通过Maxwell把数据给它导入到哪了,哎,也给它采集到我们的卡法集群了啊,所以说我们是不是直接从这个卡法集群来消费就完事了呀啊,我们依然啊,也是通过一个flow来做这个事儿啊好。
01:01
那接下来我们看一看这个业务数据采集我们是怎么定义的呢?先来这看一看啊,先来看一看业务数据采集的一个定义。在哪儿呢?在这儿呢?啊,业务数据同步啊,不是业务数据采集,是业务数据同步的一个定义,我们看看啊,那这个业务数据同步呢,我们是怎么同步呢。那如果说针对于离线数仓的话啊,我们一般呢是每天,哎是不是每天计算一次,哎,按天来进行计算的,按离线数仓,那实时数仓呢,实时数仓是我来一条数据我就要计算一条,来一条数据我就要计算一条,那对于这个实时数上来说,你看啊,我这个买SQL的业务数据。MYSQL你看啊,我来一条,诶我这要计算一条,那怎么办呢?我们通过Maxwell嘛,哎就能给它同步过来,哎同步到我们的卡不卡,那不卡呢,进而再到我们的实时数仓,好通过麦X来做这个事儿,那离线出仓啊,它一般都是按天来计算的,那按天来计算的我们是不是就没有这种实时要求啊,我们呢,就可以不用Maxwell这个链路啊,可以通不通过mawell这个链路,我直接从MYS。
02:23
哎,来给它采集到我们的这个离线数仓是不是就完事了啊,也可以,那我这边是不是也行啊,我数据已经到到这个通过mal到卡普卡了,我通过卡普卡把数据过来,哎,是不是也行啊,那这两种第一种和第二种方式,我到底用谁呢?我们来看一看。他是怎么说的啊,他说这个业务数据啊,也是数据仓库当中的正要来源,那如果说离线入仓,我们每天定时定点的从业务数据库当中把数据抽取出来,哎,来进行这个统计分析,那我们在做同步的时候,我们通常啊是按天来进行同步的啊,那计算呢,也就是按天来进行计算,好那呃,按照这个方式来说,我们既然是按照天来进行计算,所以说我们是不是每天同步一次就可以啊,哎,我们没有必要非得用实时的同步这个方案,那我们到底用哪一个方案呢?啊,我们看看啊,数据的同步策略,哎,这叫什么数据呢?业务数据的同步策略,我们一般是有两种方式啊,离线数仓的这个啊,而且是离线数仓的业务同步数据啊,我们一般呢,也是有两种方式,你看这上面我们讲的是实时数仓的同步策略,那现在。
03:44
讲的是离线数仓的同步策略,刚刚说的是用户行为,现在说的是业务数据同步,那离线数仓的业务数据同步。有几种同步策略呢?啊有两种,一个叫做全量同步,还有一个叫做增量同步,好那那不对呀,那我们对于买circleq来说啊,你看看啊,我们这个买circle全量数据什么意思呢?就把这个买circle的数据我全部的给你拿过来呗,那增量同步呢?哎,我新增的数据我给你拿过来,好那我们买circle是不是还有一个变化的数据啊啊还有或者这个删除的数据,我们是不是依然也要同步啊哎,那增量数据里啊,它就包含我们变化的数据了啊哎,我们统称为叫做增量同步啊准确的来说啊,我们呢,给它做了一个划分,哎,一个叫做全量同步,一个叫做增量同步啊那为什么要这为什么要使用这么两种呢?我们看一看啊,那全量同步啥意思啊,就是将业务数据库全部的数据拿到我们数仓当中,那这个呢,它既能保证两侧的数据。
04:54
一致,而且这个方式它还比较简单嘛,它只需要用一个select select select星装表就完事了。
05:05
啊,就是这么一个逻辑,通过谁来清方表,把所有的表的数据我全都给你拿到我们的这个离线输仓就完事了,那为什么要用增量的数据呢?啊,全量数据比较简单,那为什么要用增量增量同步呢?哎,增量同步啊,我们看一看啊,它是每天将业务数据库当中变化的数据同步到数据仓库啊,并且采用什么呢?增量的方式,也就是我变化的数据我给你同步过来啊,你看我这一个表当中,这些是之前的,哎,我只增加了一条,然后我把这一条给你同步到离线数仓,那现在我们什么时候用增量,什么时候用全量呢?啊啊,那这我们稍后再来分析,那这呢还有两个图,一个叫全量同步,一个叫做增量同步,啊我们看看这两个图,它都啊,什么叫全量同步,什么叫增量同步,哎,其实增量和全量,我觉得大家也应该能理解这些概念了啊,也理解这个含义,那我们还是得看一看。
06:04
啊,关于这个日期啊,你看2020年6月14号,我们这里有两条数据啊,插入了两条数据张三和李四,那对于全量同步来说,同步到出差,6月14号的数据,我们是不是要给他全部的拿过来呀?啊,你全量同步吗?那好了,那接下来6月15号了,我增加了一条数据王五啊insert的一条,那6月15号我同步应该是什么样的呀?哎,全量同步它这里有几条啊?是不是应该有三条了,张三李四王五啊,全程同步,那接下来6月16号我再次插入两条数据,那我6月16号数据同步过来应该是什么样的?哎,是不是有五条啊,啊,所有的数据都过来吗?哎,这个就叫做全量同步好了,这个过程大家应该都明白,那现在有这么一个事啊。我现在已经同步到6月16号了。
07:02
啊,已经同步到6月16号了,你说6月15号以及6月14号的数据,我们还有没有必要保留呢?6月16号已经有一个完整的数据集了,哎,你看它完全是跟6月15号和6月14号一致,它已经有一份完整的数据集了,你说我们还有必要保留14号和15号的数据吗?哎,想想。那表面上看是不是没有必要保留了,那6月15号,6月16号已经有一份完整的并且是最新的数据了,那表面上看前面两个是不是就没有用了,那我就给它干掉呗,哎,不是的啊,你看前面两个有没有用了,还是有用的,那我就想知道我这个数据的变化,你看我这个ID呢,李四,它什么时候变成李小四的?哎,我想知道这个数据的变化,那我还是要依靠历史数据的啊,所以说历史数据啊,我们啊不要去给它删掉啊,为什么呢?因为这个磁盘的空间它是比较廉价的,那数据的价值它是比较昂贵的啊,所以说全量同步,关于这个数据啊,我们不要删掉,历史的数据我们依然要给它保留,这就是为什么我们的have要用分区表,而且是按天分区的这么一个分区表,那每天存储的就是我当天同步过来的数据好。
08:24
再来,那接下来我们看看增量同步,增量同步。6月14号两条,张三和李四,那6月14号我们增量怎么同步啊?哎,是不是把这两条拿回来呀,6月14号新增了吗?那再来6月15号。我增加了一个数据,王五,同时这个李四啊,他变成了他的儿子李小时了,那么对于6月15号的增量数据来说有几条啊?是不是就只有两条啊,一个李四,一个王五,那张三呢,我们是不是就不用同步了啊?那接下来我们再看看6月16号增加了两条啊,赵六和田七,我们看一看,那6月16号很显然应该也是只有两条数据吧,赵六啊和田七,好了,那么这个就是我们增量的这些数据啊,那增量和全量现在我们能看出来他们各自都有什么优缺点呢?
09:21
哎,啊,各自有什么优缺点,是不是应该能做出一个简单的对比了啊,增量同步它的优点是什么呀?它不会存储大量的这个重复数据吧,你看如果说是全量的话,我这个张三是不是存储了很多次啊,那这个张三存储了三次,那对于那对于这个增量来说啊,张三只存储了一次,哎,它不会进行这个重复的存储啊,它都是各自有优缺点的,OK,那这个地方我们暂停一下啊啊OK,那接下来我们看一看,那我们到底应该是选择增量同步还是全量同步呢?那在我们书上当中一共有46张表啊,这46张表我们哪些选择增量同步,哎,哪些又选择全量同步呢?那肯定有些选择增量,有些全选择全量,那既然我们想做选择,那首先我们就要知道增量以及全量它的一个优缺点,我知道了它的优缺点之后,那。
10:22
那我是不是就知道他俩,哎,我们应该选什么了,那我们来看一看啊,那它们两个的优缺点在哪呢?我给它往下一点好。看看啊,那首先我们看一看全量,全量同步它的逻辑比较简单啊,它的优点是逻辑比较简单,为什么说它的逻辑比较简单呢?啊,想想全量同步顾名思义就是把我们买SQL表当中的数据全部同步过来,那也就是我刚刚所说的,我直接用一个select星from表就完事了,哎,全部的同步过来,那它的缺点呢?
11:00
在某些情况下效率比较低,那在什么情况下效率比较低呢?哎,比如说某张表的数据量非常大啊,这个表你看啊,我这表它有多少条数据呢?有10亿条,哎,有10亿条,但是我每天只增加一条啊,那好了,那每天只增加一条,我最终把这个这一张表的数据全部同步到我们的离线数仓,你看啊,我第一天我得同步多少条,是不是10亿啊。那第二天我再变换一条啊,10亿依然是10亿啊零两条吧,那第三天1000000003条,那每天都要存储十多亿的数据,而且绝大部分都是重复的,它不变的,那么这种情况的表,我们再用全量来做。怎么的,是不是就不太合理啊,因为它变化的这个频率比较低下,哎,那这个全量呢啊,它做起来就不太好了啊,用全量来做,那这种表怎么办?哎,这种表我们就要用增量来做了呗,好。
12:09
那接下来我们再看一看增量同步啊,增量同步他说了效率比较高啊,你看它的缺点是不是就是它的优点呢?它的效率高,无需同步和存储这个重复的数据。啊,它不需要存储这个重复的数据,那它的缺点呢,我们看一看,它也有缺点,还就是逻辑啊,比较复杂啊,它需要怎么的呢?将每天的新增以及变化的数据从原来的数据进行整合,才能得到一份完整的数据集吧,你看啊,假设我每天都要统计啊,我当前这个网站,哎,总的访客数啊,就总总的成交额吧,啊,总成交额我要统计,每天我都要统计一下什么呢?每天都要统计一下近十年的总成交额,那如果说我用增量同步的话,我是不是要把之前的这些统计的啊,每天的数据都拿出来呀,拿出来之后我再和今天同步过来的这个。
13:15
给你做一个相加啊,那这样我才能计算出一个总成交额,每次我都要用今天的这个啊,同步过来的数据,再加上历史同步过来的数据,好,那这事如果说要用全量同步来做的话,我每次把历史的数据全部拿过来,我直接做一个sum就完事了呗,哎,你看这是不是就非常简单呢?啊,那所以说全量同步和增量同步它们呢,都各自有优缺点。那我们在生产环境当中到底应该怎么选择呀,我什么时候选择增量同步,我什么时候选择这个全量同步呢?好,那这时候我们就要想一想啊,你看无非就是这么几点嘛,大表。啊,我这个表非常大啊,这么的吧,总结一下。
14:01
嗯,总结一下啊,无非就这么几个选择嘛,大表。大表啊,变化多对吧,大表啊这么的吧,大表,然后小表,哎,算了吧,大表变化多啊,然后再有大表变化少,那小表。哎,变化多,然后小表变化少对吧,无非就是啊这么四种方案,那大表它变化的多的话,你看啊。我这一个表每天是10亿啊,一共有十条数据,每天变化9.9亿,那你说这种我要是用增量同步来做的话,我这个增量同步每天要同步9.9亿的数据啊。
15:07
是不是同步起来比较多呀,我倒不如我每天都把你这10亿全量同步过来了。哎,所以说大表变化多呢,我们通常情况下会选择全量同步,那再有大表变化少的,这是我们刚刚所说的吧,你看11只变化一条,那么这种情况下我们就要增量来做了啊,那只变化一条嘛,我如果说全量的话,有大量的重复数据啊,这个就要用到增量了,好,那你再有小表变化多,小表变化少,那这时候我们想想,那小表我们在这呢,有这么一个表,好我们看一看啊,在我们的表当中有这么一个表。往下看啊,有一个什么表呢,省份表。那这个省份表我们之前也说了有二,我们国家有23省,四个自治区啊,四个直辖市,五个这个自治区,还有两个特别行政区,它们几个加一起等于多少条啊,等于34啊,那最终我这个表里一共就有34条数据,好了,那这是一个小吧,相对来说是一个小表,那它这个小表变化的多还是少呢?34条数据,34条数据我可能一年我都不会变化一次了,这是省份的省份,那我们什么时候能看到省份变化呀,可能有生之年我们都看不到,哎,我们在不考虑政治的情况下啊,可能有生之年我们都看不到这张表发生变化啊。
16:40
那这个表它既然不变的话,你说我们用增量同步还是全量同步合适呢啊,你这张表34条几乎没有变化呀,那我是不是应该用增量同步啊,哎,这样节省我们存储的空间呀,对吧。是不是没有问题啊,啊没有问题好,那但是我们这么计算一下啊,你看34条数据。
17:04
我算你一条数据1KB好吧,1KB,那其实没有这一条数据就是0.1KB都不到啊,我们假设就是1KB34条数据等于34KB啊,34KB行吗?那我每天要同步多少数据量呢?同步34KB的数据量,好那100天呢,3400KB啊,100天是三千四个100KB,这是3.4兆,3.4兆行,我们取个子吧,四舍五入算你三兆100天是三兆一年呢。再乘以一个三呗,啊,乘以一个四行吗?一年12兆。没问题吧,一年一年才存储12兆的数据啊,那你觉得我每天全部都同步过来。啊,我每天给他做一个全量的同步,有问题吗?也没有问题吗。
18:01
啊,所以说你像这种表啊,小表你变化的少的话,哎,我们呢,依然也是来用全量同步,为什么?因为你变化的少啊,哎,我即使给你全部过来,我存储一年也就是12兆的数据,我为什么还要用增量同步呢?你增量同步它逻辑比较复杂,而且它的这个性能也不太好好,那所以说你这个小表,我不管你是变化多还是变化少,我都用全量来做啊,都用全量来做啊,都用全量,看你变化的少啊,依然用全量,小表你变化的多变化少都用全量,那到这我们通过总结发现啊,其他的都用全料,那只有这个大表。变化的少的,我们用增量来做啊,OK,那这个方式是什么呢?只是在通常情况下啊,这个只是叫做通常情况下,并不是所有的情况都是这么选择的,这大部分情况下我们会这么选择,那有些时候也不是啊,你看这个。
19:04
这个啊,啊,那我们看看我们来做全量和增量的这些表,全量呢,我们总结出来了这些表,增量呢,我们总结出来了这些表,那我们看一看全量和增量都各自啊先表面上我们看一看这些表他们应该都有一个什么样的这个特征啊,为什么这些用全量,这些用增量呢?啊首先全量这边这都是什么呀,分类哎,你像这种相对来说变化的是不是都比较少啊,我们能每天说我都增加一个分类吗?那也不能啊,我每天我增加几百个分类也不能啊,那为什么我们还要用全量呢?它变化的比率这么低,因为他们的数据量比较少,哎,我全部给你同步过来,也没有多少存储空间,好,那再有这边你看看。这什么呀?订单相关的表比较多吧,那每天我们订单量是不是比较大呀。
20:01
OK啊,所以说啊,它相对来说,哎,订单表它变化的是不是比较多呀,那你像这种我们用增量同步来做就比较合适啊OK。那左边的呢,其实一般就是呃,用来做全量同步的啊,一般叫做维度表,哎叫维度表,我们叫做维度表,那增量表呢,我们叫做这个事实表,那什么叫维度表和什么叫事实表,我们在做数仓建模的时候,哎,会给大家来进行一个详细的讲解,OK,那这有一个特殊的表,你看car in for,这叫什么呢?卡宾缝哎,加构表,那这个表我们既需要一个增量,也需要一个全量,哎,那这个表呢,是跟我们的数仓建模相关啊,那这个表我们到时候啊,它有两个统计的方式啊,所以说我们需要这个两种,哎,两种同步,OK,那这呢先跟大家说一下,等讲完书仓建模,哎,这这个地方大家也就明白了啊好,我们知道啊。呃,全量和增量我们都有哪些表了?那接下来我们看看这个同步工具我们应该如何来选择呢?
21:07
哎,对于离线数仓,你像这种全量同步以及增量同步的这个工具啊,我们应该如何来选择,那对于全量同步来说,我们之前是不是说过这么一个工具啊,叫做data叉啊,哎,Data叉它呀就可以做全量同步,那它怎么做呢?它的底层就是select星from表,把数据啊从my circle给我们拿到哪啊拿到这个HDFS,好,那同样这还有一个工具叫做scoop scoop它能什么,它能实现什么功能呢?它也可以啊,通过select形from表的方式把数据通过来啊,它俩实现的功能是一样的。哎,这两个工具啊,实现的功能是一样的,都可以做全量同步啊,好,你看基于select查询的离线同步工具,那另外一种啊,就是Maxwell和al。
22:02
这是什么呢?基于数据库变更日志的,哎,基于我们买生bin log日志的啊,什么叫b log日志啊,干嘛的了,它是记录增删改的啊,它不会记录查询记录增删改的,哎这种实时的流式同步工具,那么现在我们就知道了,这两个是用来做什么的呢?是用来做全量同步的,这两个是用来做增量同步的,哎,这个是针对于什么呢?针对于我们离线输差来说的啊。这两个是做增量和全量的,那对于Maxwell和canal来说,他们两个是不是对实时数仓?啊,也有一些作用啊,来我们实时数仓的数据就是通过Maxwell和canal来从MYL当中读出来发送到卡卡的,所以说这个ma和canal它既应用于离线输仓,它也应用于实时输仓,哎,它有点交叉使用啊,那ma和canal啊,它们两个功能一样啊,都可以这个基于MYSQL变更日志来进行啊这个这叫什么呢?同步数据啊,OK,那到这我们现在就知道了,那如果说我们要做增量同步的话啊,离线数据的增量同步用它俩,那全量同步用谁呀,用他俩啊,OK。
23:24
那来吧,那接下来我们看看这有一个这个嗯,同步方案的选型,哎,增量同步方案的选型啊,那全量同步不用多说了吧,全量同步是不是没得选呢?全量同步只能用对叉,对叉或者是scoop SQ o OK,那接下来我们看看这个增量同步啊,增量同步呢,其实它有一些可选的方案啊,啊首先麦canal它是可以做增量同步的。但是我可以告诉大家,Data叉和scoop它依然可以做增量同步,哎,那有同学说不对呀,你这两个是基于select查询呢,那select形from表啊,那他怎么能做增量呢?好,我们来分析一下,呃,那首先Maxwell我们知道它是如何来做增量的了吗?啊,它要求我们的数据库啊,有这个记录变更操作的功能,也就是如果说my circle就是开启my circle的。
24:29
这叫什么呢?并烙日志好,那date叉它是如何来做增量查询呢?我们看看啊,那data叉它是怎么干的了啊,我们看一看,哎,我呢在这写一个词语句,它通过呀,Select星。From表,哎,做全量吗?那他怎么能做增量呢?那我们想一想啊,我们的数据我不管你是增删改查呀,我都是对这个字段来进行操作的,那你说我们可不可以这样啊,我们在表当中,也就是在我们的业务表当中,我增加两个字段,一个字段叫做c create time,那另外一个字段叫做update time up,好,Update time,那如果说我是新增加的一条数据,哎,我新创建了一条数据,那我对应的给create time增加一个值啊,你比方说我是今天的这个新增的数据,那怎么办?是今天新增的数据,那我就create time,我给你附上一个今天的时间啊,然后我查询的时候,我是不是可以这么查呀,From表,然后where create time create create。
25:46
Time等于谁呀?等于一个啊,等于一个今天,哎,甚至是更细的时间力度啊,这个你们自己控制啊,今天我就以按天来为统计了,你们可以按小时或者是时间圈啊,也可以,那update time呢,哎,我们是不是也可以这么干呢?嗯,And and,一个谁update time up update time。
26:15
哎,这个应该用on啊,或者呢,或者啊或者up time是不是也等于今天呢?那这个是什么意思呢?这个意思是不是就是我查询这个表当中,我今天新增的数据,以及今天变化的数据。那么这样它叫什么呀?这是不是就是通过select来查询我这个变化的数据吧,来查询我增量的数据嘛,对吧,那你变更日志是不是也这么干的呀?啊,他只不过是从这个b log日志当中记录的,那我呢,直接从表当中查询行不行呢?肯定能干这个事儿,哎,但是有这么一点啊,那如果说你看我们这次查询按天来来做的这个力度吧,你看它有一个什么缺点呢?它无法记录数据的中间状态,这个能不能理解呢?你看假设啊,我们呢,这个是什么时候创建的呢?是2020年。
27:18
杠零六杠146月14号创建的。好吧,那6月14号创建的我这个地方啊,我在6月15号我更新了一次。哎,这个是啊,把这个往下移往下移啊,往下移稍等,我在6月15号我更新了一次。啊,很不巧,6月15号又更新了一次,然后我又更新了一次,我在6月15号更新了一次,然后最终我在那个凌晨之后啊,我一查询我是不是能查询到啊,那我6月15号我进行了一个更新,但是对于买S表来说。我更新完了,是不是就只变成了一个最新的状态了啊,创建的这个时间肯定是都有的啊,创建时间这仨应该是都有的啊,创建的时间他啥都有。
28:09
啊,是这样的啊,对不对吧,应该是这样。OK,你看那6月15号我更新了三次,但是对于买SQ来说,它只有一个最新的记录啊,因为是表嘛,表只能存储一条,那只只有一个最新的记录,中间的状态它无法存储啊,这两个状态它是无法存储的,那么这个就是基于select查询来做增量同步的第一个缺陷,哎,这是第一个缺陷啊,这是第一个缺陷,那还有第二缺陷什么呢?它必须要求我们的业务表增加两个字段,一个是create create time,一个是update time,哎,啊,你像这个缺陷呢,我们有些时候还可以接受啊,毕竟。丢掉一些数据的中间状态,对于离线来说呢,它不会有什么影响啊,影响呢还是很小的,但是我在业务表当中增加两个字段,那这个代价就比较大,哎,它要修改业务表啊,那你修改一个表还好,那我们可能同步在生长过程当中,我们可能同步上百张表,那你这上百张表你都增加这么两个字段,那这样相对于业务表来说,它的代价是不是就比较大呀?哎,所以说这种方式啊,现在不好啊,哎,自从这种增量数据的这个同步工具,你像ma和al他们两个出来之后,那用select的查询来做增量同步的方案,哎,就已经几乎没有人用了啊,这种方案呢,就已经没有人用了,它的代价太大了啊,要对业务表进行一个修改,要增加两个字段,好,那么这种方式啊,我们就不采用了,那在我们的项目当中,增量方增量同步,我们就用这个,哎,用mace和canal来做,哎他俩呀,我们选择的是。
29:56
X。
我来说两句