00:00
他记得一直羡慕。就目前咱现在能不能保持技术一致性,为啥?啊,但是我去重了呀,Mid我去重了呀。啊,提交的时候挂了是吧,保存到哪。保red第二次保存哦,保存red非常好啊,就是说咱们现在呢,对吧,大家能想到这一点,就目前呢,这里其实有一个bug,就是目前我现在呢,在咱们这里边对吧,有一个bug对吧?但这个bug的处理方式是什么呢?就是我们现在在这里,其实他在去我们这执行的时候同学们对吧,就是这样,就是我们现在啊在执行的时候对吧?那么我们现在呢,是这样的,首先呢,我们对数据进行处理,然后呢,修改偏移量,整个感觉啊这个流程其实没问题的,对吧,但是呢,咱们在这数据处理的时候首先干什么,是不是去重了呀,那假如说啊,咱们驱除怎么怎么去重的,你是不是往专辑里边来放了一个数据啊,比如说mid的这个18我已经放进去了,你刚往ready放完,还没往ES保存的,那么这个时候对吧。
01:17
挂了,就你刚把它放到咱们re里边去,就你刚把它放在dau这个set集合面去,对吧,就相当于说相当于这个设备我是不是已经对吧,这个这个访问过来了,已经登录过来了,对吧?那么以后他再登录的话,是不是咱就不再就就给它记住它了,不再统计的了,是不相当于给它过滤掉来了,对吧?但是这个时候呢,我还没来得及把ES保存呢。对,我刚我刚去重,我刚去重还没有ES保存呢,结果我这个Spark面这个程序这个进程就垮掉了啊,那么这个时候咱们应该怎么处理呢?注意啊,这个时候如果说咱用这种话处理不了,就这种话其实可以列你存在一个bug。对吧,那么如果说要解决的话,同学们,那咱们可以提供一种解决方案,怎么做呢?就说我现在不是用set吗?对吧,我可以换一个换z set。
02:11
这个z set和set,它其实实现的功能是完全一样,只不过多了一个什么呢?是不多了一个控,对,多了一个咱们排名嘛,对吧?哎,那我现在在驱重的时候,那我往里放什么呢?Mid这个咱们也得放,那么另外一个杠放什么呢?放时间戳啊放时间戳。然后接下来,那么如果说啊,那么你现在这个东西故障了,那大家想一想,如果说你当前这个出现故障了,那你不得做故障恢复啊,不是说大家想的那样,说老师我现在故障了,然后一起统程序,这个程序就没了,对吧,那不现实,假如说我现在有的时候我数据库对什么时候出现故障了,对吧,你不要说全靠咱们这个程序,或者说它自动去解决,我现在呢,如果说这会出现故障了,那怎么办,对吧,那我现在这里我做故障恢复了,有可能我的数据丢了。
03:00
对吧,如果的数据丢了,那如果说数据丢的话,那我这个时候我是不是让我程序启动的时候,对我是不是应该把这个程序把这个数据重新的去帮我消费一下呀,那怎么办呢?那你可以这样对吧,你现在在咱们这个re里边是不是记录了一个这样的一个时间戳,但是呢,你的时间中可能到我们现在啊,比如说是10:47,然后呢,可能是55秒,但是呢,你到我们这个ES里边一查询,它最大的时间呢,刚到10:46:30。就你这个时间说已经到了55秒了,对吧,但是呢,你的ES呀,它刚到哪,刚到30秒,那说明什么,说明你这个数据保存到我们这专业意思了,但是没网ESD保存你这个东西肯定丢了吧,对吧,如你要如果要有的话,你是不是应该把这东西拿到对吧?那所以说怎么办呢?也需要手动的去把咱们这个ready中大于ES它最后的时间的这个数据给我删掉。
04:03
啊,你需要把这些东西给我删掉,去手动的去处理一下啊吧,这也是故障恢复啊,这个故障恢复不错,能想到这一点啊,能想到这一点对吧,好了,那么咱现在呢,这里对吧?说么,除了这一点之外呢,那大家想一想我们现在这种方式,呃,基本上这个舌头提和偏移量我们搞定了,那密等性呢。就是如果说把刚才那个抛开的话,对吧,我现在的密等性的,因为我们刚才我这种方式的话,我没有办法演示说我现在挂掉了,所以说其实和这个是一样的,对我给大家说解决方案对吧,那如果说我现在密的性列都怎能保证了吗?因为咱们这里是不是已经去重了呀,对吧,所以说呢,咱们现在去这种方去密等器,可以说如果说啊还不放心的话,对吧,还不放心那怎么办呢?我们的以来search本身大家注意它是不是的密性操作呀,对吧?那么如果它密性操作的话,怎么保证呢?咱们想一想,我当时在给大家讲,我们来search的时候有一个put对吧,然后接下来那么你往里面放这个什么呢?这个是我们的索引,然后接下来这个是我们的类型,然后接下来再加了一个是不是的ID啊,都要加ID,你是不把ID给我传过来,那是不是就能够保证这个命令性了,对吧?Put的操作它本身其实是我命令性操作,对吧?哎,那么这个ad咱们现在传了吗?同学们。
05:25
来看一看,咱现在在操作al的时候,我们现在呢,这个ID我们传没传往哪看呢?对吧,找到我们批量插入这个操作啊找到我们现在呢,这个批量插入对吧,这块操作对吧,然后接下来那么这里我们的ID是没传呀,那没传的话,其实它会怎么办呢?他要帮咱自动对吧,是不是生成一个对吧,你看咱们现在在这里,它是不是自动的帮助我们对吧,来生成我的ID啊对吧,那这块呢,那他没办法保证命令器。对吧,这种是没法保证密的性,比如说同学们,我现在把我这个red里面的数据清空啊,把red数据清空,然后我再去执行,它还会往ES里插入,对吧?因为ID不一样嘛,对吧,因为ID不一样对吧?哎,那我现在如果要保证密令器的话,那你就传ID过来呗,那么这个时候怎么传呢?对吧,那就来呗,我在保存的时候,对吧,你现在给我传的是不是一个集合,这个集合呢,是你当前这一个批次的我们这个日活信息对吧,日活日活数据你封装的一个价值对象对吧,那你别给我传单个对象,你传原组过来啊,你又传原组过来,这个原组包含什么内容呢?一个是string类型对吧,一个是类型的ID对吧,一个词类型的一个ID对吧,那么另外一个呢,是我们当前的对吧,这这这这个这个这个这个数据对吧,这个数据对吧?哎,那么如果你要这么给我传的话,那大家想一想,那我在遍历的时候,那么这块拿到的就不光是我们这个的要保存的这个样力对象了,这里面呢,它其实是个元组。
06:55
那这个第一个什么,第一个是ID对吧,然后接下来那么你再去保存的时候,你完全可以把这ID啊给我传过来,你完全可以把ID给我。
07:06
对吧,就相当于对咱们这个程序呢,做了一个优化对吧?原来这个东西什么,原来这里面其实呢,我的ID是自动生成的,现在我希望什么?我希望啊,你在叫我批量保存的时候,对吧?那么这个ID呢,你可以给我传过来对吧,那你原来你给我传一个对象,现在呢,对吧?在这里其实封装元组对象对吧,元组第一元素什么呢?就咱们的ID,那这样的话,我对结合器便利的时候,它每次便利得到元组对吧?那么我现在一个是我对象,一个是ID,那么咱把ID拿过去呗,对吧,那如果你这块这么改了,那你这里是不是也得改呀,对吧,这就报错了吧,同学们对吧?那这块怎么改呢?对吧,大家看我现在呢,再去调方法的时候,它需要传个集合,但是这个集合里边不是放单个对象啊对吧,这几个里边是不是应该放两个个放元组啊对吧?所以说你现在呢,把这有个改一下对吧,这里边应该是一个string对吧,然后接下来那如果这么写的话,那这回就报错了对吧,那怎么办呢?对吧,来呗,去改一改,对,有同学一看这个对没没头绪了是吧,这简单对吧,来背二。
08:06
这个呢,是有一个dau in four对吧,这样的一个对象,然后接下来,那么咱们现在呢,给返回的应该是一个元组对吧?应该返回元组一个呢是Du in four点我们现在mid,这个mid咱们是不是可以拖它来进行去重了,那第二个呢,就是我们d in for对吧?那第样的话,咱们现在再返回的时候,它给你返回的这个集合,这个集合呢,里边封装元组,元组包括两部分,一个是m mid,一个是我当前它所对应的这个样本对象,然后接下来咱们在执行我们的一个操作的候,对吧?那么它本身对吧,批量操作的时候,是不是直接在咱这里把ID给指定了呀,对吧?那么这时候它其实呢,也可以保证密等性,对吧?那么咱现在呢,来试一试啊同学们,那么这个在执行的时候,这个ID呢,应该就和你的mid是一样的对吧,和你mid一样对吧?那么我为了去看咱们的效果,注意啊同学们,我在这里呢,我把这个东西正好刚才这个也写错了对吧,我现在呢,把这个东西发烧一下对吧?然后接下来来到咱们这个来试里边。
09:06
啊,然后接下来我现在有一个1024对吧,这天的把这个呢,我给你delete一下对吧?Delete啊把这个索引呢,我给你delete对吧,然后接下来那么咱们现在呢,再去我们这个查询,那么如果查询的话,现在只有我们23号的,对23号这个ID是我随机生成的,但24号一会儿呢,那我要看一看。应该是我们指定的,来我现在呢,运行我的程序对吧,来这里预习一下。来是吧,那么接下来呢,咱们来生成数据对吧?来去生成我数据看一看这块吧,确定都没了是吧?啊这个这个生成数据这里边这个偏量已经有了对吧?然后接下来,那么咱现在呢,在这里去生成一下。好,那么它呢,成功之后呢,那大家来看,咱们现在这个也会改,是不是开始向我这里保存数据了呀,偏移量是不是也开始发生变化了呀,对吧,你看原来701像705对758758对吧,它也一直在变化对吧,它一直在变化对吧。
10:23
好了,那咱们现在呢,来看一看对吧,那我当前呢,咱们这个里边现在多少条了啊,48条49条。啊50条对吧,那么这个50条完事之后呢,那说明咱们现在呢,其实把这保存也差不多了对吧,好了,那我现在呢,把这个停一下,就不要再资料不务生成了,把这个呢停一停,然后来到哪呢?来到我们现在这个来search里边对吧,那咱们现在就查询查询24号的数据对吧,24号数据50条吧,然后你看这个ID是不是就不是我们现在对吧,它自动生成了,所以咱们指定的m midd了,对吧,其实我们现在注意啊同学们你保证密等性这个操作呢,不唯一,其实我们现在去重,其实是不是也可以保证密等性对吧,然后我现在呢,我不去重,其实我可以在咱们这这这ready这这里边我不不管不用ready驱重,对我直接我在保存,我直接保存对吧,但是呢,注意那你得根你的业务来,如果你不用ready驱重的话,那咱们这里我是不知道这个时间呀,对吧,你想一想咱们这里对吧,我现在如果说不用ready做驱虫的话,那么你现在呢,再往这里保存的话,你说自己得判断时间。
11:38
对吧,你想想我这我我这保存保存谁,我是保存咱们最早的一次登录啊,对吧?诶所以说你肯定要对时间呢,要做一个我的判断的,对吧,那么这两种去保证密性的一个操作啊,如果说你抛开业务逻辑不讲,对吧,那么它俩区别在什么地方了?大家想一想,如果是ready的话,这个数据要是存在的话,咱们还会往里面添加吗。
12:00
不会了,但如果是al lesser的话,这个数据呢,要存在的话,他会干什么呀?他把原来的替换对吧,他把原来的给覆盖掉对吧?所以说咱们当时讲po的时候,其实它叫什么操作,它其实叫替换操作,好了,这是关于什么呢?这是关于我们现在它的一个驱虫,对吧,这是关于驱虫,那么如果说你们在去咱们这个这个企业里面用的话,对吧,根据你们实际情况来进行选择,对吧,来进行选择对吧?好了,这是关于我们现在他的一个精准一次性消费,对吧,咱稍微休息一会儿回来呢,给大家稍微总结一下,对吧,稍秀一下。
我来说两句