00:01
好,那我们呢,刚才测了一下这玩意儿,它的一个速度怎么样。太慢了。对吧,我们觉得太慢了,因为你想想看他一秒钟。单个冰度就几条数据。对吧,啊,那你五个并一度就二条。就二条数据对吧,你要五个平行度的话,才100条,那这太慢了,一秒钟生长环境当中。你要知道像双11的时候对吧,那聊双11呗。像这个拼多多,还有这个阿里。对吧,那他们都是千万上亿。每秒钟啊,千万条,上亿,当然你这个光从软件层面去优化也不行,人家机器也多,就像我们说的,就增加变异度,人家就上千个上万个病度去处理,对吧,这是应该的,但是呢,你也不能说你一秒钟处理一条数据,这个也太low了,对吧,那你增加多少病度啊,千万个病毒嘛,这也不太现实吧,所以从软件层面也要去做优化,对吧,两方面,那硬件是一方面嘛,加机器这个肯定要加,如果双11像阿里或者说拼多多,或者说京东类似于这种数据量,那你不加机器不可能。
01:20
对吧。好,呃,那关键问题在于我们要做优化,怎么做呢?你目前能想到的,我们怎么做这个优化,你想想看。就是你能想到的优化,你说这个地方我们怎么优化。大家可以说一说这块我们可以怎么优化。
02:11
啊,没人说吗?就是你能想到的就是都遇到过呀,类似于这些个处理方案,对吧,大家都遇到过,那我们应该怎么做这个优化呀。啊,一个都。没有一点方案吗?咋咋啦,这,这大家都咋了,睡着了。就是访问数据库的优化。没有一点头绪,一点思路都没有吗?
03:07
来来来看啊。把查询结果缓存下来,下次用就跟里边那个一样,对呀,你会缓存这个原数据,那我把我们查询的结果能不能缓存下来啊。啊,多线程同时查对呀,还有多线程啊,对吧,那我们先聊第一个啊,就是把结果缓存下来,这个大家其实应该可以想到的呀,对吧,你看啊,我们之前都写过在这儿。在这个地方。咱们都写过lookup catch,对吧,关联为表的时候,本来每一次都要独立的去访问嘛,对吧,我们可以加在中间加一个缓存。加一个缓存。
04:01
对吧,好,那我们第一个叫什么呢?旁路缓存,第一个优化方式就叫旁路缓存,它整个的一个思路就是什么样子的,很简单这个东西对吧,加一个缓存嘛,那本来呢,你客户端。哎,这个雷达挺大的,你们听到了吗?客户端。去访问这个谁啊,埃贝斯?对吧,好,那现在呢,正常来说你访问返回太慢了,太慢了,对吧,所以呢,应该怎么做。中间加一个。缓存啊,台风要来了,中间加一个缓存对吧,那肯定是内存嘛,肯定更快一点。对吧,好,那我们呢,先访问这个内存,如果内存有了直接返回。对吧,如果内存没有怎么办?访问它对吧,然后呢,写到内存,然后再返回吧,是不是是是这个逻辑对不对,因为你查到之后,你要放进来,我先查它。
05:03
对吧,查到了直接返回,查不到访问I base,诶访问ID之后呢,要往这里边写一点东西,然后再返回,对吧?好,但是你想啊,这个地方我们加了他是不是说他有一些问题,他有什么问题啊。他有什么问题啊,还记得吗?这边加了这个缓存之后,它会有一点问题,他有什么问题。对数据更新问题。对,数据更新可能导致数据不同步。好,那我们要。考虑这个问题的话,我们要多做一点事情了,对吧。多做一点事情了,好,那你呢,正常查对吧,还是这个箭头,但是呢,如果你有数据怎么样更新到这里边儿,我需要把这两种方式,要么把这更新了,要不然把这删了。
06:03
对吧,你这边一旦发生了更新操作,我是不是在这儿更新一下,或者说在这儿把这个数据给删了呀。对不对,我应该做一下这个事儿吧。没毛病吧?对吧?咱们要做的事情其实就是三件,相当于第一,在查Phoenix之前先查缓存。第二,在查Phoenix之后写缓存。对吧,这第二第三步,在Phoenix要更新数据的时候,我们需要把ready数据,把这个缓存数据怎么删除或者更新。对吧,那删除或者更新是不是都可以啊,其实更新会更好一点,但是呢,写起来会麻烦,因为这个非那的数据是大写的,就比较麻烦啊,当然我们再说吧,我们再讨论啊,是不是这三件事儿能明白吗?就是如果我们在中间要加这个缓存,我们是不是要做这三件事儿,对吧,那体现在代码里边。
07:06
就是。在拼接四个之前,在这儿我要查缓存,对吧,在这个位置如果查到了是不是直接就走了,查不到才会往下走吧?好,那查Phoenix查到了,把这个数据要看什么?斜缓存,这是读缓存,这是写缓存,还有一个地方叫更新数据,那我们叫删除数据,或者说直接把这个缓存数据给更新了。啊,那你说首先第一个问题这三步,如果我们加缓存这三步能不能理解,能理解先扣一好吧。这个应该问题不大吧。这样的三步。对吧?好,那这两步写到这儿也比较简单,对吧?在访问HB之前先访问缓存,在访问HP之后写缓存,好那还有一个在更新数据发生的时候,我需要把这个缓存数据给删了,那你告诉我这个应该代码写在哪呢?
08:24
关于把这个。数据删了的这个问题就是说诶,当你发生了更新操作。大家想一下啊。要。写到哪?
09:10
思考一下。啊,写在什么地方,首先我跟你说了,14在这儿写查缓存对吧,20这个位置呢,写写缓存的代码,好,那我更新数据,我要把这个缓存数据给删了。那你说写到哪?想一想,思考一下啊。我看有没有同学能知道。
10:02
啊,有知道的同学跟我说一声好吗?不知道吗?没人知道我们如果发生,那你想嘛,我们的条件是什么?我们的条件是如果发生了更新操作对吧。哎,姚总说了,往维表里写数据的时候对了啊,那你看啊,你得知道这个维表数据是一个更新操作还是一个新增操作,新增操作你不用管对吧,如果是一个更新操作,你需要提前删除。我们缓存当中的这个数据啊,对吧,那你要想那我们什么时候能拿到它是更新操作还是这个新增操作呢?对吧,那在哪在这个地方。
11:07
叫DM方这。对吧,那在这一块往外写的时候,咱们可以拿到这样的数据。对吧,啊,Think table data,还有这个数据对吧,这个数据里边这个value里边啊,它是在这。主流数据长什么样子,它就长什么样子,对吧,在这个地方它就有一个什么东西啊叫类型。嗯。对吧,你可以判断,如果诶,也就是说这个代码呢,你得写到刚才我们的那个位置。在这对吧,你去把这个tap拿出来看一下,如果它是这个update操作,更新操作对吧,那么怎么样,你要删除缓存的数据,能不能理解。这块这是比较麻烦的点,对吧,他还还还需要改我们之前的代码。
12:00
啊,你得想那到底写在哪,是不是写在这个位置,因为这个地方是负责往尾表里边写的,而且呢,在这儿我们可以拿到这个数据,它到底是更新操作还是新增操作,有没有问题。能不能理解,其实我们说的如果要删缓存就要在这儿。想一下,思考一下,刚才大家可能自己反应不过来,现在呢,我跟你说了OK吗这块。能理解的给我扣个一好吗?可以理解的,扣一啊,应该写到这个位置。想一下啊。因为我们说的是发生了更新操作,我们需要把缓存的数据给他。删掉。
13:01
啊,扣一的人并不多啊,其他同学如果有什么问题可以问一下啊,有哪一块有疑问?有疑问的点可以想一想啊,可以说一说。啊,没有疑问了,给我扣个一好吗?这也不扣一也没有问题,那是什么情况?那我也不等了啊,这是我们的方案的一个确定对吧?好,那第二个问题我们说要用。中间加一层缓存,那缓存选什么呢?有两类,第一类呢,是不是像这个我们之前lookup一样,对吧,在本地搞一个内存空间搞一个catch啊呃,另外呢,就类似于我们学过的内存数据库red。这一类对吧,啊叫独立缓存服务,一个呢叫堆内存对吧,存在当前程序的内存里边,大家觉得哪个好。
14:09
一个red典型代表,咱们所学过的内存数据库就red对吧?啊,那另外还有一个是对应内存,就是说我可以自己搞一个这个哈希map。我把它存到里边。那你觉得哪个更好?啊,就是呃,说明理由,并说明理由,你觉得哪个更好,并说明理由。为什么你觉得red会更好一些呢?
15:00
啊,读写不在一起。对,用独立缓存服务更好,更方便一点,对吧,因为我们刚才提到了,你看啊在这个位置对吧,我们要去。读去写,而三方这个类里边要怎么样,要去。删对吧,也属于一种写操作吧,对吧,都不在一块,如果你在这搞一个什么哈希map,这能访问到吗?这两个不同的程序是不是访问不到啊,很不方便。对吧,啊,那如果还有一个好处就在于,那你看我们除了当前这个下单需求对吧,我要访问维表对吧,访问这几个表。放D内存停电就无了,Red可以恢复啊,那这也是一个点吧,这个点倒还好,这个点倒还好,对吧。就是你说挂了就没了对吧?啊这个点倒倒无所谓,其实说实话都不是那么重要啊。
16:00
因为你运营起来之后,我们肯定考虑长期运行的一个结果嘛,对吧?啊呃,关键点呢,就是读写不在一起,你不好操作啊,你要在这搞一个行义map,你这个地方怎么去操作这个地方的哈map呢。对吧,第二个还可以,就是用RA还可以复用,对吧,因为除了我们当前这个下单需求,你看我们还有其他的对吧,还有这个地方那叫品牌品类,用户那不也是要访问品牌品类吗。对吧,这是退单,那我们只写了这三个需求,那你想还有没有其他的需求啊,对吧,因为我们的维表是可以复用的,那我放在red大家都去读是不是可以复用啊,是不是,那如果说你。放在哈麦,你每个人是不是都要维护一个?没独立的吧,它一般法是独立的,那这个消耗内存空间会更大,没必要对吧?啊,那对于内存空间有什么好处呢?快呀。对吧,如果你用哈希map,它是不是比你还要快呀?
17:00
你本地的缓存那肯定快呀,对吧,它的优势在于快,但是呢不好维护,那按照我们这个需求在做这种数仓。类似这样的一个需求的时候,对吧,那肯定还是用这个什么red更好一点,因为我们提高复用性。对吧,能理解吗?所以通过这些个一个对比啊,咱们呢,用什么。Radi。啊,用red做这个旁路缓存啊,呃,我看这边有没有去。专门的去说明这个问题啊,思路分析,对在这在思路分析里边,你知道吧,他这儿有旁路缓存的优化。好吧,这块就详细介绍了,当然呢,我们就不用多说了啊,这个逻辑比较清楚,包括这块还有ebo,这是我们后面的。方式啊,后面的方式对吧,现在呢,我们就聊了这个缓存这块大家能理解吗。就是我们现在要采用red。
18:03
做我们的缓存空间,然后呢,我们要增加读写删。OK吗?整个逻辑。能不能明白,能明白科博一整个的啊,我就刚才总结了一下啊,有两个点吗?第一我们说的是我们加缓存,我们应该加什么操作,分别在哪加。思路听懂了,知道在干嘛了,对吧,啊那就行对吧,你肯定要总结一下,因为刚开始就是一点一点的给你们的,对吧,最后呢,把全部都给你们了,你就明白了。对吧,整个的一个过程,好,那这。
我来说两句