00:00
呃,那首先呢,我们要明确一下,接下来要跟打交道啊,我们要做三件事情,哪三件事情呢,来看啊,第一。第一件事情说查Phoenix之前先查缓存,这是第一件事,第二件事情,如果缓存找到了直接返回,对吧,如果没找到查Phoenix,查完Phoenix之后是不是要写缓存,也就是说这边要读缓存,还有一个什么写缓存,还有第三件事情就是说当我们发现维度数据是一个更新操作,那我们要干什么,清缓存?对吧,我们要做的是这个事情,我们要去清缓存啊,我们要去清缓存OK吧,三件事情,读写和删。读写和删有没有问题?这个没问题吧,好,那我们来做一下啊,第一个既然我们要用到red,所以先导一下red的依赖啊,先把依赖拿一下。
01:10
把这个依赖呢找进来。对吧,依赖接下来呢,我们导一个连接池的一个工具类。等他倒完,然后接下来呢,我们去拿一下这个red studio,这个东西呢,大家已经比较清楚了,之前呢,呃,也都用过好多回了,对吧,所以呢,我们就直接拿一下。接下来呢,我们要去对吧,我把这个拿过来。这是大家之前也见到过这个代码的,对吧,就是获取一个连接池,然后呢,从尺寸当中获取连接,那文档当中给你标红的一款哈,102,这个是大家可能要去修改的一个地方,对吧?有可能这个地方不一样啊,所以呢,我们就把这个标红了,把这个标红了,我给大家标红了,好,那这个是连接池,那接下来呢,到我们这个地方来。
02:17
DMU9对吧,到这个地方来,呃,那在这个查询。查询菲尼克斯之前先查询。这个red好先查询好,那所以呢,我们要两个东西,一个是key,一个是这个内容,那接里斯。red.get jew得到一个je clean,那下来我们拿着je去获取数据,好,接下来呢,跟我们的这个。类型还有key有关系了,对吧,所以我们要分析一下啊,这个存到历的数据,我们是不是要思考三个问题啊,对吧?第一个我们存什么数据,什么数据,那存什么数据,这个是最简单的啊好,第二个我们使用什么类型。
03:17
使用什么类型?第三个问题就是这个red key。我们应该如何设计对吧,好一个一个问题解决啊,第一个我们存什么数据啊。我们存的数据是什么?啊,我们要存什么数据。
04:03
查询结果啊,那其实就是说维度信息杰森。杰森object,对,但是呢,我们存到这个red的时候,不能把object存进去,对吧,我们应该存的是这个杰森的,呃,字符串格式对吧,也就是说这个阶段对象没有问题啊好,那第二个问题我们应该使用什么类型呢?我们应该使用什么样的数据类型?好,有同学说three。
05:07
只有这一种是吗?大家的答案比较统一呗,就是three,那我们就只聊了啊set,还有set是吧?行,那我们写一下set。Said。好,那我们主要就看这两种啊,呃,思类型,说思类类型的,你给我说一下这个red key我们应该写什么。我们应该用什么作为这个red key?想一想啊,其他同学没有答的也可以说一说。
06:01
啊,有的人说表明加ID,有的人说ID。Table内表明加ID,对了啊,光ID是不是不太行啊,光ID的话,各个维度表里边可能都有这个相同的ID,那你不是数据混了吗?对吧,所以这个呢表明table。Name啊,拼接上这个ID啊,可以吧,啊加ID好,那我们加ID啊。好,那set呢,说sat的同学,那想一想我们set应该用什么作为这个。如果是set的话,那我们用什么作为我们的?Red is kill。
07:03
表明好,他说了,表明作为这个K。呃,那这个时候想一下这个方便吗。我们用表明作为这个K的话。方便获取数据吗?看啊,我们获取数据的条件是表明加ID。对吧,条件是表明加ad,只有表明你是不是把一个表当中所有的维度都查出来了。是不是?你把当前ready当中存的这张表的所有数据都查出来了。然后呢,你还要遍历这个数据集,然后再去过滤出咱们所要的这个ID对不对,如果说我们用表明作为这个key的话,是不是应该是这样去操作,大家想一下。
08:14
不方便吗?啊,肯定不方便喽。对吧,所以咱们还是用什么three。啊,咱这咱们还是用three啊,那有同学可能想我,我替大家说一下,到时候沈涛单独问我有没有同学想用map map的话有一个好处啊,对吧,我们这边用一个啊,当然不是map啊,不叫map啊,叫哈希对吧,其实。哈希,那哈希可以啊,哈希呢,他有两个K吗?对吧,哈希的话外面我们用table。然后里边用ID。因为对于哈希这种结构啊,咱们是不是应该有一个red key,然后里边还是K类型啊,对吧,Value,我们放这个数据就好了。
09:00
对吧,这个地方我还可以放ID,那这个也可以很方便的去查到呀。是不是比方说啊点HK。还是盖的看啊,他要一个key,还要一个field来唯一确定一个。对吧,那我问大家这个map哈希这种结构跟three哪个好。如果说这个地方让大家去选,你应该选什么?对,对了。选哈希啊,呃,这个地方呢,主要考虑两个点啊,不选哈希。不选哈希的原因?
10:01
省建的个数嘛,啊来我们说一下不选哈希的原因,第一个啊,就是说这个用户维度数据量。大。数量大好,那有同学就觉得很奇怪了,像班长说的哈希呢,他省省这个键的个数啊,你比方说这个表有十条数据。十条数据对吧?如果我用string,那是不是它有十个P,十个外层的red key对吧?好,那如果说用哈希呢,这个表有十个,那其实它只有一个K,那班长说的没问题啊,对吧?那为什么反而数据量大,还导致我们不选哈希呢?对吧?为什么数据量大我们反而不选哈西呢?不是数据量越大,感觉这个越好呀。
11:02
走了两层不是走了两层来看啊。它的区别在于什么呢?在生长环境当中,注意。直接通过令更快,这是一个原因啊,当然如果说你要考虑更快,那肯定是令更快一点啊,但是你说的这个就班长你说的这个个数这个问题对吧?呃,也是很有道理的呀。对吧,那为什么反而不这样走的对吧,它是这样子的,呃,注意red是可以配置集群的。集群。Red是可以配置集群的,好要注意一下啊,注意一下在集群呢,并不是大家所学习的这个叫主从。主从集群是不是这个多台机器放的数据完全一样啊?而我现在说的这个集群。是扩展集群。扩展集群,比方说有三条数据,三种不一样的数据,这是放一,这放二,这放三,叫扩展的集群。
12:09
对啊,到这一步其实就清楚了是吧,因为如果说我们用哈希数量大,那么你这一张表的所有数据是不是一定落在某一台机器。落在某一台机器对吧,那接下来你关于这张表的访问都找这一台服务器对数据热点问题啊,所以反而数据量大的时候,我们要用three把这个P呢打散,打到不同的机器,因为生态环境当中是有很多台不同的机器的。对吧,是这个点好,第二个还有一个点,还有一点呢,我们这个数据啊,这个外置数据需要设置过期时间。他需要设置过期时间,那如果说我们用哈希,用哈希的话,我们肯定注意啊,设置过期时间,我们给他看一下xce,它是针对于K去设置的,也就什么意思呢,如果说我们用的是哈希,那么。
13:09
是一张表,一个过期时间,那要不然大家都不过期,一过期大家都过期了。一下子全部都过期了。对吧,同时所有的查询的数据呢,都过期了啊,这个看起来就相当于是我们那种现象一样,就雪崩。对吧,就雪崩了啊,就是说我所有的根据这个ID查的,我不无论只要是这张表对吧,我只要根据这个ID去查,无论查一查二查三,一直到一半,诶他都查不到,在都查不到,都会落到菲X查询,对吧?啊所以呢,是需要设置过期时间,我们希望每一条数据的过期时间都不一样。对吧,我们希望每一条数据的过去时间它都不一样,那这样的话,大家呢,挂掉的点不一样啊,就防止了统一时间,统一时间大家呢,访问到Phoenix。
14:07
对吧,啊,主要基于这两个点啊,所以我们不选哈希啊,但是如果说数据量。有点结耦的意思,对,差不多啊,差不多不能把它们绑在一块,对吧,如果说你的数据不需要设计过期时间,同时你的数据量呢,不是特别的大,对吧?可以用哈希啊,可以用哈希可以减少K的数量,这个班长是说的没问题的啊,但是如果说这个数据量太大的情况下来说,尽量的不要用哈希了啊,因为生态环境当中是一个集群,对吧,这个要搞清楚啊,所以你在做这个事儿的时候,你要想一想,在这个过程当中好不好查。对吧,刚才set这个东西就是我们说从查的角度把它pass了,对吧,不选的原因是什么。不选set的原因是在于查询不方便,查询很不方便对吧?好第二个啊,那你用table name,第二个它也有这个问题。
15:10
我们需要设置过期时间对吧?啊,那这是不选set的原因啊,所以你要把所有的都列出来,你想一想这个P应该设计成什么样子,接下来想一想我们未来怎么用这个数据对吧?除了我们用法简单的查之外,有没有过际时间啊,数据量问题都得思考到才可以啊,是这个意思,好吧?啊,这是我们所说的red的一个设计啊。
我来说两句