00:00
好,我们了解完h base的本质以及它的特点之后呢,接下来咱们就要了解一个非常重要的概念啊,就是h base的数据模型啊,H base的数据模型说起来呢,要从它的设计理念来谈起啊,呃呢,是完全依赖于谷歌的悲歌推论文啊,这个谷歌的论文啊,相信大家都有所耳闻啊,谷歌呢,有三篇论闻啊,分别构成了这个哎,大数据的三驾马车,也就是我们大数据本质上要做的三件事儿啊,海量数据的。传输、存储和计算,而这个big table论文呢,就在讲述这个存储这件事儿啊,那H作为一个数据库,它理所当然就是来搞存储的啊,这个论文里面对于数据模型首句的介绍就是说贝个table是一个什么样的table啊,它首句就开始说了,叫是一个稀疏的分布式的,持久的多维排序的map,这里面单词,这里面的词一个多余的都没有啊,每一个单词都是有意义的啊,咱们一个一个来看啊,首先它是一个稀疏的,什么叫稀疏的呢?哎,又回到关系型数据库和非关系型数据库对比上了啊,关系型数据库呢,比方说MYSQL,它是一个表格。
01:08
这个表格呀,在底层存储的时候要求是比较高的啊,你在底层存储的时候呢,一定要跟每一个格,就是每一行每列的那个小格,就这一个小格都留好对应的存储空间啊,你你是不可以说不给他留位置的,这不行啊,每一个地方都要有留位置啊,那样留位置就会造成什么呢?造成存储空间的浪费。啊,你可以想象一下,如果你的表啊列比较少,总共就十列。那你再往里面写数据的时候,你是可以确保每一列里面都有值的啊,那里面空格就会比较少,对吧,但如果是大数据的话,就像刚才说的百万列。如果你百万列的话,咱们真正做过数据开发应该都懂的啊,你这个数据里面肯定是有大量的空值的啊,是要有大量的空值,那如果有大量的控制,你用哎关系型数据库这种表格形式来进行存储的话,就非常的浪费空间,它要给空值留空啊,啊如果你用非关系型数据库,用这个big table的。
02:08
呃,设计理念这个模型来做的话呢,就会非常节省空间,因为它是稀疏的,什么意思,如果这个格为空啊,当前这个为空,我可以不存。啊,如果你为空,你就不存在,不存在我为什么要存你的,我就不存,那不存就造成了一个空间的一个节省,这在大数据里面是非常非常必要的啊,这是第一个叫稀疏的啊,第二个叫分布式的,这就不谈了啊,存储海量的数据,如果你不是分布式的,那你就不可能存在啊,存在一台电脑上,你的磁盘再大总是有上限的,你也没有办法进行一个很好的拓展,对吧?啊,这就不谈了啊,下一个叫持久的,这是必然的,我们在存储数据的时候,你一定要是持久化保存的。单纯的保存在内存里面啊,跟数据库的里面是背道而驰的,那不可能的,对吧,下一个单纯叫多维,多维什么意思。呃,非关型数据库的本质呢,是KV结构,但如果你仅仅像代码里面的哈希map。
03:07
哈希map啊,最基础的这种KV结构,对吧,如果你仅仅像代码里面的哈希map一样,那它是一个单位的,就单独给1K能得到一个value,那这样的话呢,它存储数据。就不够全面了啊,太单一了,那肯定是不行的,我们的big table它一定是多维的啊,那是多维的,下一个叫排序啊,这个排序呢,你只要对我们的存储和读写有稍微的了解啊,一说你就明白了啊,无视的数据,如果我想要准确的去查找一条我想要的答案的话。你需要去遍历整张表啊,但如果它是排序的话就不一样了,如果是排序的话,我可以按照一些算法来进行读取,比较简单,也比较有名的二分查找法啊,你可以想想是不是如果用二分查找法呢?就要求这个数据一定是有序的,所以我们的big table它一定是有序的啊。最后一个词叫map,这个map,哎,故意没有翻译啊,如果翻译的话呢,这个软件容易把它翻译成地图啊,那显然它不是地图的意思啊,我们可以把它叫做映射啊,叫做映射,这个映射指的就是哈希map里面的那个KV的意思就是它。
04:14
啊,就是它好,那关于这个映射呢,它应该是如何组成的呢?哎,谷歌的论文里面接下来对它还有介绍啊,这个映射呢,应该是由行线列箭和时间戳索引作为K。啊,有行有列名,有行名有列名,同时呢,有一个时间戳作为它的K,那它映射的每一个值呢,就是它Y6值呢,应该是一个未解式的字节数组啊,它应该是一个字节数组,同时它有一个未解释,未解释什么意思呢?就是经过序列化了啊,经过序列化或者说呢,是没有办法用UTF杠八编码的啊,它不是一个能直接读的字符串啊,经过序列化那这的好处呢,还是存储空间更节省一点啊,这个相信大家都知道,存一个字符串跟存一个序列化之后的字符串,那空间是不一样的,对吧?哎,它一定要经过序列化啊未解释的啊好,那最终呢,我们h base的数据模型跟谷歌的这个big table的数据模型是非常相似的啊,可以说就是依赖这个big table来创建出来的啊,用户呢可以将数据存储在带标签的表里面,数据呢,行可以具有可排序的键,就那个K是可以排序的,并且拥有任意数量的列,这个任意数量指代的就是如果用户喜欢一个表里面的行。
05:27
可以具有疯狂变化的列,就是可以动态的去追加这个列,因为数百万列什么概念,你是不可能在最开始建表的时候就把每一个列都给它写上的啊,非常不方便对吧?我们呢,不需要写这个列,你往后再使用的时候可以追加列,这跟关系型的数据库有非常大的区别,那本质呢,就在于它存储系数啊存储系数。好,最终的解释呢,就在于这么几个关键字对吧,技术分布式多维排序的一个映射啊,这个映射呢,指代的就是KV结构啊,这是我们h base数据模型的一个基本理念啊。我们。
我来说两句