00:01
那么再往下走对吧?那么再往下走啊,那我们说了,你要想实现日活呢,那么咱们现在其实有这么几个功能,一个是我们的卡斯stream呢,来消费卡卡数据,那么接下来你把数据读到我们的卡卡斯stream命中对吧?那么这个时候啊,大家想一想,你读到的这些数据其实是不是表示的是我当前对吧?咱们这个用户他的一次启动的一个情况呀,对吧,你这用户在哪一天对吧?然后呢,在什么时间,然后呢,他肯定的做了一次我们一个啊登录操作啊登录操作对吧?那我们现在呢,大家想一想,这个里边是不是有可能有重复数据,也就是说一天的时间啊,这个用户呢,重复的去启动那V应用了,对吧?重录的登录到我们现在的APP了,对吧?可能有这样的操作,那这样的操作,咱们在统计日活的时候,那这个数据呢,咱们是不是只取第一次登录这个数据啊,所以说呢,那我需要对咱们这个数据呢来进行。
01:01
行一个我们的驱虫对吧,所以说第二个我们接下来要做的操作干什么呢?我要对我们这个数据对吧,来进行一个我们的一个去除操作,对吧,来在这里。这要听一下啊,我现在把这数据拿到了我的打印输出,咱不打印输出了啊,那不打印输出干什么呢?那应该是对我们现在采集到的是吧,这个日志对吧?启动日志来进行一个驱虫操作是吧?那么也就是说把咱现在啊,多次登录的这个东西,如果用户已经登录过了,那么这个时候咱们现在的数据呢,我就不要了,不纳入我现在统计日活的范围之内,对吧?那么咱们的驱虫怎么做呢?怎么来实现驱虫呢?那大家想一想,我们其实咱们前面分析过,我是不是记录一下咱们当前用户的一个状态呀,如果你要记住状态的话,第一个你是不是可以通过咱们当前的我这个SPA stream本身给我提供的一些算子,比如说update by key去做呀,但这个东西有弊端,对,一个是对吧,操作起来不方便,那么另外一个是对吧,它本身把状态保存在咱们checkpot里边,这抄checkpot它是不是有些小文件的问题啊,对吧,这是一。
02:13
这个问题,那么第二个呢,说那我现在我不使用update by key,对我就把这个状态呢,对我放到哪,我放到my soql里面去,对吧,我放到my soql里面去对吧?哎,那么如果你给我生成一个咱们数据对吧,那么咱们只要是这个设备啊,他曾经咱在今天被登录了,那我现在呢,我就记录一下对吧,哪一天,比如说2020年10月咱们23号,然后接下来这里哪一个设备对吧,他做一个登录,其实我只需要把这个ID啊给记录一下就行,等你记住这两个东西,大家想想我是不是就可以理解成这一天这个设备已经登录过来,等下一次你再去采集到一个登录这个这个日志的时候,如果说还是今天还是这个设备,那么咱们现在是不是就可以把它过滤出去了呀,对吧,就是我现在啊,在这里我从哪买搜索里边我可以保存当前这一天,然后这个设备已经登录过了对吧,那下一次我先采集到数据对吧,比如说同学们来这个这这这个对吧,那比如说。
03:13
啊,我现在这第一次采集到数据到今天这一天,然后这个设备呢,这里有mid对吧?比如说mid这个18到这第一次登录,那第一次登录的话呢,那我会把当前的这个设备登录信息放到MY搜狗L关音数据库里边来啊,放到咱们MY搜狗L关音数据库里来,对吧?记录什么呢?记录10月23号这一天,然后呢,咱们这个MYID,对,然后18他已经登录过了,对吧?那么如果下一次同学们你在这里已经采集到一个日志,这个日志又是什么呢?又是十月23啊,然后这个东西又是咱们那18,对,那大家想一想,我是不是可以从咱MYSQ里边来查一下,查询什么,查询我这一天这个设备是不是已经登录过了,如果登录过,那么咱们现在是不是把这条数据是不是给过滤掉,对吧,但是大家想一想,你现在拿着数据过来,如果不存来,你要往MYSQ里边写每一条数据过来,你是不是从MYSQ里边来查一下呀,对吧?那么咱们现在的日志呢,是源源不断的对吧产生的。
04:13
而且呢,咱们现在如果说我们是电商网站的话,这个日志它的一个数据量会非常大,对吧?那意味着什么?意味着每一次产生营销日志都要去频繁的操作咱my soq,那对my soq的压力是不是非常大呀?对my soq扛不住对吧?My soq扛不住对吧?那么如果MYSO扛不住的话,那么咱们现在是不是要采用第三种方案呢?第三种方案说这个东西我要查询效率呢,还得高一点,咱们这个red是不是上来呀,对吧?Red它本身是基于内存的数据库了,对吧?我完全可以把当前用户是否登录的状态保存到哪,保存到咱们red中,对吧?那么如果保存ras里边,那么咱们现在啊,再想一想,同学们曾经呢,我们给大家介绍过ready啊,五种数据地型string,然后接下来还有什么咱们这个list对吧,List然还有我们这个哈西对吧,啊哈希对吧,还有什么,还有S以及呢,我们的this s对吧?哎,那么咱现在呢,主要是五种数据类型对吧?那。
05:13
那如果想去完成咱们过滤重复,大家觉得哪种类型更最合适一点,想帮咱们过滤重复的话,哪种类型更合适一点呢?Set可以对不对,因为set本身天然是不是做驱虫的呀,对吧?那你说我问大家这个string行不行,比如说我现在我在这里我存放什么呢?我存放的是2020,然后呢,1023,然后接下来咱们现在呢,这里有一个m mid是吧?这个mid是多少呢?比如说啊,这是m mid18对吧,是八,然后进来这是K对吧?这是K。啊,这是K,然后接下来那么咱们现在呢,还有value,这个value是什么呢?就是一啊,这个value就是一表示什么,表示当天咱们现在这这个这天这个设备登录过了。
06:03
你说我现在能不能完成的取重,等你下次你再查询数据的时候,你到那这里取呗,取什么是不是咱们可以判断一下我们现在这里边是不是存在什么exce,然后把这个K拿过来,是不是存在这个key啊,这如果存在的话,那么咱们是不是可以找到了,对吧?哎,那这种方式其实也可以,那大家为什么要选择哪因inside呢?天然的是不是,我感觉我这也挺天然的,他也给我提供了咱们这个什么对,是否存在exce这样的方法,对吧?大家注意啊,咱们现在呢,之所以叫天然,其实呢,这里边一个是它本身去虫对吧?那去虫的话,我问你们,你们打算,那么这个如果是S的话啊,这个key你们打算怎么设计啊,这个key你们打算怎么设计,然后这个value呢,你们打算怎么设计?要想清楚的话,这K和Y6,那咱们里边怎么来怎么来,怎么来放东西呢?K是什么设备ID是吗?啊当天的时间对不对,2020,然后呢,1023,这是咱们K是不是加什么加设备ID,那我觉得你们没必要用S。
07:22
那你们赛干啥呢啊,你们像设备设,那比如说我现在我我这设设备ID midd失败,我再来一个19怎么办?然后我再来一个S集合,那我觉得你们这任何类型都可以,你们根本没有发布到天然驱除的一个这个优势对你们的驱除,你们是怎么做的,你们是一个时时间,然后对应着一个我们的ID,然后做一个K,那任何类型我觉得都可以。基本上啥类型都不对,你说那意思你们怎么放呢?我以K是这个value就是这个对吧,那这个东西并没有发挥的天然驱除的这个优势,什么叫天然驱虫,同学们,咱们在里面是什么?是不是Y就里边它有多个值啊对不对?然后咱们现在假如说我这Y里边已经有123了,那么你在里再往这里面放一放二的话,它放不进去,这个叫天然驱虫,结果你现在你这Y面面就给我放一个值对吧?一个K一个值,一个K一个值,那根本就不属的天然驱虫嘛,对吧?所以这种设计方式我觉得不好,在想K什么K用咱们日期对不对,然后whether呢,是不是用咱们现在设备ID啊,对吧?比如说我现在这里边有什么m mid是吧,M mid19对吧,那么我现在想往这里面放数据怎么放,是不是有什么s sad就这样的方法对吧?那么如果说我当前往这里我来放的话,同学们,那么如果m midd这个东西存在了。
08:44
短出这东西存在了,那么这个时候大家想一想,是不是加不进去了呀,就已经添去重的嘛,假如说再来一个m midd对18对要进来,然后你想往这里面添加,添加不了了,添加不了对吧,那么我现在呢,来看一看,通过咱们这个东西能对比一下了,比如说同学们。
09:03
来,我这是我咳嗽的吗?我就一咳嗽了,做大事。完了来了,我再来,我都不好意思就找人进去了,是不是啊,那咱现在呢,来看一下啊,我克隆一个新的对吧?然后接下来来到哪呢?来到我们的OT model啊这个red对这个下边,然后接下来我现在呢,这里我要去启动那应该是red的serve,然后接下来咱们这里是不是有个red cover呀,对吧?来启动我们这ready,然后接下来呢,Red-CLA对吧?那么登录进来,那么当前呢,咱们现在kiss箱是吧?这里什么也没有注意看啊同学们,假如说我现在呢,使用的是我们这个谁呢?使用的是我们是字符串的形式的字符串形式,字符串形式本身肯定也可以啊,比如说咱们当前2020啊,然后接下来这个是幺零到二三这一天,然后呢,Mid的18对吧,然后它对吧,登录了,对它登录了,咱们现在是不是可以通过这种形式,对吧,来看一下呀,对吧,哎盖的。
10:12
2020对,然后接下来,然后呢,幺零对吧,杠二三,然后接来mid对十吧,对,可以获取到这值,而且注意同学们,那么咱们现在可以怎么做呢?是不是本身这里边是不是有一个叫什么CE呀,对吧,CE然后呢,判断一下咱当前的这个K存在不存在对吧?如果说你看我现在如果是18的话,这东西是不是已经存在了,如果19的话,这东西是不存在,也说我通过这个东西可不可以达到咱们去除的效果,没问题吧,对吧,没问题对吧,所以这种方式其实可以,那如果说我现在呢,要是用我们现在是吧这个S集合的话,那么它应该怎么来做呢?比如说我当前的K啊是Du,然后接下来2020,然后杠,然后幺零啊吧杠二三对吧,然后呢,这个value是什么呢?这个value啊,是我们现在对吧,是mid啊是吧,对吧,那。
11:12
表示说表示当前在咱们这天有一个设备,对,然后呢,已经访问过了,对吧,大家想想咱们除了赛之外,好像还有这这个这个这个多个怎么往怎么往里放。啊,M塞是吧,到M塞是吧,来那咱现在比如说啊在咱们这里,那么如果说咱们现在可以放多个的话,同学们m set是是是用的这这这里边吗?我能不能往这个set里边放多个值。嗯,就是我现在在咱们这里边儿吧,怎么去放。啊,这是string类型是吧?那string类型的话,那咱们现在注意同学们,我现在呢,如果说啊,我要放多个的话,那其实咱们现可以这样对吧,还是在的,然后进下来往这里边来放是吧?那么这个呢,注意啊,咱们现在在这里执行的时候,本身它呢要往里边放的话,对吧,咱们应该有一个什么呀,叫s sad吧,对吧,Sad然后接下来呢,那么咱们这里啊,应该是它对吧,把这个东西拿过来,对我们就拿过来,然后接下来这是什么呢?这个是K短到这里边是不是咱们这个number呀,那这个value短到接下来咱们这里,假如说有多个的话,那应该是短19,然后接下来这个呢20对吧,这个呢是我当前啊这样的一个我们的写法啊这样写法,但大家想一想,那么这个东西如果说啊,假如说我这里边有这个几个了,我先把这个去拷一下是吧,我对比啊对比一下,比如说呢,那咱现在当前这里边没有了,然后呢,我现在。
12:51
一个我们的S集合在赛集合里边呢,我加三个,然后当你再往里边放的时候,同学们比如说啊,我这里又来了一个啊,又来了一个谁呢,又来了一个m mid是八,那这个时候会出现什么情况来,注意看同同学们在这里什么特零对不对,然后现在如果要是21呢,然后又回车,你看一看一特是一,大家想一想我是不是可以调咱们CDD这个方法,往集合里边填元素的时候,根据这返回结果,我就可以判断出它是不是存在了,对吧?如果返回零的话,说明已经存在了,如果返回一的话,说明这东西没存在对吧?这是我第一次登录对吧?那么所以说咱们现在呢,这里它可以在添加的时候呀,他就可以帮他去重,这是天然的,说老师这个东西,那我觉得它也挺好,对吧,你用这字符串行不行,行同学们,但是有不好的地方,比如说我现在想统计什么呢?我现在想统计2020年10月23号这一天有多少个设备登录了。
13:52
都有哪些设备登录了,对吧?大家想一想,我是不是直接到这一个集合里边一查询当前集合里边的所有内容s members,然后呢,把咱们key往过一拿,对吧?这个东西是不是就是我们这一天它所登录的设备,对吧?但如果说我使用这种方式的话,那你想一想怎么做呀,我是不是得查询好多问题,我才知道今天咱们有多少个我们的设备登录啊,对吧?所以说呢,那么咱们现在在这里对吧?它适合我们这个批量操作对吧?还有一个,那如果说我现在呢,在咱们那个设置的时候,大家想一想,我是不是想统计今天这个东西代表当年今天的一个设备登陆哪些,你说到了明天的话,这个数据还有用吗?
14:37
没啥用了,他是不是就记录一下今天咱们现在些设备登录过了,到明天这个时没用了,所以说它的生命周期是不是短暂呢?那如果短暂的话,咱们是不是意味着要给他设置过一个过期时间呀,对吧?那么如果说我是集合的话,我是不是可以单独给这一个K设置过期时间是不是就可以了,对吧?那如果说我现在要是这种形式的话,我是不是给好多K对吧,来这个过去时间的一个设置啊,对吧?所以说呢,咱们现在呢,是吧?这个在选型的时候,我们选什么呢?我们选择的是我们这个啊ready啊,我们选择的是我ready对吧?那么选ready目的是什么呢?选ready目对吧,说我这里它的效率高,然后接下来,那么咱们现在呢,选了ready之后,那么ready数据类型,那么你又选什么对吧?那么咱们在这里选的呀,是我们的set对吧?来进行一个存储对吧?什么原因呢?就是因为我们现在塞的第一个天然气中第二个,它一般在咱们这个做批量处理的时候,对吧,还是比较方便的啊,这做批量处理的时候还是比较方便对吧?那如果是我。
15:38
Set结构的话,那这个类型格式什么样的,那就是我刚才说的这种格式,对你在存储的时候,K就是咱们Du,这Du其实就是前缀啊,然后RA它的K如果有多级的话,一般咱们每一级之间用什么呢?用冒号分割对吧?这个其实主要为了去配合一些客户端工具对吧?你像ready它本身呢,也有客户端工具对吧?也有客户端工具,那如果说你要去冒号分割的话,这个时候它会有一个这个列表,就像一棵树一样,这个呢,相当于我这个上级节点,这个相当于子节点在展示的时候看的更清晰一点,对吧?哎,那么这块呢,注意这是我现在啊想好了,我要使用我的S集合来存放咱们已经登录的是活,对吧,这个已经登录的设备对吧?然后把这设备ID呢,对吧,往那一放,这就OK了,对吧,好的,那咱们分析完之后呢,开始准备写代码,把这稍微停一下。
我来说两句