00:00
然后呢,跑一下,嗯嗯,跑完以后呢,我们的重点我们说了,咱们就看一看我们的那个数据啊,能不能有零有一啊,有零和一以后,那么我能区分出主教和被教就可以了啊。嗯,我们上节课呢也诶我看看咱们现在已经出来了啊,行,我停下,我现在我就停了就行了,嗯,因为我们只要看到这边能有数据出来了,而且没报错,那就应该是我们在,呃,消费者这边已经能够有数据了,有数据以后我在这边呢,我就可以去查一下啊,然后呢,我们CT,然后呢,我们的嗯,Call log,然后呢,我们直接来回车,回车以后大家看一看一下是不是有很多数据啊,其中是不是就有零了,有零的话,那么我看看啊,是不是也有一啊对不对,没问题,然后我们再看这边是不是我们的coll和那个coll啊,也都能区分开啊,但是这个数据有点乱啊,为什么说有点乱呢?是因为咱们这个数据啊,它所打印的格式啊,中间应该是这个样子,同学看啊。
01:15
以这个为分割符什么意思呢?就这一行,大家看是不是折行了,这个折行应该是跟什么跟这个在一块儿了啊,这个下划线1722_零,不是不是说接在这块儿,它是接在这块的啊,所以它这个折行了,看着好像不是那么舒服啊,但是最起码呢,这个零和这个一呢,我们都能够看得到啊,就这个意思啊,好了,这样的话,我们数据呢,没有任何的问题,已经保存成功了,那说明啊,我们这个功能呢,做的是对的,那么对倒是对啊,但是我们这里得说另外一件事情了啊,来把这个呢,我们打开,打开以后呢,我们说了这个本身没问题,但是你看看咱们这个功能啥意思。咱们是不是插数据啊,你插入的其实就是我们通话记录的这一条数据,对不对,但是你为了你的业务的操作,你是不是又增加了额外的一条,对不对,那这样的话,无形当中我产生一条数据,你却要向我的,诶这辈子要发两条数据,过去你会多发一条,这肯定会影响我的效率啊,最起码会影响我发送的效率,这肯定会影响的,所以啊,我能不能够干嘛呢?你给我一条我就什么呢发一条,你给我一条,我发一条啊,这样的话效率肯定是比之前要高一些,为什么呢?我是发一条而不是发两条啊,就是这样,还有一个你这个被叫用户跟我没关系啊,我们发只发主教就可以了呀,这是我的业务要求啊,只是说为了你的方便啊,大家想想,我说了,你不加这个被叫用户,是不是也能够统计分析啊,只不过你的效率低对吗?你加什么field也能够取数据,但你效率低,所以为了这样的原因,我加一个被叫用户啊,是这么一种现象,但是我说了。
02:56
这个不是必须的,既然不是必须的,为了降低它的耦合性的话,我希望这样的代码呢,就不要放在这儿了,你这边增加主教你就增加啊,你就别增加被教了,那你不增加被教的话,可是我的功能该怎么实现呢?有没有什么地方可以呢,什么呢,在你增加主教的时候,我来增加被教呢啊,而且我还希望能够提高效率,也就意味着不要给我发多条,给H就发一条,那么也就意味同学们看啊,现在我们的结构就有点变化了,所以呢,我们这里打开。
03:28
打开以后呢,我点一下啊,在这个位置,我点我们的这个叫做电信客服,我在这个后面呢,我加点东西啊,咱们加点东西加一个文档啊,咱们写上咱们叫做什么呢?叫数据处理啊,其实就是那个用户啊,咱们叫做用户数据处理,然后呢,把这个咱们打开,打开之后我干什么呢?咱们说一下咱们现在想做一件什么事情啊来现在呢,我们这里来,我们写上来,我们这里比方说是咱们的client,咱们客户端啊,客户端呢,要发送数据了,咱们的client,那接下来在我们这边呢,我们这边来服务器就是我们所谓的base了,OK啊反过来我们的base OK,好,那现在我们h base里面它就有个数据库啊,所以呢,我们这里呢,我就模仿一下,这个本身不对啊,这个画法不对啊,我就模拟一下这个表示的就是那个DB啊,有这种感觉啊来啊,说白了就是那个SDFS嘛,嗯,好了,然后呢,接下来呢,我现在呢,我们的client要发送我们的数据了,你要发送我们的数据的情况下。
04:29
那么这个时候呢,我们的h base呢,会接收到一个我们的请求,所以呢,我们这里呢,是有一个我们的put的啊,然后呢,我在我的h base里面会组合我的数据,为什么呢,它要组合成我们的什么it file之类的东西啊,所以放过来我们这边我们有一个所谓的it啊,就这样,然后呢,再想办法呢,给它放过去诶就可以了,所以啊,我们这里呢,应该是这么一个画法啊好。那我现在啊,我们说就有问题了,什么问题呢?我这个怎么了,我要放两个put吧,也就发两个put对吗?也就意味着我同时要发两次啊发两个,那这里呢,我就干嘛呢,再加一个铺的得了啊来把这个往这挪一下啊,诶往这挪一下,然后呢,把它再复制一份,诶发两个put过来,然后呢,再通过它再往这里面发,无形当中你首先会多一个put,会影响你的发动效率,这第一点,第二点,你本来从业务的角度来讲,跟你就没关系,你给它加进去,增加了它的耦合性也不是很好,所以啊,我希望呢,从我当前的程序当中啊,把它挪出去,我不要跟你耦合在一块儿,来一条我发一条,来一条我发一条,这才是我真正的业务要求,这个数据应该在别的地方去做,那么你在别的地方去做,但你要考虑到这个事情什么呢?效率,就是我这里呢,还要考虑这个put,因为你如果在别的地方做,如果你这么做的话,大家想想,比方说举个例子,你再来一个对象,你来一个对象,由他来发个put,大家想想会有什么区别?
05:53
你会发现这个效率是不更低,为什么,为什么说更低啊,为什么?因为你们还要获取一次连接啊,我这里是一次连接我发两条啊,你这里是两次连接两条,对不对,那所以说你你确实把它放到别的地方去了,那没有放到我当前的client里面,你放在别的地方去了,那这个时候我们说了效率它也会有问题。
06:15
所以啊,你只是解决了那个耦合性的问题,但效率的问题你并没有解决,所以在这种情况下,我们如何来做呢?所以啊,我们有这么一个方案,那这个方案呢,其实我不知道你们以前有没有听说过有个叫trigger。触发叫触发器,这个在关型数据库里面就有这个东西,叫trigger啊,这个在什么my circle Oracle里面都有这样的东西,那什么叫做trigger呢?咱们说一下啊,来咱们简单说一下,咱们就触发这个表述的是当我们的数据库的某张表发生了变化的时候,会触发一些事件。啊,比方说你是增加数据,OK,当你增加的时候,我们该触发一些事情了,什么事情呢?我往另外一张表里面怎么了,我也加条数据。
07:02
啊,就意味着我可以写个触发器,这个触发器当满足某个件时候,我该怎么怎么做,当满足什么条件的时候,我该怎么怎么做,你往U的表里面插入一条数据,我马上呢会往部门里面把这个用户的数据给我加进去,为什么呢?你是某个部门的嘛,OK,你重属于某个部门,我给你加到部门表里面去,诶这是可以的,或者呢,你修改某个数据,你修改的数据为零了,OK,我该统计你零的数量,比方说有多少个零,我可以直接在这个零的上面加个一,在另外一张表里面给它加个一,这个完全都可以通过触发器来实现,而且触发器记录不是我们客户的程序,它是我们服务器的程序,它是我们数据库服务器的什么?哎,功能咱们叫数据库服务器的什么呢?我们的功能,那么也就意味着它不需要去连接,为什么呢?因为本身就在数据库里面,所以啊,我们这种trigger是非常不错的啊,所以既然我们的关系数据库里面有这样的功能,我们的S当中。
08:03
也有类似的功能,那么我们的里面叫做什么呢?这里我们说一下,咱们叫鞋处理器。叫协处理器什么意思呀?叫做协助来进行处理的什么那个对象啊,有这么东西协助来处理我们数据的一个对象啊,处理器我们叫做什么呢?Co啊,有这么一个东西啊,那这个Co那么是什么意思呢?大家看我刚才说过了,这是我们当前想这么做,但是如果你要增加鞋处理器的话,就跟这个触发器的感觉是非常类似了,所以我们的这个图啊就有所变化了,所以我现在把这个鞋处理器呢,给它挪到我们下面来,然后挪下面来,我的client保持不变,保持不变以后我的h base呢,保持不变,诶,拿过来。放到这啊,然后呢,我们的呢,诶保持不变,拿过来,拿过来以后我的client,那么这个时候呢,我们要给他发一个请求,要把那个数据给他put过,那么put过来以后,我们还是有一个我们的h file,然后呢,我们这里呢,我们的箭头诶给它画过来,画过来以后我们的箭头呢,在我们的那个file里面再给它传过来,这本身是没有任何问题的,可是问题就在于那个put的问这这了啊,所以把这个呢给它拖过来,嗯,复制一份,复制一份以后,记住我刚才说过了,Put我们就一条,你给我生产一条,我消费一条,我不做增加了,那你不做增加的情况下,那么我得想办法做呀,所以我们的什么s base里面就有这个东西了,这个东西呢,我们叫鞋处理器叫啊,所以呢,把这个鞋处理器给它拿过来,嗯,诶给它放到这边来啊好,然后呢,我增加一个颜色。
09:47
还有我们的紫色,那这个时候呢,我就会什么呢?判断一下,判断什么呢?当你put的时候,是对哪张表来put数据了,来增加数据了,只要我们能够什么判断出来,就触发了一个条件,这个条件一旦满足的情况下怎么办,我的鞋处理器会执行,也就意味着在某个时间点,记住在某个时间点啊,在某个时间点,在这个位置,在这个位置啊,我触发了一个条件,我触发了条件之后呢,这个时候就走斜处理器了,走斜处理器的时候怎么办呢?它会产生一条新的数据,把这个数据怎么办放到里面去,那么大家想想,其实你这有个put,它又产生了一个新的数据,它里面是几条,是不是两条啊,对不对,还是两条,跟我们上面是不是一样,你上面两个铺是不是也是两条,我现在也是两条,只不过咱们的。
10:38
第二条是由谁生产的?是由h base的鞋处理器生产的,那么效率就一定很快,对吗?为什么?因为是我h base的内部操作吧,啊,内部操作就没有连接那么个说法了,他就直接访问就行了,而且它不是说一直在用,是当我触发某个条件的时候他才会执行,没有触发的话,它就等着那哪等着,所以性能各方面还是非常不错的,而且降低了耦合性,为什么呢?因为跟我这没关系啊,啊你没关系的话,我想怎么做就怎么做,只要在我们的s base当中去增加这个功能,这就完事了。所以对我整个的逻辑来讲的话,又可以什么呢?提高我的性能要求又可以呢?降低耦合性还是非常不错的啊,所以接下来我们就把咱们这个呢给大家说一下啊,所以来我现在呢,就把咱们这个做掉了,这个不是说不能够这么做,只是感觉不是很好,所以呢,把这个呢给它住掉,做掉以后程序呢,我们还是什么呢,跟他差不多,只不过放到了别的位置,所以我们这里呢给它关掉。
11:38
关掉以后我的这个consumer啊,我要给他加点东西了。也不是加东西了,我们要给他来new一个叫module啊,然后呢,我们点击下一步,然后呢我写上叫做C,然后呢,我们叫consumer,然后加一个叫。啊,这个呢,就是我们的鞋处理器的意思啊,所以我把这个给它加上,然后点击啊下一步,然后把这边呢,写成一个斜杠啊拷贝,然后点击完成,点击完成以后就多了这么一个叫斜处理器,然后呢,在我们这个地方呢,给它刷新,刷新以后它也出来了啊出来了之后呢,那么接下来呢,我们在里面增加我们的依赖关系啊,程序呢,各方面跟这个consumer呢都差不多,但是又有变化啊,可以打开,打开以后把我们这边啊呃,我想想啊,应该是我看啊也不用直接把common拿过来就行是吧,咱们这里不就不用卡不卡了吧?啊咱这不用卡不卡了啊,所以在这里呢,直接来我们这里呢它嗯,把这个common拿过来啊,拿过来以后呢,我们这里一刷新,那么刷新以后,只要不出任何的问题的话,我们这边就可以写一些程序了啊,然后呢,我现在往里面加点东西,我先写上,我们叫做new,创建一个包,在这个包的名字呢,我们叫com.at硅谷。
12:56
点CT啊,点我们的consumer,嗯,好,然后点我们的。
13:03
嗯,好啊,然后呢,点击OK就行了,那行,那现在我准备创建我们的那个鞋处理器,要创建这么一个对象来实现我们特定功能,那好,我现在就直接写咱们叫new new的时候呢,我们写上叫做insert,叫插入,插入什么呢?插入那个被叫用户,主教用户在我的consumer这个项目中已经有了,我要插入的是被叫用户,那我就写上叫,诶,然后呢,写上叫Co processor。诶好了啊,我们就这么写就行了,然后呢,点击OK啊,我们写上来,咱们叫做使用,咱们叫鞋处理器啊,咱们叫鞋处理器来增加或叫保存吧,保存我们的被叫用户的数据。啊,就这么个概念了,那好,那我现在我那么写完之后,那你随便写个类就能叫斜处理器吗?不是它应该有要求,所以呢,我们这里来给大家看一看,来我们写上它里面有一个叫做base,咱们叫region,有一个叫。
14:06
就这东西。这个就是它啊,这个是什么东西啊,你们学那个叫做主keepper时候应该有这个东西吧,是是不是类似什么哨兵监听器之类的,对不对啊,所以把这个来,他是个class人,那你应该怎么办?你是不是应该去继承他,诶继承他诶拿过来啊好了,那你这边做完之后,那我们应该怎么了,实现里面的功能了吧,可是我刚才说过了,咱们这个地方画图的时候说过了,这个鞋处理器一定是在什么时候执行。在触发某个条件之后执行对不对,那这个条件我都知道对不对,那这个条件是什么呢?那我们来往这看,看看他都有什么条件,所以我们给他来,你会发现它的条件就太多了啊,你会发现什么了,是不是很多呀?诶那其中找到我们想要的那一个,其中我就发现它有这么一个东西啊,哎,咱们找一下。
15:01
它这里面呀,我找找啊,嗯嗯,我看看啊,咱们叫做,诶有个这个东西大家看,有个叫put,有个叫post put啊对不对啊,还有一个什么呢,看看啊,他有一个应该啊,也没有别的啊,那我这里呢,有个叫put,有个叫post put这里呢,咱们给他补充一下啊来,首先咱们先说一下咱们这个方法的命名规则,嗯,咱们写上叫方法的命名规则啊,这个在我们的在开发当中啊,你写的一个功能,我们最好是建明字义,就我一看到方法名啊,我马上能够大概的判断出来这个方法的作用,比方说举个例子叫log in啥意思呀,登录是吧,我一看我就明白了,我再写个什么东西啊,叫logout,叫退出吧,那所以啊,很简单啊,就这样的一种功能,同样道理,也就意味着我们在自己起名的时候也要遵循这个规律啊,就是这样,所以我们会发现咱们刚才就有这么个东西叫P,我们的put,还有一个叫做什么呢?叫做。
16:02
Post,什么我们的put,其实在我们真正的做法当中,还有个这个东西叫do put。啊,叫put啊,这个叫put什么意思呀,是不是在我们put之前,我们要怎么怎么做呀,对吧,这个put就是这个意思啊,那么put呢,表述的是我真正的执行put时候该怎么怎么做吧,对吧?那这个put呢,是我put之后该怎么怎么做,对吗?诶,这是我们起名的一个作用啊,那么这个叫do put,我们这并没有,为什么呢?因为我们的一个是吧,一个条件呢,是之前和之后这有的条件,这个叫do put呀,跟大家解释一下,这个在什么时候你们会经常用呢?这个在一个设计模式当中会经常看见,它是在我们的框架里面,在我们的一些系统的架构当中,如果你发现这个方法叫do put,或者叫do什么什么东西,它一定体现了一种设计模式,这种设计模式呢,叫做模板方法。
17:01
叫模板方法的设计模式,嗯,叫模板方法的设计模式啊,就这么起名啊,就这意思,那什么叫模板方法呢?很简单啊,其实就是照猫画虎的意思,举个例子啊,你说了啊,画老虎是吧,我不敢画怎么办啊,我画只猫,那然后怎么办?在猫的额头上画个王字完事是吧?你把那个猫画大点呗,对不对,画大点,然后把它额头上画个王字啊,别一看哦,那不老虎嘛,对不对,画的不像是不像,但能什么,但能把它说明一件事情啊。所以什么叫模板方法呢?很简单就是啊,我们把程序的逻辑架构给你搭建好,作为模板给你搭建好,但是细节我不做,你来做啊,所以这里咱们说简单说一下这个模板方法设计模式啊,它这里面会有子类啊,它会有父子类,什么意思呢?父类当中啊,咱们写上父子类,也就是说这种设计模式里,它存在我们的父子类,然后呢,父类。
18:01
它搭建什么呢?搭建我们算法的骨架,就是把那个算法的架子呀,诶给它搭建好,跟个模板一样,你就这么用就完事了,第一步第二步,第三步,第四步,你就这么用就完事儿了啊,别的你不用管,但是细节你需要类来重写啊,所以我们写上叫子类重写算法的细节,重写我们算法的细节啊,就是这样好了,那这个是啥意思呢?这就跟我们前面讲的那个一样,比方说我们要算那个什么分区号,分区号那么我们可能就有个股价了,比方说第一步,我第一步是什么呢?那个T,我就告诉你我的T干嘛呢,要取啊,来写上取。取我们的什么呢?叫用户代码,第一步我们要做这么多,那么第二步是什么呢?是我们的时间取年月啊,咱们的时间取我们的年和月,诶第二步第三步是什么呢?第三步是做我们的抑货运算啊咱们的抑货运算,诶好了,然后呢,我们的第四步呢,是做我们哈希散列啊哈希散列OK,哎就这意思,所以如果你这么写了以后,大家想想,那我们的算法的股架是不是就搭建好了,我们就可以通过这种方式,是不是就把那个我们的分区号就算出来了,但是这只是告诉你个股价吧,细节告诉你了吗?告诉你怎么散裂了吗?告诉你怎么取年月了吗?对不对,是有横线还是没横线,还是说按照什么格式对不对?所以啊,他没有说,没有说怎么办,我们子类来重写它的细节,重写细节第一个取用户代码,那不就是我们的什么,是不是我们的后四位啊,诶他只告诉你取,但取的是哪几位,诶没告诉你,所以我们取它的什么后四位啊,所以取我们的后四位,嗯。
19:42
就这意思啊,然后第二步,那就按照格式呗,201810,那就取前六个呗,那所以零到六就可以了,抑或运算没什么可说的,这是固定的算法,哎,就这样的,那所以呢,这里呢就是它,那么第四步,第四步是什么?哈希散列,那这个散列我们说了有很多种方式法,可以取模,还可以做不运算法,诶所以这就是细节,在负类当中把我们的什么,我们的算法的骨架搭建好,但是逻辑我不告诉你,只告诉你该怎么怎么做,那么细节你自己重写去,如果你不重写,你就用默认的方法就完事了啊,所以就这样,所以如果是这样的一种设计模式的话,那么子类中的所有的每一个方法,它都应该干嘛呢?加一个度作为前缀,这是我们的开发要求,所以啊,它就变成这个样子了,叫度一。
20:29
读二什么东西啊,三啊,就这个东西。啊,所以以后只要你在我的框架当中看源码的时候啊,看到这样的一些方法呢,它一般都是这样的规则啊,一般都是这样的规则啊好了这个呢,给大家稍微的咱们说一说啊接下来干嘛呢?接下来咱们要说咱们这个叫和这个put了,那我们说了一个是在我put之前我怎么怎么做,一个是在我put之后怎么怎么做,对不对,那所以大家想想,我在当前场合下,我应该用的是哪一个我们的方法。
21:00
是不是我们putd插入之后触发这个事件呢?你主教用户都保存好了吧,你主教用户都没保存好,我怎么知道你保存什么数据呢?你的主教在哪儿都不知道,所以呢,我就希望是什么呢?是我的主教用户保存数据之后,我该怎么怎么做,所以在这种情况下呢,我们给他来啊,咱们这里呢,就可以重写它的方法了,所以来我们找一下,咱们叫做那个叫post,那咱们找找啊,咱们叫post put,所以点击OK,点了OK以后,在这里呢,我们加一点说明啊,来就是我们保存我们的主教用户数据之后啊,来由我们的base base自动啊保存我们的被叫用户啊被叫用户数据,OK好了,那我现在写完之后,那么这里面的逻辑就应该去掉了,因为它是默认的,这个咱不要啊,好,那你不要了,以后咱们看看我们这现在的。
22:00
这个参数吧,首先这个东西大家看第一个一是什么东西啊,它是我们当前的上下文的环境,那那这个环境有什么用呢?很简单一点,大家看啊,里面有个叫获取环境,然后点你会发现有个什么东西啊,叫get table,你往哪张表里面保存数据,那个表你就告诉我吧,对不对?这个环境你可以理解为就是h base的环境,我不需要建立连接,我就能得到它,那么这个table,那我就简单了,咱们叫table name.value of,你想保存的是啥呀?你想保存的是不是我的那个表的数据啊,这个咱们也有啊,咱们叫names,点我们是那个叫做table。Table看啊table就是它吧,然后点我们的value吧,嗯,来就它你这么写了以后,表上不就有了嘛,对不对,哎,表咱们就有了,所以我们的table,诶直接拿过来就可以了啊,那你table有了的话,那我这个table应该该怎么办?是不是点我们的put呀,你要增加了对不对,你增加完了以后,是不是应该table.close呀,关掉吧,诶所以也就意味着table先取到啊,我这写上咱们写上叫获取表啊,获取我们的表,然后呢,我们写上叫保存数据啊,保存保存数据,然后这边呢是关闭表啊来咱们叫关闭表。
23:23
好了,那我写完以后,那我保存数据,这个就太简单了,为什么呢?就是把put准备一下吧,而这个put它的操作应该跟我们之前那个代码是完全相同的吧,所以大家想想我这里能不能把咱们之前那个代码咱们直接拷贝过来呢?所以我点一下我之前的这个住掉的代码是可以直接拷贝了,哎,我直接拷贝过来,拷贝我就拷贝到这个地方啊来,我放到这里,放到这里以后把这个助要的内容呢给它取消,诶好,然后呢,给它放过来,放过来以后,那么首先先把这些类给它倒进来啊嗯。好了,行,那我写完以后,那我这里是不是就直接给他什么东西啊,我们的put吧,诶直接把这个put呢,给它放进去,这不就行了吗?啊好了,那我这个如果能够做完的话,大家看看哪些还不对。
24:13
是不是我这些还标红啊,它标红的情况下,是不是意味着把它只要准备好就行了,这里不都字符串嘛,那我写上咱们叫什么?第一个咱们叫做它的一个RO key啊,它等于等于什么不知道啊,再来我们的CALL1,然后呢,等于我们写上叫CALL2,诶,等于啊,还有一个string,我们叫做什么呢?叫call time啊等于还有一个string,我们叫duration,诶,啊,等于好了,行了,也就意味着只要你把这些东西准备好为插数据就可以了啊所以啊,这个概念你只要明白的话,这个代码相对来说还是比较容易写的啊好了,那我现在写完了以后,那这些值都是空的,肯定不行,那他们该怎么办?这该怎么办?这是不是应该获取一下,而且我们说了,我们是在什么时候之后执行的,是不是你已经保存成功了,你保存成功以后说明数据就有了,那有了的情况下,同学们看我这里的第二个参数是什么东西,第二个就是那个put,就是这个put,就是你之前的那个主教用户的什么put,那既然主教用户的put有的话,那它里面有没有这样的数据,他有吧,所以同学们看我这里就可以直接来了,来干嘛呢?我叫put点,我们叫get,有个叫get room。
25:31
什么意思呀,组件吧,哎,我们这边就可以写上咱们叫rock key了啊,咱们叫key好,它就等于我们的bit.to string,然后呢,把这个拿过来,你拿过来以后,现在我之前的记住我写上咱们叫主教,主教用户的那个r key我取到了,你取到了以后,我能不能够通过它来得到这些数据呢?因为我们之前是不是把所有的这些数据都放在r key里面了,那所以我们只要分解它是不是就可以了,所以我们写上啊来,咱们叫做什么呢?数组咱们叫values,等于我们的r key,咱们的r key点我们的split,然后写上一个什么东西啊,斜杠T是吧,哎,我这么写就行了,那我现在我们这么写完之后,同学们想想吧,那我现在的这个位置,我们的它是不是应该首先。
26:27
当然我们向咱们格是什么样子的,你要分解咱们格什么样子的,哎,不对,不是下划线梯啊,是我们下划线是吧,不是这个啊下划线,那这个的话我们是不是应该是一,然后133,然后呢,是那个时间吧,啊时间,然后下面是144,然后后没有什么咱们那个肉的是不是是分区号主教电话号码在哪时间打的,打给谁的,然后呢,这个应该是那个通话时长后面再加个一吧,是不是这样的,那所以我们的格式应该是这个样子的,如果你要不确认的话,你可以再回过头来,你看这边我们这边的r key,咱们叫做主教用户的key,主教用户不在这吗?分区号主教电话号码时间被调电话号码,还有再加个状态吧,那所以呢,我们这个呢,是没问题的啊,既然没问题的话,那就简单了,为什么呢?因为肉你先不管扣一,这个扣一是不是我们的它呀,那所以应该是我们的Y。
27:28
六是应该写上一个一吧,哎,应该是啥?那么二应该是几啊,Value是应该是我们的三吧,哎,然后呢,我们time是我们的二对吗?所以values应该有个二啊二然后好了,那这个呢,应该是我们的values啊,应该写个我们的四,还缺一个咱们叫string,我们叫flag,它写上叫values,我们的五啊就是这样好了,咱们那个一这个呢,咱们先不用取,为什么呢?因为它是算出来的,不是固定值,所以呢,这个一我们就不要了,那么别的我们是需要的啊12345现面咱们现在就都有了,都有了以后接下来咱们要把这个呢给它来操作一下了啊哎,我对了,我这个地方看看Fla自己定了是吧,这个咱们一会再说,这个一会咱们来说啊,然后呢,我们这个应该怎么办,算出来吧,算出来怎么算,应该怎么算,他是不是应该有一个方法,这个方帮咱们计算呢,对不对,那所以呢,我们这里是不。
28:28
该有个他呀,对不对,应该有个他,有一个他的话,那就意味着我们这里应该调用那个道里面的方法吧,但这个方法是封装到了什么,我们的贝到里面对不对?那么贝到这个地方,同学会发现,你会发现什么东西是个抽象的吧,不能直接构建对象啊,所以在这种情况下怎么办呢?来咱们拷贝,拷贝以后同学看啊,既然你不能直接构建对象的话,我们在这个里面来,我写上一个这个东西咱们叫pro static去了,那咱们给他来一个class,我能不能这么写叫process,我们的这个叫做door呢,是吧,然后呢,我们继承我们这个,我们放在这边啊,来给它用一下好了,那我这么写完以后,我在这里面可不可以直接来new它一下啊,我们写个道等于new,我们这个道对吗?哎,我们就这么写,写完了以后同学们看啊,那我这里是不是就可以直接调用一下了,我就可以直接来调用,诶放的位置不对啊。
29:28
放过来,放到我们上面去啊,放到我们上面来,嗯,好放过来啊,我为什么要用到一个我的什么内部类呢?因为我别人不需要吧啊,我别人不需要这个东西啊,我们只需要自己用就完事了,所以呢,我的这个道诶我就可以直接来调用了,叫做点,我们叫生成吧,咱们这里啊同学们看一下,我现在呢,我们在这个里面我看看啊哦,咱们这还有点不太对啊,我想想。咱们这么做可能还有点儿不太对,因为我们都在它里面来做,所以啊这个rie这样。
30:02
咱们把这个呢,咱们拷贝一下,嗯,我想想啊,咱们在这里来做一下啊,咱们在这里来做,咱们叫public,咱们叫做返回我们那个分区号叫get,我们的region,我们的number啊好在这里在这里以后我要传一下我们的T,然后再来传一个我们的那个时间,咱们的tap,嗯,好了,然后呢,我在这里呢,直接来,我写上叫做return。啊,干嘛呢,我们要生成那个,嗯,我看啊确认一下咱们是哪一个呀,怎么有俩呢。第一个吧,看看啊好,这里叫get是吧,嗯,好,那我把这个呢给它来咱们的tell,嗯,好,然后呢,再把这个time呢给它传进去啊好了,写完之后呢,我确认一下,没错,确实走的是我们这个,它会计算出一个分区号出来,那么计算分区号以后,那这个呢,我们就可以直接用了,所以呢,我们来拷贝,拷贝以后呢,我放到这边啊来,然后呢,传两个参数,第一个是那个电话号码,我要传的是谁的,是那个扣二吧,哎,那个背胶对不对啊,就是这样,然后呢,我们这里我的tell啊,怎么还报错了呢?嗯。
31:10
哦,放错位置了啊,咱们把这个放前面去啊,放前面去啊,然后呢,这边再来,嗯,还有一个是我们的什么time吧,诶好了啊,这样的话分区号就有了,有了分区号之后怎么办?下划线,然后再加上我们的什么东西啊,我们的扣二,然后再加上下划线,再加上我们的call time对不对,我们的call time啊,就跟其实跟之前一样啊,然后呢,再来我们再加上。然后呢,加上我们的下划线,再来加上我们的那个叫CALL1啊靠一再加上我们这边叫做什么呢?我们的下划线啊,来再加一个叫做duration,嗯,Duration OK,那这个duration之后再加上一个下划线,我们给个零,诶我的rookie呢就有了啊好了,我现在呢,就把这个写完了,那么key呢,我们这边就有了,别的咱们都有了,但是告诉你,如果你要真这么做的话,你的整个h base呢就崩溃了,只要你这么做,你的一定会崩溃,为什么呢?因为我刚才说过了,我们这个触发了时机是什么时机。
32:22
是叫post put是什么意思,是我增加之后put之后,咱们做这个事儿对不对?可是你有没有想过,咱们这个地方它也会要put的。他也要扑他,那么是不是他扑的时候又会怎么办?又会执行他吧,然后呢,他之后是不是又会执行扑他不得是又走他就形成个死循环对不对,形成个死循环之后,如果他不崩溃的情况,不崩溃,那么就是会导致么呢一出啊,会导致一出啊,战一出战一出的话,你这就出问题了,就肯定不对,所以我们S就会出现什么呢问题,所以如果你这地方这么写的话,就一定不对,那好,那不对,那我这该怎么做呢。
33:05
我们明确的已经知道了问题的存在,那我这里面该怎么做啊?同学们,我这里是不是就想想我什么时候才应该执行写处理器,是我们主教用户增加完了以后才走他吧,那你增加被调用户是没有必要再走一遍他的吧?所以我是不是就应该区分主教和被教了,那么区分主教和被教不就恰恰用这个flag吗?所以我这里呢,就可以这么来写了,叫if if什么东西啊,我写上一点我们的什么ES,因为只有我们的主教用户才有必要去保存我们的新的数据,被调你就别保存了,所以在这种情况下,我们刚才的这个r key当中不就是有个零吗?而且我们下面不得也有吗?所以把整个的操作全放在这个条件当中去就行了啊,全给放进去,放进去以后呢,我写上啊来只有我们的主教用户保存后啊保存。
34:06
后才需要,才需要触发我们的被叫用户的保存啊,不是说你想啊,随便加一套数据,我就保存个被调不亮的,只有主教用户啊,只有这个东西,嗯,好了,那我现在呢,就把这个功能呢,我就写完了,对不对呢,我也不知道,那我这时候该怎么办呢?告诉大家,第一个你先把咱们的鞋处理器先准备好,这第一个啊,所以来我们写上鞋处理器的使用啊。所以我在这边写个一啊,咱们写上叫斜处理器鞋处理啊,咱们叫鞋处理器的使用,这个使用怎么使用呢?首先要分这么几个步骤,第一个就是创建类啊,这个比较简单啊,来创建我们的类,创建我们的啊,创建我们的类啊,这个比较简单了啊,第二个是什么呢?第二个让我们的表啊,记住让我们的表啊,他知道我们的鞋处理类。
35:07
什么意思呢?就是我得告诉你这张表说了,这个数据你不用管了,我有我们的H帮你管了,我得告诉你,我不告诉你的话,你这边可能还还会有问题,所以啊,我们的鞋处理器呢,跟那个表之间应该有关联啊,所以我们写上叫做和那个表它有关联啊,有关联,那既然有关联的情况下,那我这时候该怎么办呢?咱们接着往这边来看,同学们看。我现在呀,回到咱们的这边来,咱们打开咱们的那个consumer打开,打开以后,咱们的consumer当中有一个我们的什么初始化的操作,这个操作当中是不是就建表了,建表的时候我说了要跟表有关联,那就意味着我create table的时候,大家看在我这个位置,我们去create table之前,我的这个叫做什么呢?Table的描述器,在这里我们要加点东西,叫做DR。
36:01
什么呢?加上点咱们叫爱看这个地方。什么东西啊,叫做I的吧,就是我们的增加斜处理器,告诉你我跟我们当中的某个斜处理器有关联,就这个意思你的啊,但是你看这个参数传什么东西,传一个叫name,就那个类的名字吧,那它这太简单了,对不对?所以在这种情况下,我需要把它加上,可是你要加上的话,你固定写死也不行吧,因为你这个表是通用表,就意味着可能不见得是那个我们的通话日志表吧,可能有别的表对吗?不是每张表都加的吧,所以它有些表加,有些表就不加,那既然是这个样子的话,那我这就应该加点东西了。想什么东西呢?写上那个叫processor啊,Processor的那个叫做class,那啊class诶就这么写就行了,你这么写了以后,那我就意味着我可以判断一下了,你的这个值有没有,如果你有你给我加上,你没有我就不加了啊,所以我就可以这么写了,叫if,我写上啊,就是我这个值啊,它可能为空啊,啊如果它等于那啊,或者你的这个地方呢,我们点我们的什么呢?点equals,我们这边它你这个空置物串或者为空,我都不加,哎只要你什么呢?不是,只要你不是,是不是就意味着你不等于那啊,并且你不等于空置物串吧,但这俩这个符号呢。
37:27
这个是货还是应该是并且。是不是应该是。所应该是这个呀,对不对,应该是我们的,并且的意思就是两个条件都满足,你又不是空,你又不是空字符串,那这个时候我就有必要把它加进去了,嗯,所以啊,我就把这个地方给它加进去,加进去以后那肯定就报错了,为什么?因为这个参数在这边并不存在呀,所以要把它给它放到我们这边来啊,给它放过来,放过来以后把这个呢给它去掉啊好,你把它去掉以后,那我这是也得传呢,诶把这个给它传过来,你这个传完以后,我这就又报错了啊又报错了,那么又报错了没关系啊,默认情况下怎么办?默认情况下就是个那了,诶就那好了,但是我这可不是默认情况呀,所以怎么办?我再拷贝一下啊,呃,或者不用拷贝了是吧?诶不用拷贝了,我这里呢,再加上就行了,那我回到咱们之前的那个建表的这个地方,我建表的这个地方,我是不是就要加上了,那我加上的话,把咱们那个类咱们拿过来,咱们写上咱们拷贝。
38:34
我们叫做来,嗯,然后呢,我放到这边,然后呢,给他一个我这么写了以后,是不是我的类的名字呀,类的名字不为空,你不为空的情况下,是不是就一定满足我这个条件,满足这个条件传进去,传进去以后呢,不为空不就加到了它里面去吗?诶就是这个意思啊,所以我重新初始化的时候,这块呢,我要加进来好了,那现在呢,我的表的关系现在已经有了,我们现在的处理呢,已经有了第二步,咱们就做完了,该做第三步了,第三步是什么呀?你看一看咱们画的这个图,这个图当中鞋处理器是放在哪了。
39:11
是放在我的客户端的还是放到我的,那是不就意味着你得把这个类打一个包放在我的当中啊,是不这意思啊。能明白什么意思吗?就你当前的这个程序,你得放到s base吧,那就打个包啊,所以我为什么在刚才在之前的时候,我创建这个新的项目呢?因为我要把它打包啊,我把它打包,打包怎么打?两种方式,一种是运行的架包,一种是我们依赖的架包,我是用哪一种依赖,因为是要用你对吗?他要用你,那就叫依赖加包了,那这个依赖加包咱们说过咱们可以通过这种方式打吧,对不对?点一下可以,但是还有种方式就是用方式打,用方式打会更加方便一些,所以我这里干嘛呢?我在咱们的这个位置叫project,我在这里面直接有个package啊,我就直接打就完了,我一打的话,会把下面的所有项目呢都会打一遍,那这样的话,其中就包含了这个鞋处理器了啊,现在呢就全成功了,成功以后咱们在每一个项目当中会有一个叫target target当中就会有这么个架包,这个架包咱们就给它拖过来啊。
40:23
所以呢,我这里呢,来我们写上叫h space啊好了,然后呢,这边有一个我们叫做什么力吧,你把这个给它拖过来啊,给它拖进去,但你拖进去以后,你还要加一个,你还要加一个,为什么还加什么呢?你是不是用到了common,你common如果不加的话,是不是就会缺失价包,诶所以记住我们还用到了common呢,你要把common里面的加包给它拖过来啊,两个价包我们都需要,所以我在我们的这边我再加一个说明啊,咱们再加一句说明就把同学们忘了啊,所以在我们的这个蓝牙协处理器这个位置,我们点一下点,然后呢,我再写上啊,将我们的项目啊,打成我们的价包啊,价包发布啊,咱们叫发布到我们的h base中,诶就这样,然后呢,加一个括号啊,关联的价包啊,关联的价包,关联的价包啊也需要。
41:24
发布也需要发布,那么光发布还不行,还得分发啊,并且啊,咱们写上咱们叫并且需要分发什什么什么叫分发呀,就是集群中的每个节点都应该有一份儿吧,啊就是这个意思啊,所以我现在呢,我回来啊,回来之后这边我退出去,我退出去之后呢,现在呢,我们CD啊,咱们这里呢,给他一个什么呢,直接来吧,是不是那个力吧,是不是可以直接分发呀,哎,所以我们直接分发就完了啊,所以来我们这边直接写咱们叫Li,嗯。啊,直接给他分发到我们不同的地方去就可以了啊好了,那现在呢,没有任何的问题了,那我这里面呢,可以给它来稍微的操作一下,嗯,咱们叫做B,咱们叫做stop啊给它来停一下,停完了以后把新的加包给它加载起来,然后呢,我们再去执行它就完事了啊好了,现在呢,我们试一试,看看我们的效果啊。
42:22
啊,也就意味着把咱们之前的代码呢,挪到了我们的里面来做这个事情了啊。嗯,好了啊,然后呢,我这边呢,给他来我们start一下啊,重新来启动,那么我现在重新启动以后,那我现在呢,反正我们的程序好像还在跑着呢啊,然后我们这边还在呢,那也就意味着我现在呢,可以继续再去消费,去消费以后看看我的数据,那个零和一有没有同时出现,如果有的话,说明我的鞋处理器是已经正确的了啊好,那我现在来确认一下咱们现在的这个启动啊,来看看啊,我们现在来我们给他操作一下,呃,我刚才的这个地方好像也没报什么错误啊,那行了,现在回过去把咱们的这个consumer咱们点一下。
43:08
点一下以后,把咱们这个地方的它,我们再来启动啊,来运行,运行以后呢,我们来观察一下我们的效果啊。稍微的等一会儿,看一看我们的数据能不能插进去,那正好呢,在等的过程当中啊,咱把这边给他来,咱们B,咱们叫space,然后呢。啊,我们看一看,然后呢,我历史一下啊,好了,大家可以看到我们这个是不是出来了,出来了以后呢,我观察一下咱这边。好,还没有呢,还没完全出来呢啊,他这还是旧的呢,因为还没删掉呢啊,还是旧的好,大家已经有数据了吧,有数据马上停掉啊,咱马上停了,你数据别太多了啊好,现在呢,我们停了之后,现在呢我就可以试一试了,咱们还是扫描,然后呢,CT,我们的colo啊好回车,回车以后大家看一下有没有零,有没有一,我们程序中说已经注掉了啊,那么它如果有零出现的话,一定是斜处理器弱的吧,哎,就这个意思,所以啊,我们把程序换了一个地方,也能满足我们的需求啊,这样的业务才是对的啊好了,这个鞋处理器咱们就讲到这里,大家休息一下,一会儿呢,给你们时间把它做一下啊。
我来说两句