00:00
好,那关于H整个的所有的基础知识呢,我们就已经讲完了啊,最重要的两块也跟大家勾了,一个是进阶这个原理这块的东西,对吧,还有一块就是我们所说的一个APIAPI,当然如果说面试过程当中最重要的还是啥。啊,面试的时候预分区跟这个R的一个设计啊,这个东西啊,包括那个原理也会问一些啊,API呢,是你生产环境当中,如果说你用到BASE1定会用到的一个点啊,API的一个操作啊好,那接下来呢,我们来看一下这个最后一个小的一个案例,就类似于鼓励比音一样的东西啊做这个啊大概的一个小的案例啊,主要的就对于这个API呢,我们要再次对它进行一个练习啊,你单纯的说让你们把这个API再敲一遍。意义不大。对吧,意义不大,所以呢,我们要结合一些什么业务啊,给你一些业务来调这个代码啊,因为没有业务的话,你这个东西销说实在没有意思啊,所以呢,我们结合业务,那我们业务呢是这个。微博。啊,微博这里面呢,这微博这个里边我们要建位表来存这个微博的数据。
01:07
存这个微博的数据,然后呢,还有我们要存哪些数据呢,我们想一想对吧?啊要想一想,那首先是这样。那既然你要知道想存什么数据,你得想一想微博有什么业务业务功能啊。对吧,有哪些业务功能。首先最简单的发微博是要对吧,发微博是不是应该结合着微博那个表把这个内容去对吧,发微博,然后呢,是不关注用户啊,还有这个什么删微博吧,对吧,删除微博好关注用户要有啊,关注用户还有呢。取关吧啊取关,而且微博这个东西是不是我们之所聊的单边关系啊,还记得我们之前所讲的微博好友那个案例吗?对吧,但是单边关系好,你在关注的时候,是不是一个人要加一个关注者,有一个人要加一个粉丝。
02:06
对吧,啊A关注了B,实际上你要放两条数据。对吧?A有一个关注者,有一个粉丝,对吧?那这两个东西是不是应该要分开存啊,那当然这个分开存可以放在一张表里边,我们可以看什么。不同的列或者不同的列组不就完了吗?对吧?啊,放在一张表里,因为它都是人物关系嘛,啊放在一张表里边这意思,那其实这样看来,还有就是说你现在可以发微博,是不是可以查看微博对吧?啊查看微博是这意思啊,查看微博有两种查看方式,第一种呢,你登录进去,他给你展示的是不是你的好友当中最近发的微博。对吧,第二种是不是你点一个人,或者点自己,或者说点某一个人查看他整个的微博详情啊,两种查看方式了啊,那好,那接下来关于这些东西我们如何来设计表呢?就刚才所说的这些业务。
03:09
我们先想一张表能不能搞定这个事,对吧?啊,假设我们先考一张表的事。一秒。表结构呢,我先换一下。啊,这个地方放在。A。BC。我们先想一张表,那这个一张表里边是不是又要存A这个人的微博内容,又要存他关注的人,又要存那个关注他的人。这粉丝对吧,啊这粉丝那这个好吗。如果说我想把它放在一张表里边,这个东西应该怎么存呢?那讲到了,那我三个对吧。
04:04
这还有个问题,你把人物关系跟整个的微博内容放在一块儿,这样整个的业务是不是不结耦?能理解这个事儿吗?对吧,你微博内容的内容你。你人物关系就人物关系,所以至少我们现在想着你放在一张表里边,其实也可以,你硬塞的一张表里边,那也能塞的下去,对吧,但是不够接,所以呢,我们先把它拆成两张表,一个叫微波内容表对吧,这张表呢,我们把它叫做content。应该还有一个微博关系表吧,啊,这用户关系表啊,Relation,好,那微博内容表,我们要想一想这个内容应该怎么存呢。还有视频音频这些东西是吗?行,那基本上里面存一个ul地址吗?对吧,那我们这块呢,就是一个内容文字版OK吧,啊就做这个事儿啊文字版的当然你可以,那有音频视频的话,我们是不是可以用多个列组给它隔开啊。
05:06
对吧,有一个列组专门存音频,一个列组专门存视频等等这些东西可以吧,好就做这个事。那不管我们现在呢,就是文字内容,假如说就这件事啊,文字内容,那接下来是怎么存这个文字内容。也就是说A这个人发一条微博之后,这个数据在这个里面怎么算,我假如说现在只有这个看看呢,这个列图,当然了,这里边还有video这个列列图对吧,还有那个图片是不是。对吧,啊,这个东西应该怎么存呢。来一条数据,我加一个列,来一条数据,我加一个列,这种方式行不行?
06:02
就。就是说这样这块呢,用户。有一个VID,就是他这个r key对吧,作为他一个a key v一键好,然后接下来这个地方来发一条微博加一个列,发一条微博加一个列。行不行,小心行,但是好不好不好对吧,不好在哪啊。你这个列将来得有多少啊?对吧,有的人是不是一天十几条微博的,对吧,那你这个一天加十几个链,这个不太靠谱吧,好我们就换一种思路,那还可怎么存呢。按版本是吧。我可以存多个版本。那这种行不行呢?这种从可行性上来说就不行。
07:00
这不行,为什么?首先是这样的。你在建表的时候是不是先定这个版本对吧,假设我多1.1万个。我存1万个版本,那也就是说你这个微博这个系统上线之后,你就告诉用户,你将来在我的系统里边只能最多发1万条,你发到10001条的时候,有一条就会覆盖掉,是不会这样对吧?重会员是吗?会员你对他这个单独的改主播吗?啊不要这样啊,这个是不是。就压根就不靠谱啊,对吧,前面还能完成这个事情,但是我们如果放在版本里面是不是不靠谱这个事儿啊。对吧,也就是说我们要改思路了,就不能将这个数据放在一行,因为放在一行里面横着扩展,竖着扩展两种我们都搞了,没有写着扩展这种方式了,对吧,是不是横着跟竖着这两种方式我们都想了,不行吧,也就是说你发布的微博,多条微博不能放在一行里边,对不对,那我们就想着放在多行里边,那放在多行里边。
08:08
又要有V1,那怎么说?我这个人发布微博,我把那个微博的时间戳放在。我用当前这个人加上发布微博当前这条微博的时间戳作为rookie行不行?你不能在同一个时间发两个微博。怎么可以啊,你手速再快也不行吧,对吧?啊这个不行,就是时间说已经到了哪个地步,时间出啊,不是以年月日十分秒同一秒,可能你速度快的话,或者网络延迟的话可能对吧,但是同一个时间戳这个应该不会。啊,发布的时候同一个时间戳应该不会对吧?啊,我们就用时间戳好,那第一个content这张表应该就是什么样的。未来的数据啊,假如说有多个列组对吧,多个列组呢,有音频视频这些东西,好我们只关注第一个列组对吧?好这个呢,是我们所说的RKRK是A加上一个什么T1A加上一个TS22。
09:16
我们应该把A放在前面吧,因为将来你可能读A整个人的发微博的详情啊,所有记录,哎,那我们可以用start stop一下子给他干什么。拿过来对吧,啊,一下子给他拿过来是这意思。能理解这个事吧,啊,正好他把A放在前面啊,那这个就是微博内容的,那接下来既然你一条数据就是发一次微博是一一条新的数据,那这个事就简单了,你发的微博内容content,我只要在这里边随便搞一个列,然后一存就完了呗。对吧,啊,发布的微博内容就搞定了,这是我们所说的微博内容表,那好,第二个叫微博的一个关系表这个东西。是不是应该有两个应该微博的关系表啊,关系表一个呢。
10:04
对吧,还有一个是我们所说的CF,那这个CF比较明显两个对吧,一个是at ts,他关注的人,还有一个是什么被谁关注了,Fan这个列组对吧?啊这个类组好,那接下来还是那个问题,这个地方数据我们怎么存啊?用户还是先考虑用户ID了,好,那我添加关注一个人,那也是两种横向扩展,竖向扩展,因为你想把这个人放在银行里边。对吧,放在银行里我可以。横向的去扩展吧,啊,横向的扩展这种方式这个是OK的啊,那有的人说有的那种明星他的粉丝特别多,几十万了是吧,你放在列里边存储不太靠谱,如果说像这种因为大明星啊,流量明星相对来说还是比较少一点的。还是比较少一点的这种,对于这种人呢,可以单独的去对他产生另外的策略,但正常的一个人来说,你关注的人和粉丝有多少个。
11:09
两个两个对吧,所以对于一个正常人来说都不多吧,啊像那种流量明星他们相对来说比较少一点,对吧?啊,当然有那种情况啊,有那种情况,但是微博出去的时候,他也考虑到流量明星的问题,像新浪流量明星什么结过婚啊这种东西,程序员结婚都得去加班是吧。你不知道那事吗?对吧,啊这个事儿就是他是因为他是做那个整个这个运维的吗?后来崩了对吧,流量明星这种像这种人比较少,可以对他进行个什么单独存储啊,对他单独存储,对于他这种的我们可以把它拿出来啊,一个一个一段时间内的粉丝。给他建建一个单独的一行吧,啊,就这种的,但是正常的我们都这样去存,应该OK的吧,因为一个人的粉丝和这个什么关注的人都不是特别多,几十个嘛啊,几百个列我们也是能存下的啊,几百个列也是能存下的,就这意思啊,就是说那我们就以这种方式来存啊,你加一个人我就加一个什么。
12:08
列啊,你多一个粉丝,有一个人关注你了,你就要干什么。加一列吧,啊,加一列是这个意思啊,加一列这个意思,好,那第二个表我们就这样来设计了,好,那这个表能不能完成我们之前所说的所有的业务需求,我们想一想。发个微博,删除微博是不是可以?对吧,因为是一行一行的数据了呀,对吧,你删一行数据是不是可以删对吧?好呃,关注用户跟取关用户这个东西能不能做了。也可以吧,也可以好,那还有一个查看微博商情是不能做。可以吧,因为你给一个人,我是不是可以用三来做这个事啊,还有一个查看微博想你有两种,一种是我们所说的你登录的页面,他主动给你推的。初始化页面这个内容这个也能做吧,这个做的话就是你把你的所有的那个,就是你一登记之后,先便利一下你所关注的人,然后找到你关注的人的微博表面上内容对吧?去把他最近发的微博给他呈现出来。
13:15
对吧,啊,假如说你要是要按时间排个序什么,因为你后面在时间说嘛,按时间排个序啊,这个都无所谓,其实后面排不排序是前端或者那些东西都都问你了。你只要把数据拿给他之后排序啊,或者你做一下也可以,你不做交给前台去做也可以吧,啊,因为你全给他的,可是不是在时间抽了呀,既然在时间抽了,是不是就可以排序啊,那这样,因为其实这个排序率是两个不好做,我们把它转换一种思路,这。呃,每个人拿三条。能听懂吗?就是说我在初始化页面上这个微博我给改一下,不是按照时间排序的,我是让每个人拿最近的三条,不够三条你发几条我就拿几条。你假如说你只发了两条,那我就把最近两条给他拿出来,对吧,最近的啊,是这意思,转换一下是不是同样的,你先要去关系表里边找到这个人所关注的人。
14:08
然后便利关注的人跟每个人去取那个最新的两条数据。没问题吧,啊,取两条数据好呃,那这个过程呢,其实你每次做的时候比较麻烦啊,同时呢,我们考虑到增加一点业务的复杂度,我们设计第三张表。啊,前面两张表是业务需求吧,是必要的,第三张表呢,可以不要,但是呢,可以方便我们写后这个代码,因为你转换的一个过程比较多,对吧,那这张表我们要干什么事呢?这张表啊,就叫那个初始化的一个表。初始化的一张表。啊,就是说专门给初始化页面的这个里边我们就要给这个内容啊,假如说A关注了BC。啊,A关注了BCBC呢,是两个列,假如说列组我们就就用这一个啊,假如音符。音波列图,好,这个列组呢,你先不用看啊,我们先不管不用看音波列图,我关注了是不是BCD。
15:05
BCDE,好,关注这几个人,我是说了默认的,要用三条。对吧,那这三条应该怎么算。因为限定了是不是最大存三条啊,那可以用什么版本号来控制吧,因为我只要最近的三条,不像刚才我们所说的发微博了,纵向扩展的时候。你微博你不能说控制人家多少个吧,但是初始化页面上我是不是可以控制将来显示多少条内容,对吧,我显示三条这个地方是不是可以写。三个版本的数据,而且这个版本里面写什么东西呢?就是说数据存什么。我可以把微博的内容相对来说比较大一些吧,所以呢,我把它什么。微博内容对应的那个rookie放在这吧。对吧,啊,就相当于是一个主外键关联的嘛,对吧?啊rookie是不是相当于是那个content那张表的一个主键,那这块我们存的东西做一个外键,最后一关联就查一下那个内容就完了吗?因为相对来说,你说可就算70位到100位,你也没有内容大吧。
16:15
对吧啊,有的明星一发内容都发好多对吧,啊就这意思啊,所以呢,这个地方我们存什么。Rie好存rie是这意思啊,这里边存三个好,那你发微博。假如说B这个人又发一条微博,是不是最新的微博,我往这里面去插入就完了,是不是自动把老的覆盖掉。能理解这个事吧,啊,自动的就把老的覆盖掉了吧,啊自动的就把老的覆盖掉,能做到这个事吧,啊是这意思啊,这个地方呢,我们就诶以多个版本啊,多个版本的意思啊,多个版本好最终呢,我们设计出来的结果应该就是这个样子,来看一下资料,里边有一个图解。看一下三张表。
17:02
三张表,第一张表叫微博内容表。微波内容表里边呢,我们是以UID拼接上时间戳的一个方式来存的。对吧,因为我们说了横向扩展跟纵向扩展这个都不靠谱吧,都不靠谱,然后呢,我们就改了你那条数据,我就直接添加一行,那你几十医疗数据,或者说上百医疗数据能存,因为你是。扩展你不行就切分多个reading,不行加机器呗,对吧,这个肯定能扩展的吧,这意思好好,那里面呢,有in for这个列图列呢,有content video加picture,但是后面两个呢,我们暂时不做这个事情版啊没有什么图片服务器跟那个视频服务器,正常的你有图片服务器跟视频服务器,这里面放一个URL是不是也可以。对吧,发的数据呢,放在那个图片服务器里边啊,或者视频服务器里边啊,但是呢,我们这块只做内容,也就是文字版的。也就文字版的专门做一个列对吧?啊,这是一个列组的啊,一个列组的OK,那第二张表是我们所说的什么用户关系表,用户关系表的K呢,就用UIB来做的。
18:07
啊,然后它主要的有两个列组,一个叫ten,一个叫F。啊,一个是他关注的人,一个是他。就关注他的人对吧,关注他的人,那这个里边呢,我们看一下。A关注了BCD是不是放在这对吧?好,BCD又关注了A是不是又放在这,没问题吧,那Y6算什么东西?是不是可以传一个空子?这Y6是不是可以乘一个空值啊?对吧,不完全可以存一个空值嘛,啊,存个空值或者说你把BCD再存一份数也可以。对吧,我把BCD的存一份是不是也可以对吧?啊要全球控制,因为我这个只只是表示用户关系的,你只要有A有BCD这两个东西就够了吧,好最后还有一个我们把它叫做收先相表,也就是说给初始化那个页面做的一个内容,好这个地方呢,就A关注了,注意这个地方只有一个列图,列图里面分个列是BCDE吧,这个地方是不是从这里面拿过来的值。
19:18
这一列吧,啊,这个列图里边,因为它是关注的人,然后将。BCD的最近发的微博内容,至于你是五个版本还是三个版本,你在进秒的时候去限定一下对不对,对吧?啊,假如说五个或者三个这个都无所谓啊,你最近发了五条微博的什么。是不是rookie放过来对吧,这样的话,我们在写整个业务的时候啊,业务就会复杂一点啊,就会复杂一点啊,最后一张表呢,就是我们想添加一些业务的复杂度啊,要不然你单纯的去练那些API其实是没有意思的啊,所以呢,加一些业务在里边,其实做很多操作的时候,你会用到三张表。啊,做很多操作的时候,这三张表都要用到啊,都要用到,OK,那我们先这个整个表的设计就放在这个地方啊,放在这个地方好。
我来说两句