00:00
好,我们看一下它有哪些文件存储的格式,现在我们知道的只有一个text是吧,哎,就是它默认的,其实它默认的就是用的text啊,它除了text,主要的还有这个secret file orc,还有看下主要的,主要还有其他的格式吧,但是最常用的是这几种。啊,这个text是fair啊,这个text是默认的,然后这两种其余列存储的,我们来一个一个看一下这几种分别它的一个不同点,或者它的一个优缺点分别是什么内容。那文件的存储啊,它总的来说呢,它有两种形式,一个是。列式存储,一个是行式存储。你像我们这个text file。他肯定是行式存储的,对吧,一行一行的就存在里边了,保存在里边了。但是它还有除了行式存储之外,它还有列式存储,但你要注意的一点就是无论是行存储还是列存储,它给你你C来先查出来,一定是这个样子的。
01:08
你不能说人家列存储的给你查出来一横行是一列吧,不是这样的啊,他无论是底层是怎么存的,那是他的,是他呈现给你客户端展现的那内容呢,它都是正常的这个表格。来看一下,这个是行存储的一个数据,行存储的数据它会第一行,这不是A1,这是第一行的数据啊,它ABC这个在一块。在一块内容,然后第二行的还又在一块,然后但是列存储的,你看看它不一样的吧,他什么,他是不是把你这一列A1到A5放在一块的。这样来的吧,然后是。B啊这一列,然后是C这一类,它是基于列存储的,那这两个分别有什么好处呢?就是你在做查询的时候,你是select的某一列多,还是说你经常去查will来查一行。
02:05
就是围绕一个字段,然后拿整行整行的数据。那你看它那个效率就能体现出来了,如果说你在查询过程当中用这种行用的多的。那你用行存储它是不是效率高啊,因为你找到某一行的第一个字段之后,你是不是所有的数据全部都在一块啊,全部都拿过来呀,那如果说你是select克一哎,这种查询方式的话。那你用列存储的是不是更合适一点啊,因为你找到这个列的第一条数据之后,那后面紧跟着的就是它这一列的其他的数据吧,哎,这主要是看你真正应用到这个表最后的一个查询方式来了,查询方式来了,他们肯定都是各有优缺点的。啊,不是说公司当中绝对的就说要用这种,或者说绝对的用列存储啊,没有没有这种规定的,没有这种规定的啊,它的一个行列特点啊,就是刚才我们所讲的查询的时候这种特点。
03:05
然后我们所讲的主流的汉语当中四种存储格式呢,它。文本格式和这个c file二进制的这个文件啊,它是基于行存储的,行存储的,然后这个orc和这个pack这种是基于列存储的。但其实它们俩呢,也不完全是基于列存储的啊,具体的我们等会看啊,分析这块的时候再来说。啊,然后首先看那个text,这是大家最熟悉的,用的最多的一种格式是吧,然后他说是默认格式数据是不做压缩的,但是你可以结合压缩算法来用,对吧,但是它本身就text file本身,如果你不指定压缩方式的话,它不会给你压缩的。不会的,他一个磁盘开销比较大啊,数据解析开销大啊,你看他要是想压缩,结合其他的压缩方式,那其他的加速方式的好坏,你就是不是可以看上面。
04:04
压缩。之前应该是这里边讲的知识的。压缩编码里面有讲对比这几种的好好坏吧,这几种的好坏。啊,那你就自己选择用有的可切分不可切分等等这些内容是吧。好,来看一下我们这个orc这种格式。Orc,我们开始讲的是基于什么?行还是列了,是列存储的吧,而但是呢,它不是完全的是这种列存储的,包括我们的也是,它什么意思,看一下啊,它首先有一个index。然后你看他有。一个或者多个strip来构成的,每个是250兆大小,也就是说它由多个这玩意构成。这个东西呢有个大小先例,如果你文件很大。
05:01
这个东西包括什么,你看它是什么?Roate是这样的,你看这个图可能看的有点晕,本身你一张表是这样的吧。你的数据哎,存在表里边是不是一行一行的呀,对吧,刚才我们说它是基于列存储的,它是这样基于列存储怎么来的呢?它不是一个这玩意250兆吗?假如说这250兆在我们这个表里边是10万行可以吧,他把这10万行一节。然后前面这个10万行啊。它构成一个对这个东西,然后这10万行是基于裂存储的。这10万好像是基于列存储的,就这250兆的东西基于列存储的,然后同样的,那下面如果这个表很大,又拿出250兆。他是这样来的。不是完全的,就把整个的列,整个的全部像这样。来,他这个是你有多少数据全部放在这了,如果假如说这下面有A6A7A8,它通通的放在这,那我们这个orc是什么意思啊。
06:11
它这个它是这样的,假如说它五行啊,我们假如说它250兆,我们先不考虑,就假如说五行我们组成一个那个strip可以吧,它是这五行,这五行的内容形成了一个这个东西,这个东西叫什么?睡吧,哎,然后它下面又有五行内容,又形成了一个这个。它是在什么行存储的基础上,然后来用列存储的吧,啊,它不是完全的去用列存储的,不是完全的用列存储的啊,是这个意思啊,它是那它有inex的这个就标识的它存了多少行的内容,然后road就是实际的数据。啊,实际的数据,你看它这个实际的数据在存的时候是不是。
07:02
按列存储的,这是第一列,这是第二列嘛,第一列第二列第三列的内容是这样的。这能理解吧?还是不吭声是吧,就这个他如果说完全基于列存储的应该是什么样的,刚才我举个例子,假如说他是十行数据啊,十行数据它是把十行全部放到这,这能理解吧,基于列存储的本身是这种存储方式吧,然后后面跟着是什么?B这一列吧,然后同样的也是十个吧,然后是C10个,但是呢,我们orc啊,它这种方式不是完全的列存储的,它是行列结合的,其实。它真正存储的时候,确确实实是这种存储格式,但是它不是对于整张表都这样存的是吧,它是把整张表打成了很多个部分,按照数据的大小,250兆一个,250兆一个,也就是说他把表啊打成250兆一个这样的一个内容,然后形成一个。
08:05
假如说这是250兆,哎,它形成了一个这个东西,下面再有个250兆,它又形成了一个这个东西,最终是这样的一个列存出的啊,这样的一个内容啊,这个地方就是A6到A10啊,这个B6到B10,这是C6到C10是这个意思。啊,行列结合的这种存储方式。但是具体你说他是怎么做的这块,你就没必要了解太多具这么细节的内容了。每个1万行做一个索引,其他的这个相应的一个解释啊,一个解释。然后还有这个papp这种格式PA,它也是刚才我们所说的这种行列结合的,但是它里边啊,相对来说更多一点内容,更多一点内容,因为它底层其实以这种奥进式方式存储的。
09:00
二进制的方式存储,所以他自己还要带这个解析功能,因为你无论你底层你用orc也好也好,Perfect也好,你用c select新查出来的时候,他给你呈现的它,你假如底层用的perfect,他不能给你,你c select新用户在使用的时候给你呈现二进制,这不合适吧。对吧,他肯定也是给你呈现具体的数据的,它所以自己会在这个。自解析这种二进制的啊,但是它是怎么存的呢?它也是跟那个orc类似,它有三个一。它有很多的标签页在里边,有一个字典页,数据页,还有一个索引页,但设计的时候它是这样设计的,但实现的时候呢,它并没有现到目前况下还没有实现那个,所以他现在,所以说你现在你们看到的只有两块。这块是字典页。那大家知道这块内容是什么了吗?四点验看类似于什么?
10:02
检索它的吧,原数据吧,那这个配置一呢,里面是什么东西啊。具体的数据吧,就跟刚才我们这个一样啊。这个上面不是索引吗?1万行一个索引,1万行一个索引,索引区那250兆数据,实际的数据在这吧,哎,它也是一样的,其实这个跨位的,只不过它底层呢,又用了二进制的方式去存储,所以它这个结构看起来要比。Orc更复杂一些,更复杂一些,其实他们俩一个存储原理,你看现在我们所说的接触到的这种基于列存储的,都不是完完全全的一张表,全部按列存储吧,都是这种行列结合的,它也是你看。它入GROUP0,然后入GROUP1,它也是把每丽把很多行组成了一个组,对吧?啊,也是一样的一样的啊,你需要了解一下这两个存储的相应的内容,然后那它有三个数据页,字典页和索引页,但是呢,目前为止它还不支持这个索引页,所以你看这个原理图上面你只能看到两页内容吧。
11:07
这不配置零配置一嘛啊,这是一个group里边的啊,是这样的,这有一个大框里面的啊,大框里边只有两页啊,这是数据页,这是。字典页啊,就是相当于前面的那个索引,类似于索引的是这种是这种意思啊,这是我们所讲的几种哎,不同存储方式的一个相对来说的一个简单的一个比较,大家主要还是了解一下啊,更多的一个原理型的东西呢,其实对大家来说也没有必要研究那么深,你不是具体去。搞这块内容的是吧,啊,你主要是了解一下它底层基本的一个存储规则,然后你更重要的侧重于用吧,啊,你还是侧重于用的啊。
我来说两句