00:00
好,刚才呢,讲完的是这个它在命令行当中的操作,那这款其实之前也讲了,主要是让他感受一下H,哎,它怎么用,它大概的一个相对来说比较简单的一个数据结构啊,啊大概了解一下,那我们现在来看一下整个的H中的一个数据结构。首先就说P。是吧,OK,我们也看到它其实名字叫行线是吧,它就是整个的给来检索的一个主键,要要求一张表里边全局唯一。主见嘛,对吧,一张表里面肯定是唯一的嘛,不能重复的,重复的OK,然后。它就代表了一个行间啊,其实就代表了一行数据,一行数据,然后我们要获取HB当中数据呢,主要有三种方式,刚才大家也看到了第一种最简单的全面扫描是吧。全秒扫描这种方式跟没有关系吧,对吧,他管理UK是什么东西呢?全部通通拿来啊,OK,还有一个get吧,这个全秒扫描是不是盖。
01:02
还有一个get get是不是你必须要指定rie啊,对吧,你不能说GET1张表吧,啊,这是不行的啊,不行的,你必须要指定IE,它是通过单个rie来访问的,单个rie来访问的,当然它还可以通过这个rie的一个正则啊,正则就是类似于like这种查询吧,来正则方式啊,来查询的,那也是通过get,也是单个key查询的,OK,那还有一个问题,就是全表扫描的时候,咱们还有另外一种扫描方式,就指定stop rock stop roll吧,对吧,就限定大范围,你看这个其实查看啊,而且还有一个问题,就算你不指定start,肉跟肉,它给你返回的结果是不是还是按照R的一个顺序啊。整个的对吧,我们看到的结果是无论你数据是先插入的1002还是先插入的1003,最终返回出来的结果都是1001在前,1002在后,按照一个字典去给你反馈出来的啊好,那这块就是涉及到rookie啊这块的一个设计问题,这块东西啊是面试题当中最常问的。
02:03
就是rookie的一个设计,它会抛给你一个实际的情景,让你设计设计R,那这块后面我们会讲啊,怎么相应的一个设计原则,因为它的一个非常非常难,难在哪呢?第一。你想想看一张表。大的时候几亿条,十几亿条数据。你要保证rookie的全局唯一。对吧,这个难度还是非常大的啊,所以说那你只能干什么,加长它的一个长度对吧,就可以设计长一点,那给你就给你四位数,让你设计一个能满足11条数据不重复的一个周,谁都设计不出来了,所以它长度上啊,也有要求,它这个最大的长度呢,能达到看。64K。这个就很大了吧,啊,但是他官方的描述是这么样的,那实际应用当中的不可能没人说这这太长了,你没法写是吧,你获取一条数据你就OK,不知道怎么写了。
03:00
谁记得住啊,对吧?哎,根本不可能64K,想想那那得是什么玩意啊,你这个文档才多大呀,对吧?然后看一下实际应用当中的长度,一般是十到100个字节。得到100个字,一般用的最多的是70~120。70~100,它就能保证基本的一个需求了啊,这个长度70~100,然后在存储过程当中啊,一般会加上时间戳。就是将你的时间戳拼接到UK里边,那为什么呢?整个的时间戳这个东西是不是不可能重复啊,是直接从数据流来说很难对,你不可能说同一时间插入几条数据吧,哎,时间说是很难重复的,而且时间中那个长度也有一定的保证吧。也有一定的保证,所以在收设计K的时候,有一个很重要的原则,就是大家尽量的能把时间戳加进去的。尽量加进去啊,尽量加进去这种。然后再往后看。
04:02
Rookie保存的字节数组,因为它只有一种保存形式,无论是rookie啊,还是它的一个列组啊等等,都只有一个啊,都是字节数组啊,只有一种类型,没有那种其他的一个类型的一个纠纷。然后是按照字典序排序的啊,这都提过,这都提过的好,他既然按字典去排序啊,那你要考虑一个情况,我们之前说SC扫描的时候,是不是可以指定start跟stop啊。对吧,那你在设计RK的时候有一个原则就是这个啊,你要用这个特性干什么呢?将经常在一起读的数据啊。存储到一块。就是你相应的干什么呢,你要把。类似的数据,它的一个rook key设计的很类似啊,假如说前面端串数字都差不多,那你后面呢,都从A012这种方式开始。那你最后在读的时候,这这一块的东西是不是它在H当中存储的过程当中,是不是也会存储在一块啊。那你对于这一块数据的访问,你就可以用什么start stop roll啊,Start stop roll能提高你的一个访问效率,要不然你是不是每一个rookie自己去拿出来去访问啊,还比较麻烦啊,你就可以节省访问时间了啊,这是这块相对说的啊,大家稍微感受一下后面r rookie的一个设计呢,肯定还会要再说啊外再说的具体的OK,然后第二个我们要注意的就是这个CF一直讲的吧,列足。
05:26
列。然后呢,H被当中每个列都归属于某个列族,就是我们之前所讲的一个列,它不能够抛弃列族单独存在,是不是啊,之前强调一个点啊,任何一个列都属于某个列组,某个列组OK,然后是必须在使用表之前定义,是不是创建的时候必须要定义列组啊,当时我们创建那个student的时候,它不是创建码非要加一个列组,当然那个列组可以多个啊,可以多个,就说你在逗号再加一个什么in for2啊,In for3,或者说你不叫ino,你叫什么,其他的名字随便你,你想叫什么叫什么对吧?啊,就这一个名字而已,但是你一定要指定啊,而且在使用之前就是创建的时候要指定。
06:08
啊,然后如果说列名呢,你要访问的话,是不是都要加上一个什么。列足对吧,表明你当前这个列是属于哪个列的,属于哪个列组的,OK,然后看。Cell细胞对吧,细胞它其实指的是一个一个的单元格啊,在表里边就是一个一个的单元格,来看一下整个的表结构,现在大概大家应该有一个这样的一个认识了,看啊。这个上面呢,在这这张表这边存的是。这边存的是列足,对吧?CF假如说我们只有一个列足叫inform。然后这边存的呢。一个一个的rookie是吧?1001 10021003啊这样存的数据OK,然后in four下面假如说我那个1001,我存了一个什么。
07:03
姓名我是不是就增加了这一列啊。哎,把姓名拿进来叫一个什么线同啊相同OK,然后你会发现其实这个里边啊,它不仅能提一个数据吧。可以存多个数据,是不是因为有版本的问题啊,那版本是不是存在这个小单运动里边,就是当前这个框框里边,对吧,那你想想看,如果说你用。表明用列足用列加上r key这个东西,你是不是限定的是这么一个单元格对吧?那你这个单元格其实还没有到最小的数据单元格,还有版本啊,那也就是这个东西,就是确定到版本之后,就是我们这个所说的这个C啊,最小的这个单元格,那你看一下最小的单元格是有什么先进的。在一张表里边,那表明就没写了吧,啊,肯定是在某一张表里边吧,对吧,有行线列足列加上版本,它才能够唯一确定一个单元吧,因为他不知道你这里边到底你写的是存一个版本还是多个版本吧,啊有这个问题存在的啊,一定是这个,那大家就知道这个。
08:14
Cell这个细胞指的是什么内容啊?指的是什么内容,它里边有这么多东西,而且。全部都是任何什么啊啊啊,还有他的一个值,最后还有值吗?确定了单元,你不是为了拿它一个VALUE6吗?也是都是自。啊,都是字典码啊,这是这个问题啊好,然后最后看这个这个版本是个什么东西呢?对吧,其实就是这个。它的版本就是由时间戳决定的啊,之前我们SKY那张表的时候,是不是能看到他的一个什么。时间戳时戳,你看他叫什么,你家叫时间戳在里边,在校里边整个的。
09:08
时间戳啊,是确定它版本的,确定版本的,它是根据时间戳的不同来确定版本的。好,然后这一块呢,就是有多版本的问题,可以去看一下,每个都保存在同一份的一个数据的一个多个版本啊,当然在高版本的时候,它默认的创建表的时候,它是不是给一个版本啊,能看见吗?当时描述表的时候,这老版本的时候,它默认的会多个版本,然后版本通过时间戳来索引呢啊,时间戳来索引的是这样的啊,整个的要注意这个时间戳这个东西在我们HB当中是非常重要的一个内容啊,非常重要的一个内容。然后后面还有个命名空间。其实上午大家应该也看到了,他说一个什么密闭空间不存在是吧,我创建表的时候,因为我把什么我把那个HP那个目录给删了啊,就把他一个密闭空间那些东西都删掉了,那这个秘密空间是什么呢?在MY搜当中,大家学的时候应该先学的是创建database是不是,然后在database底下创建表吧,那这个那呢,它就类似于数据库,类似于数据库就是管理表的。
10:18
你看表,所有表都是命运空间的一个成员。其表必须属于某个命名空间,没有指定defot默认的命密空间当中,因为它有一个默认的命密空间,那怎么看呢?看一下啊,在这。还记得我们那个房问地址吗,对吧。我这个挂了吗。Must tell。啊,多打了一个哦是吧,说到那看一下这这是我们一个表吧。
11:07
的,而且大家上午带他看那个目录的时候还有印象吗?的那个目录前面还有一个目录吧。首先这个肯定在数据文件夹下,对吧,来。看看这个在哪呢。命名空间底下吧,哎,命名空间底下OK,那它命名空间也有相应的一个操作,那如何查看命名空间呢?直接list下划线比较麻烦。有两个这个default呢,是咱们如果创建表的时候没指定它会有默认的,它会有默认的,然后这个h base呢是系统的。系统它自己要存原数据对吧,系统的这个系统的到时候我们会看到的,它里面存在的内容的,OK,那如果创建这个秘密空间呢。
12:01
对吧,创建空间呢在这。也要加一个下划线。Namespace。然后给他一个名字,我们来一个。这个。然后再看一下。是不是就多了一个big,对,那如果我想把表建在这个下面呢,就不想放在这个什么。默认的命名空间了,我想把表放在我自己的,因为我自己维护啊,它类似于数据库对吧,它更多的还是对于业务线的一个表的一个管理,你要把不同的一个业务线上的表放到不同的密密空间里边,那你看一下,首先这个命密空间创建了,那起码这块应该得创建一个什么这个data对吧,那你要想把你的表放在这个下面,是不是最终你的表应该。位置在这啊对吧,那怎么创建呢?看一下首先创建表是。要指明它的一个表明对吧,那此时。
13:03
你一定要加上这么个东西。点。它是用冒号,就跟in for加什么加列名一样,那我创建一个,我还创建一个student可以吧,因为我放在不同的数据库里边,两个名字无所谓,然后再来一个什么音符,随便来一个列图走。也创建成功了吧,那我可以看一下这个表走。就是说默认的这种方式呢,它都省了,是不是他在默认的那个明明空间下,它都省了,无论显示出来的时候都省了,但是你是创建什么在自己的一个。命运空间下吧,哎,命运空间下它没省他没省,那这块来看一下,哎,底下就多了一个student这个文件夹,对吧,那如何删这个命运空间呢。
14:00
那我们内蒙这个吧,这个这个。发现他删不掉,说错了,那看一下对吧,这很合理吧,还是非常合理的,就是说你底下还有表呢,是吧,它当然那密密空间我们知道这个表里边没有数据,对吧,但是密密空间它不能说我底下还有表呢,我就把它删掉吧,还是不能的,那你只能先把那个表给它清空掉,全部删掉之后才能删这个密密空间吧,哎,才能删这个密密空间,这你要注意这个点啊,注意个点,密密空间呢,除了管理,更多的其实是管理这块啊,就是刚才我们所说的管理不同业务,业务线上的一个表。啊,管理不同业务线上的表,他当然还可以有有什么权限限额,限额指的是哎,可以强制利用空间包含。约定的一个数量,还有这个什么权限,就是说来细化控制。不同的人来访问这张当前命名空间下表的时候,权限不同吧,有的人读写啊,这个可以做控制的,但是呢,这些点除了当做刚才我所讲的,在公司当中呢,用的最多的还是管理不同业务线上的表,其他的对于这些什么权限啊,限额啊,都用的非常少,都用的非常少,第一就是相对来说,大的公司啊,稍大一点的公司啊,他们对于权限管理啊,不会做到name space级别,就是说他在更上层,在h base级别就已经做了,能理解。
15:33
大的公司就做了,那小公司呢,都是自己人,就就那几个人,还说来限一个权限,你能访问不能访问没有意义,对吧,没有任何意义,所以说这块这个内容应用的比较少,更多的还是分不同的业务线这样来应用的,无论大公司小公司,这样的一个应用场景是更多的啊,你要知道的一个点,OK。啊,这是命名空间啊,命名空间它也有,就是你要记住的,它就类似于。Database啊,就一个数据库,然后下面呢,可以放很多的表啊,当然我们之前能够创建成功表呢,是因为什么。
16:06
他有一个默认的吧,哎,它有一个默认的命名空间啊,你看在这块你根本看不到那个H那个命名空间,对吧?啊,因为系统自己用的啊,系统自己用的在这。那个命运空间看见没在这啊,它是系统自己用的,你不能你访问不了了。但是你可以查看它里面数据啊,到时候我们会看到OK。
我来说两句