00:02
那现在咱们看一看这个呃,麒麟的这个呃底层原理,麒麟底层原理啊,首先呃这个麒麟底层原理这里边儿呢,我们需要去呃学习这样的这个两方面吧,两方面一一方面呢,是这个呃cube的存储原理。存储原理,那存储原理指的是什么啊?这个CU存哪首先存哪是不存hps里,那存hps里呢?我们不可避免的一个问题就是什么呀,我们不可避免的一个问题,那就是诶你的这个R是怎么设计的?对不对,那如果大家以后再去面试的时候,也有可能会问到这个问题啊,就是麒麟他在h base当中存储数据的那个H,那个rock是什么样的,有可能会问到啊,那这是我们要讲的这个所谓的存储原理,这是第一点,那再往下呢,是这个,呃,麒麟的构建原理。那这个构建所谓的构建指的什么?就是那个计算呗,对不对,因为咱们需要干什么,需要把这个数据从原始数据呢,需要给它计算成这种所谓的Q吧,对不对,那他计算的时候到底是怎么个逻辑,这是我们需要了解的东西,好就是这两方面啊,那咱现在呢,先去看一下这个咱们的所谓的Q吧存储原理Q吧存储原理啊来我们来看一看这个所谓的存储原理有什么。
01:18
那讲存储原理之前呢,我们首先需要给大家介绍一个概念,就是麒麟当中这个维度字典秒的概念。那什么叫做维度资源表啊,大家来看一下,麒麟呢,它会为每一个维度,这个维度指的是什么?指的是我们在定义cub的时候啊,咱们定义cub的时候不是指定的维度了吗?诶,这个A维度B维度你自己指定的,那麒麟呢,它会为我们指定的每一个维度都去创建一个字典表。创建字检表,那这个字检表呢,就叫做维度字检表,那其实这个所谓的维度字检表就是什么呢?就是这个,呃,你可以把它理解成一个大的map,一个大的map啊,然后里边呢,每个维度简表里边呢,都是一对一对的KV,一对的KV啊,那其实这里边这个资源表相当于是一个什么东西呢?相当于是这个对一个维度值。
02:03
对一个维度值啊,然后到哪的一个映射到这个,咱们一个这个int类型数字的一个映射。每个字典表都是这样的啊,就相当于把维度值给它映射到了一个这样的一个,诶数字上面,一个数字上面,然后这个数字呢,都是从零开始的,都是从零开始的啊,然后它这个字典表的意义是什么呢?其实这个应该比较好理解,这个字典表在我们麒麟啊,就是进行计算的时候,就是计算,计算是不是要跑mmr啊对不对,那计算的时候,包括我最终存储到h base的时候,就是存储,我们其实真正去计算,真正去存储,根本就不是用的这些真实的维度值。就是说我们计算的时候呢,诶不是说诶我什么还带着北京带着上海,带着什么电子交通,没有这些东西,全是什么,全是这些数字。全是它对应的数字,包括存储,存的也是这些数字,而不是这些真正的值。那这样有什么好处呢?好处很显然,首先咱这个数据量是不是会小很多呀,对不对,那你存存几个汉字用多少字,存一个数字用多少字节是不是啊,那是不是肯定是差的比较多的呀,这是首先是第一点,那这个数据量少了之后呢?呃,一是可以减少存储空间的占用,二是能够提高咱们这个呃,是不是数据的这个计算速度啊,对吧,因为咱数据量少了,那跑mmr的时候,网络IO磁盘IO就少,那我这个计算速度就相对来说就会快一些。
03:23
是这样的啊,这是咱们维度字典表的作用,也是大家记住,也是在我们麒麟当中,我们计算的时候,我们存储存的用的都是什么,都是这个字典表里边的这个这个value,这个数字用都是它啊,然后大家来看一下,我们这边呢,就是说每个维度有一个字典表,然后值呢是从零开始的,然后我这边呢,就是说每个维度我只写了两个啊,北京上海,可能后边还有什么深圳广州等等都有,那数字呢,会从零一直往下进行这个,呃,递增的一递增的,只不过我这只写了俩,那全是全都是0101,那实际上后边会有零一,会有23234567,会有这些东西。那这是咱们维度资源表的概念啊好,那看完了之后呢,紧接着我们去看一下这个在h base当中,那咱这个到底是什么样的,来打开看一下。
04:11
OK,首先大家现在看到的这张表是什么?我先解释一下啊,这张表大家要注意,它就是一个我最终计算完的一个Q吧。它就是我最终计算完的一个Q啊,当然这里边我并没有把所有的这个那个结果全部都写出来,因为我这肯定写不完,对不对,我就诶写了几条,咱们示例了一下,示例一下啊,那给大家简单的那个解释一下,这里边都是什么意思啊,首先看第一行数据,第一行数据呢,这指的是什么?指的是是不是我三个维度都有的这个诶一种情况啊,对不对,那北京地区电子品类,这个1月9号我的订单金额总额是多少对不对,这三个维度都有的一种情况,那当然这里边儿呢,我们还有什么呀,两个维度的北京地区电子品类,然后这个星代表什么呀,我没有时间维度,那有我是两维的维度组合,那OK,我的电电竞是是600,那同理,再往下呢,什么上海,然后没有没有品类有时间诶是500。
05:05
是这样的,当然下边呢,还会有这种一种维度的,比如说北京地区,然后是多少对不对,电子品类一共多少对不对,诶会有这些所有的东西啊,只不过我没有全写出来,那大家知道这就是一个最终的Q吧,就可以了。那Q吧,最终存哪存在h base当中,那h base当中是这么是存,是这么去存的吗?不是,我们前面说了,它不会存这些真实的维度值,它存什么呢?存的是那个字典表里的数字对不对?那怎么存的呢?往下看。这是咱的字典表啊,这是咱的字典表,那下边是什么,你看啊。这就是H当中所存储的这个所谓的Q吧。大家看一下啊,它呢,跟我上边这一块我是完全对应的,它俩是一样的东西。是一模一样的啊,那它俩是怎么对应上的呢?怎么对应上的呢?大家来看一下啊,它需要去结合我们这个维度字典表去看。需要结合这个维度字典表去看啊,我我拉到下边。结合他看,那怎么结合他看呢?我们先以这个第一行数据为例啊,以它为例,以它为例啊来看一下。
06:04
那这个东西我们把它拿过来,那一个K呢,注意啊,K我们需要给它分为两部分,就是麒麟当中啊h base的ROK呢是分为两部分的,哪两部分呢?第一部分是这个q boy的ID。Q boy的ID q boy什么意思,还记得吗?是不是就是一种维度组合,我就叫做一个qboard呀,对不对,那每个q boy呢,都有一个自己的ID,那这块的这个三个一是什么意思呢?三个一,它的意思就是是不是我三个维度都有的这个对不对,那这就是它的Q的ID,那这个后边呢,这个是什么?后边这个是哎维度值,具体维值,那这个维度值是怎么来的啊,我们需要结合这个维度质间表去看了,那这是不是这行数据只在这上面第一行数据啊,对不对,你看维度值什么样的,首先我第一个维度是不是北零,那北京在它这个维度的字典表里边,它的值是多少,是零,那是零,我这个第一个值是不是就是零。
07:02
对吧,因为第一个维度对应的第一个值就是零,那OK,那第二个维度呢,在它的自然表里也是零,那这边第二个值这是不是就是零是吧?那再往后第三个值呢,在它的维度表里也是零,那也是零,这个地方它就也是零。这就是咱们这个维度值是跟维度字典表这边去一一对应的,是这么对应上的啊,那接下来看下边我们再举一个例子,看第二行数据。那第二行数据呢,它的这个Q报的ID是什么样的呢?是11010怎么来的,这么来的,你看是不是第一个维度有第二维度有第三个维度没有啊没有那就是零,有就是一,那只有俩维度,是不是只要俩维度值就够了呀。是这样的,这就是咱们这个所谓的这个killing cube的存储原理,它的R是这么去设计的两部分,好那这个东西呢,我们就了解一下就可以了,如果人家问到的话,咱们知道就行,好那我把视频录一下。呃呃,我看一下同学的问题啊,呃,维度值超过两位数,怎么表示超过两位数就一直往下走啊,就是0123456789,就是我这儿啊,我是写的是什么,我写的是这个十进制,我写的十进制,但实际上人家底层呢,诶底层存储的是什么,底层存储的是16进制啊,根本就不是十进制,人存的16进制,那然后呢,这个我知道这个张浩同学的什么意思啊,那张浩同学的意思应该是,呃,就是说诶我这个维度值就这边。
08:33
是不是我怎么区分不同的维度对不对啊,呃,他可能是这个意思啊,怎么区分这个不同的维度呢?其实是这么区分的,就是它底层呢,人家是有一个约定的,就是说我这个维度值当中,诶,我前几位是第一个维度,那从第几位到第几位是另一个维度,那第几位到第几位是另一个维度,它是有一个约定的,是自己底层有一个约定的,是这样的啊OK,好,那现在应该明白了吧,它是有前第几位是第几个维度。
09:06
好啊,那咱们还是接着刚才那个张浩同学提到的那个问题,呃,再给大家说一下,刚才张浩同学提到的问题是什么样的呢?他提到问题是这样的啊,其实他的问题应该是这个,就是诶咱们这个诶所有的维度值是不就是给他直接都呃在一部分里边啊,那他的问题其实应该是诶我怎么去区分不同的维度,哎,我怎么知道你这个第一个零就是第一个维度,那我这个要是有两位呢,对不对,我要是什么十十二十三,那怎么办对不对,那其实是这样的啊,就首先。底层人家这个HV这个麒麟呢。底层存的不是十进制的数,人家是十六十进制的,这是第一点,那第二点呢,人家是怎么区分这个诶不同的维度的呢,是这样的,人家是有一个约定的,就是说我前几位,前几位诶是第一个维度的值,那后几这个中间几位到几位是第二个维度的值,那几位到几位呢,是这个,呃,那个第三一个维度的值,以此类推,以此类推啊是这样的,然后呢,这个比如说我这是一个固定的位数,对不对,那比如说我我我先这么去定啊,比如说它,呃需要四位,这个第一个维度需要四位,那OK,我第一个值呢,就是0001。
10:18
哎,它会把这个位数占满的,那要是这个第二个呢,那就是0002,哎一直诶到这个往后类推,它是这样的,是有一个固定的位数,固定的位数的啊,这是它那个如何去区分不同的这个,呃,维度是这样的啊好,那这个完意之后,咱把这个视频去这个录一下。
我来说两句