00:00
那接下来呢,我们就看一下他应该如何去使用,因为下面呢,就写了EVO的一个API怎么去写对吧?这边有个例子啊,我们先呢去看一看这个例子,把里边一些点呢给大家介绍一下,然后再开始动手去写这个代码,毕竟是一个新的函数,对吧?所以呢,我们还尽量多看一下啊,首先呢,这边。什么意思啊,就是说你要求对吧,前置要求你要想用我这个异步IO的一个操作,你必须得满足什么条件才可以对吧?好,那我们看一下,他说呢,他说你要使用这个一函数啊,要有一个。要实现与这个数据库eboo的一个交互,对吧?啊要求request。要求一个客户端,哎,要有客户端,那客户端都有,大家想是对吧,好,To that database,哎,跟这个连接的客户端那肯定要有,那毋庸置疑对吧,关键问题在于呢,他说that。
01:00
要支持异步的。要支持能够发送异步请求。对吧,他要支持这个点啊,那他说呃,大部分的many对吧,很多的这个popular,就主流的这个数据库呢,都提供了这样的一个客户端。对吧,啊,但是呢,咱们这个就不好用了,为什么呢?因为咱们已经写好了这个工具类,而且工具类里边呢,用的是两个。数据两个。要发送两个请求。对吧,啊,一下子ready啊,先要ready ready有了,直接返回了,第二个请求就用不上了,关键问题在于,如果ready没有,那我还得去请求这个Phoenix,第二个请求呢,还得能用上。还用上?对吧,诶这个就比较麻烦了啊,我们这两个你要再写就改写这个客户端啊,不方便,对吧,它有没有第二种呢?来看下面这个。下面这个呢,他说如果说你没有这个,他是给没有这个一步客户端去用的,对吧,他说你可以尝试怎么样呢。
02:04
呃。使用这个同步的客户端。对吧,好,使用同步的购物单,同步的客户单干什么呢?他说。同时使用by creating markets创建多个口段and,注意看啊。And,怎么样?去处理这些同步的请求,对吧,注意不是异步请求啊,是同步请求with a。用一个线程尺,哎去处理。这些个同步的请求,这不就大家之前有同提到那个多线程的个事吗?对吧,虽然我没有异步客户端啊,那异步客户端是什么意思啊,比如说我呢,在这个open方法里边,对吧,我们说了一步I最最核心的一个点是什么呢?是他呢能够做到来一条数据我就处理一条,我不需要等第一条处理完,我就去处理第二条,它最核心的点是这个啊跟map函数的一个区别对吧?好,那么O方法里边呢,如果我创建一个客户端。
03:13
对吧,创建一个客户端,哎,这个客户端呢,假如说是E不I的客户端。对吧,你来一条处理一条,来一条处理一条,哎,我用E客户端,我可以发请求啊,我可以发送很多请求。对吧,你要同一个客户端可能不太合适了。啊,你要同一个普通的客户端对吧,就不太合适了,但是现在呢,人家说了,你假如说没有这个客户端,你就是普通的这个同步的客户端,对吧,虽然你数据来了,你能够处理,但是我这个客户端决定了,我必须要把第一个请求处理完,我才能处理第二个那。这个客户端不是不能用了吗?对吧,但是呢,人家给我们提供了一种方案,怎么做呢,你呢,创建很多个这样的客户端。对吧,再结合谁呢?结合我们的多线程。你来一条数据,你拿着一个客户端对吧,你拿着客户端一开这个现场,你呢,B来了对吧,你拿着客户端二你开个现场,他俩呢,不是同一个客户端不就完了吗。
04:09
对吧,虽然你这个客户端,我没有创建EIO的客户端。但是。我创建很多个客户端。对吧,我创建多个客户端,那不就好了吗?对吧,这就是他说的啊呃。在这个用一个线程尺。去。同时可以调用。多个客户端去发送。请求。去发送请求啊,当然然而他说这种方式啊,通常比这个一步客户端呢,嗯,要怎么样。要稍差一点啊,要稍差一点,因为毕竟呢,你用的多线程嘛,没有人家异步这个客户端来的更合适,因为他。更侧重于这个ebo这个操作对吧,但是呢,我们这现在已经跨系统了,工计已经写好了,我们就不给他改了,对吧?好。
05:01
那我们呢,就用这种方式啊,因为这种呢是。特殊的这种呢,是通用的对吧,那也就是说这种方式呢,你不管你这个。数据库有没有异步客户端都可以用。都可以用啊,这要注意,所以呢,我们上课的时候就采用这种通用的这种方式啊好,那接下来呢,是异步客户端API的一个写法,API的写法首先啊,这里边儿。他要实现这么个接口。啊叫if函数,这我们说了跟map函数平级的对吧,它叫。异步函数啊,当然了,我们就不去实现这个接口了啊,我们就跟他一样去继承这个reach。一不函数。对吧,我们继承这个负函数,因为它呢有这个生命周期方法,我们可以在这里边你看啊,它呢,创建了一个什么。客户端啊,那咱们在这里边呢,就可以构建我们。
06:01
Phoenix的连接池对吧,所以有多个客户端嘛,未来连从连接池里边可以创建多个连接对吧,多个客户端啊,那除了这个之外还有。我们创建线程值。对吧,把现成的创建都放在open方法里边,因为我们一个变度,像这个池子这种东西有一个就够了。对吧,啊,连接一个可能不太够,但是池子肯定就够了,好,那我们肯定用rich,这是第一点啊,它呢就比较简单,那我写任何一个代码都需要这样去做,对吧?关于第二个他说什么东西呢?Call back,回调一个数据叫什么。Take the result of。The。Operation的这个操作的一个结果对吧?呃,并且处理它to the。诶处理结果这是什么意思呢?你看第一个你要实现它,你就写一个客户端嘛,那你数据来了,这个呢,就是一条一条数据的方法在这,但是呢,它异步调用的一个方式啊,就是来一条就调用一条,不用管第一条处理的怎么样了,他不需要管这个事儿,OK吧,好,那么。
07:06
来点处理掉,处理完以后,比如说我们那边是补充这个维表信息,最后呢,需要通过它写出结果,他指的这个意思,最后呢,需要通过对吧,这个对象complete完成对吧,然后呢,通过它去写出结果到流里边。啊,要通过它去写出这个结果,倒流里边第二件是讲的是它啊好,那么第三件事情,第三件事情很简单了,他说什么。他说把这个异步函数的一个操作啊,应用到一个流上面,作为一个transform,那这个毋庸置疑对吧,就比如说你在额外写了一个map方式,那也就是说你得干什么事,你得用这个map function function吧,能理解吧。对吧,就是比如说这个M方式呢,我不是在这去拗的,我是在外面写的。啊,那你得拿着这个流去调卖方法,然后创建我们额外写的那个卖方式嘛,他第三件事情讲的是这个,就是说你得把你写的函数作用到流上。
08:07
这是第三对吧,那一三这两步其实。都没必要说,那我们肯定知道对吧,第三步在这啊,哎,它怎么调用呢,比如说这边有个流对吧,这上面呢,是它的函数。这个。对吧,哎,他写的这个函数啊,好,那么在这边。它第三步就调用,怎么调用呢?诶这个调用不是拿着流去点了,而是这样子的,叫asy nc的一个data stream.on a的位置流,然后呢,创建函数,后面是超出时间,后面我们再聊用,到时候再聊啊好,那这样的话是不是将流与我们的函数。作用到一起了,对吧,那这个第三步,其实那我们都知道你写了一个函数,你肯定要用到流上面才可以,要不然你写了有什么意义呢,对吧,你写的没有意义啊好,那这后面呢,是超时时间啊,超时时间,这个超时时间是干什的,它在这里边呢,体现不出来。
09:02
啊,体现不出来,呃,因为它这里面呢,除了这个方法之外,它还有一个这个方法。他还有一个timeout的方法,OK吧,他还有一个这个方法,那这个方法是干什么用的呢?就是说那外面呢,我给了一个超时时间,如果我给了你这么多的时间,你呢,还没有处理好你的。需求。还没有处理完对吧,就是说你呢可能没读到。可能因为什么情况对吧,反正呢,就没拿到这个结果,那么你你就走超时超时这个方法了,他就从超时输出了,对吧,能懂吧?啊这个是给超时去用的啊,下面呢有所介绍在这啊好呃,那除了这个之外,我们还有一个东西需要介绍,你看它啊。这个地方呢,就有一个叫unaed的位。On audit叫无序的等待对吧?好,那除了无序等待呢,还有一个叫有序等待audit。
10:05
有序的对吧,这是什么意思呢?比如说咱们上面这个啊,来看这个图,这上面的abcd是不是这四个来的。按abcd顺序来的,那有没有可能由于我EL操作我AB2个数据呢很近。对吧,AB2个数据来的很近,但B呢,可能以前读过。啊,B呢,以前读过这个数据,对吧,他呢可能在这个。的。内存里边catch对吧,而A呢,之前没读过。他呢,在这个。磁盘DFS,哎,那有没有可能说A虽然先发请求,B后发请求,但是呢,B先拿到结果,然后A拿到结果,有没有可能?对吧。就由于我AB2条数据挨的很近。
11:00
A先发的请求,B后发的请求,但是最后响应是B先响应到,然后再A,有没有可能性,大家告诉我。有没有可能这个。那这个当然。是有的对吧,这个当然是有的,OK,好,那既然这种情况来说呢。它这个audit跟on audit什么意思呢?如果你用的是audit有序的。对吧,那么你呢,A。B按这个顺序来的,但是呢,响应结果是BA,那不好意思,我既然是凹的的,对吧?啊,我我既然是凹的的,那最后输出我也要按AB输出,那你的B来了之后呢,你得等着,因为你前面还有数据没有出。你得等着,等到A出来之后,你B才能出,就输出这边要等一下。对吧?好,那如果是on a的无序的呢?那谁先拿到结果谁走。
12:02
啊,谁先拿到结果谁走啊,它这个区别就在于这儿。啊,就在于这个地方对吧,好,那我问大家,对于我们这种关联为表来说啊,当然on aid的呢。它会产生乱序。对吧,它有可能会产生乱序,但是它效率是不是高,Audi的呢,可以保证你一个并路当中的顺序,但是呢,可能这个效率会受到影响,万一你这个A卡住了。你下面数据都会卡住对吧,效率会受到影响,好那我们就想一下啊,那是不是如果我们的需求学历能用。On a的,我们就用on a的呀,对吧,那你告诉我当前我们那个需求。我们关联维表这种需求,我们用有序还是无序?啊,或者说我们能不能用无序的。因为对于一个需求而言,我们如果可以用无序,那我当然用这个无序了。
13:03
对不对。我可不可以用无序啊?对吧,这个是可以的,因为只要能用我们就用嘛,对吧,对于我们关联为表,那你A关联跟我B关联没有什么关系,就算你这个时候你交换了顺序,我最后呢,是不是要。分组开窗聚合呀。我们最后是不是要分组开装聚合呀。而在这个。开窗之前我们要提取石家庄甚至bug,对吧,我们呢,肯定会给一个延迟,给一个延迟了,对吧,所以你这个两条数据说这一点延迟我们就不操心了。对对,顺序是没有要求的,对吧,所以呢,最终我们肯定会选用什么,选用这个on a的这种方式。啊,选用on audio的方式对吧?哎,我们不需要考虑这个顺序,这是最好啊好,那这个呢,咱们就。搞定啊。
我来说两句