00:00
好,呃,同样我们还是把昨天所讲的东西做一个简单的回顾啊,昨天呢,我们学了这个H的一个开头,首先我们了解了一下它本质上是干什么用的。用途是干什么,存数据的对吧?啊存数据的它主要是为了方便那个数据的一个查询,因为它有这种表结构啊,有这种表结构,如果说一个文件。我们所知道的。IDFS是不是也是存数据的地方?但是你把文件放在那个地方好读吗?报读吧,那我们有表结构给他控制了,而且呢,它不光是可以查,它更重要的实现了在HDF上的一个什么。随机写操作,今天我们就能知道它是如何来实现这个随机写的。对吧,因为我们现在看到的啊。是不是说他用时间桌来控制给用户反馈的数据啊,但是我们之前提到的,那假如说你铺的这个张三,又碰到一个李四张三这条数据来说,对于用户来说是应该没用的吧。
01:06
对吧,那当时我们查了一下是不是那个数据还有啊。有吧,那个数据还有对吧,啊还在,但是其实按道理来说,那个数据理论来说应该被删除吧,如果他不删除的话,那将来存了很多很多什么。不用数据,你像那种覆盖掉的,或者说我获得了好几条,然后执行一次删除,是不是那好几条应该都不要对吧,做这个事的那。如果说你存大量的这种数据,存储效率就很低,所以在某个时间点,他一定会把它删掉的。对吧,至于什么时候删掉,我们等会就能讲的,因为它还有flash,还有。com,其实就在这两个过程当中去执行的删数据,而它删数据的一个流程就是我们之前所讲的给它加载回来,改完了之后再给他什么写回去。啊,他其实就在做这个事儿啊,就在做这个事儿,就我们之前讲的,只不过说他在做这个的时候,不对用户暴露,你用户是感知不到的,你用户看着好像当时就把他删掉了吧,啊那对用户的一个,对用户的一个行为来说,那就够了,那就够了,那后台你自己想做什么事,因为你要做优化,你不可能说现场去做这个事儿,就类似于有同学之前找到资料说have是可以去更新数据的,确实可以。
02:23
Help呢,你在支持update的操作,但是呢,生产环境当中和和我们都不讲这个事情啊,都不讲这个事情,第一它更新起来特别麻烦,第二更新极其慢。就是你一个几条数据,你更新都要好几分钟,因为他就现场给你做什么。下载下来改完了写回去就做这个事儿,他立马就是你触发了更新操作,他立马就给你做这个事儿,太慢了,生产环境当中那个数据量不可能说用会用到这个更新操作的啊,会用到更新操作的,他呢你要加很多的一个配置,就是对这张表要加很多的一个配置。
03:00
啊加很多配置,然后呢,执行一更新操作的时候,速度特别慢,所以很少会用到这个,几乎用不到,不是很少,几乎用不到这个have里边一个更新操作啊更新操作,所以我们讲的时候根本就不讲,因为也没人问这个事啊,没人问个事啊,这块要注意一下啊,就是但是呢,它支持更新操作,它原理上跟汉文一样,就我们说的下载下来,改完了之后写回去啊写回去但是。他不是你执行这个命令的时候,他立马去操作的,他要等一会儿啊,等到合适的一个时机去做这个事儿啊,大要注意一下啊,之后呢,是我们所聊的艾这个东西啊,它是一个分布式的可扩展的,支持海量数据存储的一个搜的一个数据库。啊,因为我们说了它是一个存储的框架,之后是我们所聊的它的一个数据模型,啊,数据模型方面,那我们看一下这个数据模型大概是什么样的。呃,应该是有一张。这个是一张表吧,啊,假如说这我们画成白板。
04:02
是一张表,然后上面。一行左边一行对吧,这样如果说我给它隔开啊,给它隔开。这一块叫什么?吧啊,这个表你无论怎么创建,这个是自带的啊,必须要有的,第二个这块应该写什么CF对吧?啊CF这是。Family不是cross fair,好吧,好,这个是列足。啊,不是来读。然后接下来我们有多条数据对吧?啊有多条数据,好,现在呢,假如说有1001,这个数据有1002,这个数据有1003啊有1003 OK,那接下来这个地方呢,是。一这个叫in负二可以吧,啊,In for,二好,当我们是不是见表的时候。假如说你没有插入这个101102103,是不是接表的时候只有这些东西。
05:03
对吧,啊,没有说具体的列好,那接下来我往里面插入一条数据,1001 name叫张三,那实际上它插入了一条什么,在这来了一个什么name叫张三,对吧,张三,甚至我们还可以再对这个101插入一个,那叫李四。对吧,他们俩就是时间戳不一样嘛,时间说不一样啊,这个小东西叫什么。叫Excel吧,啊定位的时间波动叫L啊叫cel单元格啊单元格,那你可以在里边动态的增加很多的什么。练啊,你有那有。Age address对吧,还有那个什么其他的一些东西等等内容,那同样的我1002。是不是也可以插入很多数据啊,哎,我查数据呢,我一负一没有数据,我只有一符二,这来一个什么,假如说来一个ad是吧。
06:01
北京。啊,然后又覆盖了来到上海了,对吧,上海等等这些地方。这意思,那同样的这个东西也是一个单元格吧,啊,那有同学可能在想了,那你音符11002音符一这是不是空的。存储的时候应该是什么样子?那如果说你这个关于波音里边没有那种没有sex等等这些东西,那在存储的时候,这块就不占存储空间。不占存储空间能听懂啊,它是不占存储空间的,所以它整个的一个表,如果说你真的想把这个表结构画全,画全应该是这个样子的。如果说你想把它补全的话,是不是这个样子。对吧,整个的,诶,这有一个列对吧?啊,这还有一个列信息啊列信息这里边呢,还有一个列信息,那其实你看起来对于h base这张表啊,他可能哎这有数据,这有数据,这有数据,哎这有数据,这有数据其他地方。没有数据啊,这个是我们所说的HB存储的一个特点,叫稀疏性。
07:03
稀疏啊,稀疏性那。之前应该学那个,但是不知道大家忘不忘。啊,没有忘是吗?没有学是吗?啊,反正我还没说什么东西呢,就没有学了啊是那个矩阵,学矩阵的时候里边有个什么吸收矩阵,想想吸收矩阵是什么样子。什么东西啊,矩阵是什么东西是吧?就类似于这种感觉吧,啊就是有的地方有数,有的地方没有数吗?对吧?收应该是零,矩阵里面应该是零是吧?啊,零可以不写吧啊,零以不写对吧?啊是这个意思,也就是说它是吸收性的,吸收的它重要的是在存储这块,如果说它没有这个东西啊,那就空着,能听懂就空着,不占存储空间,它不像MY搜,MY搜是不是也允许你不传值啊,但是它一定有一个什么东西啊,默认值对吧?你硬的类型默认值假如说是零,或者说你空的默认值是,那么这那占不了存储空间啊,这样它占一个存储空间,但是对于HVS来说,它是吸收的,它不占存储空间,能听懂这个意思。
08:14
对吧,它是讲的这个事啊,所以呢,我们说的这个表画出来是逻辑结构,它真正存储的时候,我们看一下真正存储的时候,这是逻辑结构吧,因为画出来好看一点,表结构嘛,但实际存储的时候它是怎么存的?一个列一个列的来成的。啊,一个列就一行数列,一个列一个数列,那这个你没有这个列我就不存,那会展成什空间吗?不会对吧?啊,存储的时候它是这样的,所以你要分清,这个是我们所聊的逻辑结构,就是你通过图解的形式给人家去表达这个事情,因为这样好看的懂,对吧?那这个是真正它在底层存储的时候,它是一个列一个列子存的,当然我们还知道一个点,这个东西是属于一个列组的,它存在一个文件夹里边吧,假如说还有一个因符二是不是存在另外一个文件夹里边啊,对吧?这两个是分离的,存储方面分离的,你不要想着,哎,它都是ROOKIE1的。
09:07
那是不是这个数据都在一块,不是的啊,不是这意思,那只有一个列组的数据干什么在一块?好之后是我们所聊的这个数据模型啊,数据模型,那这里边呢,我们要知道的,其实。你要了解这个数据模型就是对应的跟MY。那几个概念去理解吧,啊,MY那这边呢是H,我们做一个对比,MY第一层是我们说的database DB。对吧,数据库叫什么?那space ns吧,NS好,这里面呢是table。那我这边对应的是什么。Reading吗?Reading只不过说是NN的关系对吧?啊,一对N的关系,你那边是一张表,我这边呢是N个reading对吧?N可以等于一。
10:01
N可以的,我们创建的时候是不是只有一个V0,我们这也看到了什么在线的约定数为一吧,啊是这意思啊,那接下来你是不是列啊。Column对吧,而我呢,列组对吧?那接下来你是具体的数据了吧,那我其实也是具体的数据了,只不过说它数据的形式是列加什么。就是列名加上我们所长的那个VALUE6吧,啊,Value它这个组合体是一个什么插入的数据能听懂啊,就是列这个东西本身对于h base来说是h base的数据。能听懂吧,啊,你不要想着,因为大家都有一个先入为主的概念,就想着列应该是属于表级别上的东西,对吧,如果你先选你,你这样反过来想一下,如果你先学的是你很难理解的就是MY这种。是因为你们先学了MY搜,大家都想着应该列这个东西呢,就算做。定好的这个东西对吧,相当于原数据这种级别的,那现在告诉你列相当于数据,你很难转换过来这个思路对吧,那你要理解的时候,这个东西呢,对于I来说,其实列呢,是它的一个数据啊,你要想清楚这个问题啊,其实就是看你先学哪个,如果说你先学的,那你学麦的时候也有这个问题啊,也有这个问题啊。
11:19
好,这个是我们所说的中间的一个结构啊,中间什么column啊,STEM这是更细一层的,是具体的数据里边的东西了吧,啊跟我们上面所说的存储模型上面有关系啊,最后这个架构。这个架构呢,我们就不聊了,后面呢,我们看它对。啊之后呢,就安装跟这个下操作,下操作呢,无非就是两块,一个是我们所说的什么DDL啊,一个是DML2块吧,啊分成两块,这是表什么NS它的一个什么。增删改查对吧,那这个是数据的增删改查对吧?增删改查,其实这个才是最重要的啊,重点那三。
12:06
不的,对吧,啊不的。的改还是不得吧,啊,改不增山改茶茶就是两个,一个是盖,一个是SKY,对吧?啊SKY而且的时候是不是可以拿出来所有的数据啊,所有的数据就是这意思,其实你不通过SKY去拿也可以,还有一种办法啊,就是如果说你刷到文件里边了,你可以用h base有一个命令可以查看那个数据,因为那个数据我们说了,它是以HL形式存在的,对吧,但是你正常的去拿拿不到啊,特殊命令要加几个参数去拿,等会呢,我们可以看一下,因为我们等会要讲一个flash啊,等会讲一个SHOK,这是操作,那你记住两块就行了,那你一定要结合着我们所讲的视角操作去类比的,今天我们会讲到那个。API的一个操作啊,你要去做相应的一个对比啊来看啊。
13:00
之后呢,是我们讲的这个价格原理啊,这块呢,我们再过一遍,快速的过一遍。H base它是一个存储框架,它依赖于HDFS的啊,相当于在HDF之上又建立一层高层的啊,因为HDFS本身是不是建立在Linux本地分电系统上的一个分电系统啊,那H它是建立在HD之上的一个存储系统啊系统,所以呢,你还是电压器,第二方面S呢又依赖于如K进行工作的。对吧,又依赖运输K进行工作的,那今天呢,我们就能看到这个点,好,那对于本身来说,它有一个核心的叫h master。啊,就老大master嘛,啊,老大这管理的整个这个原数据的,但是对于h base这个东西来说,因为他要做的是随机在HD上去进行。写操作,所以它这个原数据管理还是蛮复杂的,所以呢,呃,对于HV h master来说,它这个工作量太大了,他把部分功能啊,就是跟客户端交互的那一部分功能交给了K宝。
14:08
交给了铁宝啊,今天呢,我们就能看到这个点,OK,那之后呢,是他要跟ZK进行通信,因为你要把数据交给他,你是不是要跟他进行通信啊,接下来是我们连。第二大组建啊叫reading so,对吧,叫reading,那这个呢,是我们所说的真正存储数据的地方,也就管理reading的地方啊,管理reading的地方OK。那首先它里边有一个核心的组件叫。H log或者叫wa也可以啊,Wal也可以啊,哎,H log这个东西叫做预写日志啊,预写日志啊,它是跟写操作相关的,对吧?啊跟写操作相关的,那真正核心的是我们要做到这个什么。H reading reading也就是管理一张一张的表,而且呢,一个reading可以管理多个reading对吧,啊,多个reading OK,那接下来是我们reading里边表里边就是对应的this是吧。
15:03
啊,那这块对应的是store,其实store呢,跟列组是有对应关系的,那我们再来想一下,这个列足跟之间是一对一还是一对多,还是什么关系。是不一个列会对应多个多。对吧。跟没关系啊,我讲的是store,整个的store,这是一个整体。对吧,为什么。因为你一切你store也要切开嘛,对吧,你重点的不就切开了一个store吗?你切reading不就是为了将数据切开嘛,那我们说的数据不是存在速度吗?那你现在假如说当前这个reading。是一张完整的表啊,就是还没切的时候,还没到那么大,刚开始创建的时候,对吧,那这个数据不断的去增增增增增到一定大小的时候,是不是切开啊,那一切一分为二,是不是当前它是不是我们所说的CF1,这个是C2,那现在CF1是不是变成了两个速度。
16:11
上一个下一个,这个是不是也变成两个对吧?啊,这也变成两个是这个意思啊,那也就是说是可以对应多个,但是这多个一定存在于不同的规定里边,对不对。听这句话就是说我们刚才所聊的列图对应多个多,这个应该没问题吧,刚才我们说的,因为它要切分嘛,啊,其实把多给它切开了,好,那接下来第二个问题就直接就对了,第二个问题是。这个列对应的,如果它对应多个,那这多个多一定在不同的region里边,这句话对不对?不对呀,那那这样换句话问啊,换句话问同一个微里边的。
17:05
不同的可能对应同一个列组吗?不同。不能吧,因为你看一下存储结构上面一一是不两个文件夹呀,一是不在个文夹一个文,那个文件夹就是我们所说的一个能听懂啊,当时不讲了,它是存储方面隔离的吗?就是通过这个列图来隔离的啊,所以呢,这个你看到的当前我们这个图上面,这不是有一个HVD吗?而且我在这还画了什么。省略号,所以这个地方是不是你创建的时候可以创建更多的列组啊,啊可以创建很多列组,一个两个啊很多的一个列组,那也就是说这里面无论一个两个三个四个五个列组,假如五个列组是不是五个列五个。啊,这个问题就刚才说的是这五个做一定不会来自于同一个列组,对吧?啊这个要记住就是换句话说,就刚才我们所说的话,如果一个列图对应多个多,那么这多个斯一定在不同的reading里边没问题吧。
18:08
对吧,那换句话说,如果这句话不对的话,那也就是说一个列组可以对应多个,So,那多个可以在同一个规定,如果说我前面那句话不对,是不是应该这句话啊,这个是才是不对的吧,这个里边同一个reading里边。不同的数一定不会是什么。同一个列族的啊,因为他是。存储方面要干什么隔离的啊,存储方面隔离的放在不同的文件夹里边啊,它是来自于不同的自动,你想一下我们当时看到的IN1文件夹跟二文件夹对吧?啊两个文件夹它是这样来的啊,它是这样来的,OK,那之后呢,这个store里边就简单了。因为到了store就存储数据的地方了,那对于我们所学过的存储数据就两个地方吧,一个是内存啊,一个是磁盘啊磁盘那这个内存呢,它有一个啊,有一个不断的去刷写啊,不断的要往外刷啊,往外往外刷,OK,刷写完了之后呢,形成了一个缩,当然刷写的时候它在这个执行刷写的时候就直接是跟H点交互的,其实这个东西应该是放在这,我当时就解释过了,对吧,应该是放在这,但是呢,Fair呢,实际上是属于h base的组件,所以把它画在这啊,其实这个缩虽然在那个H上存着,但是属属于什么。
19:26
H base管理的吧,啊是h base管理的一个文件啊,而且呢,这里边h file是我们所说的什么东西。格式文件格式对吧,它跟ts doc pupp这种东西是。同等级别的啊,讲的是文件格式啊,文件格式按这种文件格式呢,它里面是按PV这种存的啊,KV存的之后呢,是调用这个客户端去存,除了我们所说的多菲要存这个hlo也要。要存到昨天我们还看了一块代码吧,他说同步是吧,先开始设一不断追加不同步在内存当中的构建那个内容,然后追加对吧,然后一次性去干什么同步,把一个批量的去同步完成,同完成之后呢,如果说失败了,是回滚版本做数数据啊,对吧?啊做这个事他一定要去同步的同步的。
20:14
啊之后呢,说我们所说的客户端,客户端呢,先连CK再找这个地方啊,再找这个地方,OK,这是我们所讲的整个架构里面内容啊,架构里面内容你要跟我们,你在想这些组件的时候。跟我们所说的逻辑结构结合着去想一想,就是我们提到的那些什么表啊,Rookie啊,啊等等这些东西,再往下去深享一步啊,深下一步,OK,这是这里面的一个点,之后呢,是我们所说的一个写数据流程啊,那写数据流程是这样的第一步。去UK当中找一个东西,找什么东西。叫me达表在哪是不是对吧,Me达表呢叫原数据表,这个表里边存的东西我们也看了。
21:04
其实就是那些表存在某些机器上的一个什么。数据对吧,啊,某些表那个数据OK,那找到这个内容之后,他接下来去访问这个维达表,读取一下我当前想访问的那个什么。对吧,在哪吧?啊在那之后呢,他把这个东西缓存在哪客户端啊,缓存在客户端方便查询的,就做这个事,对吧,你自己有时候如果说要写类似的代码的话,这个客户端要一直开着,要后端去用,是不是自己也可以做这个事儿啊,我先查一下,那其实真正的逻辑应该是这样的。啊,如果说加上那个内容,他第一步应该去干什么。先找缓存对吧,但是如果说你这个客户端新起了,那肯定找不到了,是不是走什么。如K返回,然后来,然后再来吧,然后把它写到缓存吧,写到缓存,那如果说你客户端没关,下一次再对这张表格操作的时候,还需要走这两步吗?不需要了,因为缓存里面是不是有呗。
22:03
除非是诶你之前找到在103,但是我读到103去一访问103挂掉了。是不是之前这个原数据更新了呀,能听懂这意思吗?就是我第一次啊,我刚才所说的第一次找到,是不是放到这儿,把这个假如说sto表在1003啊,103这个机械是不是存在这。存在,这之后第二次再访问100STUDENT的这张表的时候,是不是直接去103读?缓存吧,不用连CK不用再连这个机器了吧,啊,直接找103发现,诶,此时103挂掉了。那他要干什么?重新去读吧,啊,重新又去找了,是这意思啊,因为他挂掉,如果说他没有挂掉,这个表确实还在103。那就接着访问就完了,对吧?啊就不用走前台,就是其实就做一个加速查询吧,啊就是很多框架都类似于在客户端有缓存的啊,很多都是很多框架都有好之后呢,是我们所说的找到103这个机器之后啊S丢表确实在这对吧,找到103之后,接下来我们所聊的当时所聊的是不是先写。
23:09
预写入日,然后写内存对吧,但是实际的一个过程,我们看了代码源码当中一个注释对吧,它是怎么写的,什么那些锁呀,释放锁,这个我们就不管了,对吧,我们关心的是这两个东西怎么写的,首先他在内存当中说build的,WD的,还有印象吗?构建。我吧,然后说。追加的,但是说了一个not。SY吧,不同步对吧?Not,他说了对吧?那接下来是干什么,是不是写买做对吧,写买说吧写说,然后再去干什么。SYNC,那对于这个整个的它有一个finally对吧,Finally里面最后呢去判断。
24:04
有没有发生异常,如果发生异常的话,它是不是把有一个属性改为了。True对吧,它之前定义is wrong roll back memory那个东西定义的时候等于for吧,抓里边可以把它改成出,改成出之后他就判断当年如果为数的话,他去。Doca memory对吧?啊memory这意思也就是说实际上你可以把它说这个写完了,那你想想看,他做这个事情的一个标志,是不是相当于把他必须他写完了,你这个东西才有效。一旦他没写完,你要回本你也不睡觉吧,对吧,这意思,所以我们表述上说先写到W,再写到霉生素,这个是什么没有问题的对吧?啊没有问题的,这个要注意一下啊。啊,这个是我们所说的整个的一个写流程,当然写流程之后呢,呃,我们还带着大家看了一下K里边存的那个信息,对吧?啊,同时呢,这个。也扫描了一下这张表吧,而且我们最关心的那一行数据,一个说可以对应一行数据吧,是不是核心的有四个列。
25:06
还记得吗?没大表里有四个吧,我们最关心的有一个叫什么说?对吧,搜索这个东西,那这个东西呢,就记录了当前这个瑞在哪个机器上去维护着啊,去维护着,而且你要知道是他这个Meta表里边不是一张表一个一条数据,而是什么。一个一条数据,也就是说一张表建立出来SQ这张表将来可能对应多条数据能听懂对吧?啊同因为你做切分了,而且切分之后很有可能不在同一台机器去维护的吧。那如果说一条数据,那这怎么表示啊,表示不了啊,它一定是多条,但是每一条里边一定会告诉你当前这个规存储的rie的一个什么。范围啊,他一定会告诉你存储的什么范围啊,这个要注意一下就OK了啊,一定会告诉你,要不然你怎么定位这个数据,它是不是就是按照rookie这个来定位的啊,完全的按照rookie来定位的,这个是我们所说的一个什么。
26:08
写数据的一个流程啊,因为他这个写操作比读操作要简单。啊,我们之前提到了,H是一个读笔写慢的国家啊,之前所接触到的存储国家来说,应该都是读比写快吧,但H不是,佩斯呢,读比写慢,因为他读的时候做的事情更多啊,做的事情更多。
我来说两句