00:00
好,那刚才我们所聊的那个写数据流程,是不是对于客户端来说,他把它写到内存就已经结束了,对吧,给客户端发送一个AK通知,客户端诶已经写完成了,但是对于我们h base这个系统来说,这个东西呢还没有结束。因为他还要做合久必分分久必合的事,对吧?啊,在合久必分分久必必合之前呢,还要做一个flash的操作啊,Flash其实很简单,就是这个地方啊,我们稍微过一下这个PPT,其实它比较简单,就正常的是不是做里边。有一个麦说,还有说菲尔这块呢,我就把它画到哪了。HDFS里边,因为它真正的刷写的时候就刷写到了HDFS,对吧,HDFSOK,那也就是说这个内存。在一定条件下会干什么?进行刷新,不是说你不能说写一条就刷新一次,写一条就刷一次了,如果说真的写一条刷一次,我还不如不要这个内存了。我直接由客户端发过去,我直接写到磁盘就得了呗,对吧,那一定是有条件的,那这个条件大家想一下,就我们能想到的应该有哪些。
01:06
时间和大小吧,时间和大小,它确实有这两个啊,确实有这两个,OK,那我们看一下经过一次刷写变成了什么。文件对吧?So,啊,经过了一个刷写,又经过了刷写,又形成了更多的文件对吧?啊,整个的就是store刷写下来的缩写,而且呢,你要注意就是这个store,当时我们说的同一个reading里面store是不同的什么。列出,所以刷写出来的文件也在两个不同的什么。在这上体现的是两个不同的文件夹吧,啊,这两个东西呢,是分开的,而且最后合并的时候,它也仅在这块合并,仅在这块合并,不会把它们俩合并在一块啊,不会把它如果说最后合并的时候把他们俩合并在一块,起初分就没有意义了,是不是啊,起初分就没有意义了,他做这个区分呢,就是为了读的时候能加一点速,因为更多读的时候,如果说我们用get这种方式是不是可以指定列弧啊。
02:03
假如说指定了列组,假如说我数据我也不知道在哪,是不是会涉及到全部数据的一个扫描啊,那我指定了音符一列组,那我是不是扫描这块,这块需要扫描吗。不需要吧,这就是隔离存储的一个好处,对吧?啊,隔离存储的一个好处就是这个意思,那我们就只需要扫描一边就够啊,扫描一边是吧?OK,这个呢,是我们所刷写的一个内容,好,那接下来我们就看一下什么时候来刷写啊,这里边呢,提供了一些参数啊,这些参数呢在我们那什么。默认配置参数里边都能找到啊,这个是不是我们之前说的默认的配置参数啊,我们来搜一下,看到F直接搜什么flash就行了啊flash就行了,OK,第一个。来注意看这些属性,大家在看这些属性的时候一定要切记,前面挨杯你就不用看了。基本上都有吧,啊都有这个,因为属于一个配置文件,所以接下来这个是要关注的。
03:04
它叫reading solo,因为这个地方它说了一个的一个set指的是整个什么。Reading的一个内存。因为我们之前说的那个麦素在哪了。在region里边有小的store,每一个store里边有一个memory,那也就是说一个ready是不是有很多的memory?一个reading so里边有很多的reading,那一个reading里边是不是有又有很多的一个。更多吧,那这个地方你一定要注意,就是reading级别的,当reading so,所有的加在一块超过这个值的时候,什么?刷新,而且这个值他说了,你看他是个空的吧。来看这。40%,谁的40%?
04:04
堆内存的40%,那有同学说堆内存多大呢?设定的值,这个我们之前提到过,V0SOLO是不是一个TVM的一个进程。之前我们启动的时候,Java-CP有一个杠XMS。杠XX什么东西对吧,有很多内容就是最大的一个内存,就通过这个地方来指定的,能理解啊,当然你可以在AV里面去干什么,去配置啊,配置它采用的也就是说你当前VSO的这个服务,在启动过程当中,最大的那个对应内存的那个什么。40%啊,假设我如果说整个威尼斯沃给了两个G的资源。对吧,搜索给了两个G的一个资源,那到头大的时候去刷新。二乘以0.40.8个G的时候,对吧?啊,0.8个G的时候,也就这个时候再去刷写,而且这一块呢,你要注意的是它是一个阻塞性。
05:11
主侧线在进行这种写操作的时候,读写全部给它关闭。啊,因为他认为这个东西过高了啊,过高了,所以说我们继续往下搜,有第二个就在,其实就在这个下面,在这。啊,在这来看一下它叫什么,你对比一下这个这个参数,我把它粘过来,你看一下这两个参数,你觉得他们俩有没有关系,我把它放在这,等会我把它删掉。有没有关系,那这两个属性肯定有关系吧,来看一下他叫什么,叫刚才我们那个属性的叫里下线。对吧,它也有个值是空的,然后这个地方呢,说来它是默认的95%,什么95%呢,是它的95%。
06:02
这个是不是刚才我们看到那个0.4的属性啊,好,我们刚才举个例子,对应内存大小两个G,它是0.4。对吧,再乘以什么0.95,好,这个是干什么用的呢?其实它到这个值的时候就开始刷新,但是有可能会发生这种情况,我即使开始刷写了,但是由于你客户端写的速度比我这边刷写的速度还快。是不是这个值一直还在往上转。对吧,之前这个值应该乘出来应该0.38是吧。就到了对应内存的0.38的时候,就开始刷新了。但是由于我写的速度,这个时候不是阻塞写啊,不是阻塞,没有阻塞直接就刷写,另一边呢,还可以利用那个内存,一边就客户端一边往里面写数据,我这边一边刷写,能听懂这个意思好,但是由于我写速度比刷写的速度快。是不是这个0.38还继续往上涨啊,当它涨到0.4的时候。
07:01
阻塞了客户端,不好意思,你先停一下,因为你这样写下去,我内存很容易就干什么崩掉了,因为你写的速度比我刷写的速度快啊,很容易就崩掉了,所以他做了一个什么限制到达40%的时候,你就关闭,对于客户端屏蔽了,不要再写了,对吧,不要再写了,等我刷写到什么。0.95就是0.38以下的时候,再把这个打开能听懂啊,这个就是我们所说的这个下线的一个作用啊,其实到这个点的时候,它就开始去刷写了,但是呢,刷写由于我们所说的。伸展速度快了。啊,这个相当于生产和这边刷写下来是不是相当于消费啊,对吧,消费速度慢了,是不是产生数据积压,数据积压这块内存是不是无限往上涨啊,那如果说不阻塞的话,这个内存是不是很可能崩掉,整个so就挂掉了吧,那因为防止这种情况出现,如果说你挂掉你用户还是用不了啊,我还不如说现在呢,我把用户这边的一个。
08:03
给限制了对吧,反正如果说最后崩了,你用户也用不了,那我还不如在正常情况下,我我暂停一下用户的新操作,等我很快就能恢复嘛,因为把用户停了,我去刷写的时候,是不是很快就能降下来做这个事的啊,这第二个其实我们最重要的就是这两个参数吧,0.38和什么0.4,它是reading so级别的,全局的到达这个大小的时候,所有的M都要干什么?刷写啊,所有的microto都要去刷写,当然它在刷写的时候,它会给多个mato做个排序。啊,做个排序,就是说尽量的先把那个大的给他刷写出去了啊,他这里面做个排序,但是都要去刷写了,只不过说在刷写过程当中,他做一个排序而已,啊排序而已,好这个是我们所说的,是不是我们看到的。大小级别的,当时我们分析了是不是一个大小一个时间啊,这个时候大小啊,而且是谁的大小。V0SO的大小吧,啊,V0的大小,OK,那我们继续往下找来啊,其实就在这。
09:10
这个东西。这个东西这个是干什么用的呢。他说默认一个小时。他说,如果把这个东西设置为零,就等于。关闭了一个disable是不是关闭了,关闭了什么自动刷新啊,自动刷新自动刷是吧?啊自动刷自动刷OK,那这个地方就是说内存当中,当你文件因为我们刚才所说的到了40%的时候才会发现,如果说到了晚上没有人去操作这个数据的时候。我只有两条数据,那这两条数据一直放在内存吗?也要干什么也要刷下去。能运动。一个小时,好,这一个小时有一个意思啊。那我们想一下这个一个小时呢,是。
10:02
当前这个内存第一条数据到达一个小时,还是最后一条数据到达一个小时?对吧,大家觉得哪个更合理一点,第一条吗?大家都觉得会第一条吗?一直往。应该是最后一条吧。应该是最后一条吧。更合理一点嘛,因为这个东西是不是我们所讲的长时间没操作呀。长时间没操作,是不是没有达到到达。不会到达内存一个大小啊,如果说我持续的一个小时都在写东西,只不过我写的数据比较少,没有触发内存到达内存大小而已,这个时候不刷的,这个时候不刷了,这快一个小时呢,指的是最后一次编辑的时间。
11:08
能听懂,讲的是最后一次编辑时间,不是第一次啊,不是第一次,不是针对于某一个文件啊,某一个某一条数据说记录一下啊,你这个数据是11点来的,你这个数据11:10来的啊,到了十,呃11点是到了12点,把11点这个数据刷下去,不是这个意思,他一刷呢,整个内存都要刷下去,它利用的是当前这个内存最后一次的什么。操作时间啊,最后一次的编辑时间啊,这个要注意一下,就最后一次,因为最后一次编辑时间如果过了一个小时,就证明这一个小时都没有新的数据干什么。进来了都没有新的数据进来,那我要干什么?刷起了啊,我就刷新了,指的是这个意思,不是第一条数据啊,最后一条数据好,这个时候我们看到第二种是不是时间方面的,两个都看到了吧,一个内存,一个时间,当然它还有啊,还有继续。
12:04
这个。来看级别是不是变了。之前我们也看到了一个什么思路。内存大小的一个内容嘛,但是那个地方是不是V0SO级别啊,0.40.95那个东西对吧?啊,那这个地方是什么级别,是V级别,说reading级别里面内存flash的一个S。幺三四二幺七七二八一百二十八幢。啊,也就内存单个什么reading里边的m store到达128兆的时候就会干什么。刷写这个时候呢,是刷写的当前这一个规定的数据。能听懂,他不会把整个reading所有的数据,因为我们之前说所说的一个reading里边有什么多个reading吧,多个reading好第一个条件是这些reading加在一块,超过了那个什么40%,95%的时候,对吧,他要全局的去刷写,那现在我们这个128兆的一个参数是什么,是当前这个reading。
13:12
如果说它里面M素到达了128兆的时候。到达了128的时候,单个的reading去做什么,去做刷写能听懂啊,是这个意思啊,这意思,单个的reading去做刷写的啊,就做刷写的这意思啊,底下还有一些什么reading的一个这个东西其实就还好,呃,然后还有啊呃,还有什么东西呢?呃,这个其他的其实就不是关于那个flash的一个size的一个问题了啊这是什么flash做了一个预刷写啊,做了预刷写,因为呃,128兆这个东西啊,刷写的速度还是。比较慢,因为太大了嘛,所以它里边有一些预预刷写的操作,倒不是说这个条件会触发它的一个刷写,这个是五兆啊,这个五兆啊,什么预刷写。对于这个里边我们关心的几个条件就这三个,但是在老版本当中呢,还有一个条件这里边已经没了,现在高端本当中已经没了一除了啊呃,倒不是说这个条件没了,而是说他已经不暴露给用户了啊,不暴露维护了这个。
14:18
当war文件的数量超过这个值的时候。啊,最大值的时候,它会去刷新默认值呢,是32啊,默认值32,现在呢,你已经搜不到这个属性了。但是他其实还有这个属性,只是不暴露给用户了啊,不暴露给用户了,因为你从官方文档上面能找到。这是官网的吧,我们点开。CTRLFCTRLV。嗯。还没加载完刷新箱。康康费有吧,来看一下这个之前这个地方讲的是什么。
15:03
麦flash吧。来看这。上限什么下限等等这些东西吧,他还没有提内存大小,就单个的内存大小。啊,因为他这个提的是什么,整个reading的一个级别的一个内容,好,他现在说了当。一个数量什么数量?Wal log的一个数量。在这个值的时候要去干什么?写到磁盘吧,啊,将会写到磁盘,但是其实你在这里面就找不到那个默认值啊,在代码里面能找到啊,代码里面的那这个地方指的是文件的一个什么个数,那有同学可能会问了,那到底我按什么东西来。那文件的个数,你怎么决定这个文件个数呢?你正常的写这个WL,我是写进去一次生成一个文件还是什么样子呢?对吧,所以他还有另外一个属性,另外一个属性呢,他是不好找了啊,找了一篇帖子啊,找了一个帖子在这。
16:02
刚才我们看到的默认值呢,是30,老版本当中啊,可以配这个值可以配,他说线上配置128,因为老版本这个地方呢,人家是拿什么。094我们现在用的1.3.1吧,你看那个属性在我们这个地方已经干什么找不到了啊,老版本,所以说他找了一批比较老的帖子啊,人家当时介绍了啊,刚才在这他说这个地方是他们公司的一个线上配置啊,就是说默认值是32,他把它改成什么。128好,接下来还有一个东西啊,这个。还有个这个值。啊,这个值这个叫什么。的一个block size这个东西呢,就。决定了h log的一个大小。刚才不是说这个s log到达这么大。不是到达这么多个的时候会进行刷写嘛,对吧,那到底什么东西来决定它一个多大呢,来看。
17:04
他说线上配置,他把它配置是什么,512兆,默认的配置是多少,128兆一个,也就是说当我们W,我们不断的往里追加嘛,对吧,不断往里追加,诶到了128兆,我形成一个什么新的,也形成一个新的,因为这个也很合理吧,这个也很合理,因为你W假如说你机器的内存配的特别大。对吧,你reading特别多,我40%的时候。可能我4%,假如说公司特别有钱,一台机器呢,40%的时候是一个T,假设啊假设是一个T,那你想想看,你在里边存了一个T的内存的数据,才去刷写那W。这个东西得多大呀,而且这个东西一个T的数据刷写得耗多长时间啊。很棒吧,所以他对于wa这块还做了一个什么?限制就防止你内存配置特别大的,所以呢,因为war这个东西有多大,是不是也直接挂钩了M缩里的大小。
18:07
他们俩有关系吧,你写一个数据是不是要写一个waal啊,对吧,所以内存因为你防止你在机器整个公司应用的时候,机器内存配的过大了,对吧,所以他还做了一个什么waal这个的一个限制啊,文件大小的一个限制,说你超过了32个我就干什么,我就也要刷新了,能听懂这个很合理的啊,就是我们刚才举的例子吧,假设你40%做到一个T了,那你触发这种条件刷写的时候,而且呢,你是一直在不断的追加数据的,是不是也不会到什么一个小时那个车间啊。对吧,所以它最终会触发到哪啊。40%这种条件吧,那假如说真的到40%了,那这个时候刷写的时候。太可怕了吧,这种,所以他在对于W又做了一个什么限制,能听懂这个。没问题吧,啊,这个是我们所聊的这个点啊,但是现在呢,只不过说。
19:00
你现在在这个地方已经看不到一个属性了啊,看到他已经不对用户暴露了,所以呢,我之前呢,准备了一个铁呢,这是人家讲0.94MP的老的配置里边的一个东西啊,现在呢,还是这个默认值没变啊,默认值被变啊,只是说现在不可配的。只是说他不暴露用户了,不做这个事了。这个呢,是我们所说的整个的一个什么,刷写这块的一个东西啊,刷写这块的一个东西,就是关于刷写的内容。因为只有当数据真正的刷写到磁盘之后。你用户的一个写操作才可以说真正完成了,对吧,但是对于用户来说,其实我的操作真正完成在什么时候。写到内存吧,啊写到因为用户觉得写到内存之后,你有W有内存数据应该不会丢了,对吧?啊不会丢了,但是对于H来说,写操作真正完成是要把这个数据干什么,写到磁盘啊写到磁盘这个意思。
我来说两句