00:02
好,我们介绍完详细的写流程之后呢,紧接着我们就来介绍漫道的刷写啊,它的刷写呢是由多个线程控制的,并且条件呢是互相独立的,每一个线程都按照自己的条件去监控,一旦满足自己的某个条件,就会去执行刷写流程,那首先第一个刷写流程呢,哎。是以一个大小来进行识别的,这个大小大家非常熟悉,就叫128兆这个,呃,其实也不需要做过多介绍,这个就是HDS的块大小啊,我们既然呢是写文件到HDS上面,那按照HD块大小呢,肯定是效率最高的啊,是效率最高的,呃呃,他每次传是一个一个块传嘛,你按照128兆来传,它就是按照块大小来讲,效率最高,呃,我们可以取一个简单的例子啊,呃,如果你在传数据的时候呢,你传150兆。那对HDS底层而言,你你刷写一百五兆,那它是怎么来传的呢?底层会按两次来进行传输。
01:00
一次是128兆,那一次是剩下的嘛,对吧,超过1.1倍就会切分了啊,那如果你是按照256兆来进行上传的话,它也会执行两次啊,也会执行两次,我们可以看得出来,同样是拿小车运两次啊,运两次那我们为什么不运满呢?那运满就是256兆,那你呢,为什么要执行两次呢?一次一次来不是更贴合底层一点嘛,那就是128兆啊,按照这个东西拿来进行刷写,效率更高啊,效率更高兆啊,当我们的memory到大小达到这么一个128兆时候呢,它这个region里面所有的memory道都会刷新,好咱们可以呢截一下上面这个图啊,来给大家解释一下。好,我们对应的来去对照一下啊,它说的什么意思呢?就是说如果某一个memory store啊,就是每一个store对应的那个memory对不对?如果它对应的一个memory到达到了128兆,那么整个reading看到吗?整个reading都会去刷写啊,这时候可能有的同学就有一个问题了,哎,老师,如果这个一啊,Memory到一达到128兆了,MEMORY2还才只有十兆,那它也刷写吗?这会不会造成小文件问题啊?首先有一点毫无质疑,人家都说了会刷写,那它肯定会造成小文件问题,对不对?哎,那它难道没有什么问题吗?这里造成小文件问题会不会对HDS造成损害呢?
02:26
那损害呢,是一定会有的,对吧,咱们既然学这个原理呢,它肯定是这么个道理啊,那为什么作者还要这样设计呢?哎,其实作者设计啊也是有道理的,作者设计的点就在于同样的一个region里面的star,它代表什么,代表的是不同的列。对吧,代表的是不同的列啊,不同的列读下面不同的列嘛,那我们呢,在常规使用一个表格写数据的时候啊,你在使用的时候呢,你这个用户啊,就不能这么恶心,你既然设计了两个列足二分天下,那你在网插入一行数据的时候,你应该尽量保证这个列是比较均匀的吧。
03:04
是不是样,你不可能说我设计了两个列组,但是我的信息都在一列组里面,二列组里面基本上是空的,那是你使用的问题,我们再插入一条数据的时候,你应该保证左边的列跟右边列尽量均匀,那如果尽量均匀的话呢,你这个数据再往里面写的时候,它的数据量大小就是差不多的啊,就差不多的,我们为什么要一起刷写呢?哎,一起刷写一起保存,能够把相同一行的这个数据呢,存到类似接近的一个位置啊,类似接近的一个相同时间点落盘嘛,对吧?当然它是在不同文件夹里面啊,在一个时间范围内接近的一个位置啊,那这样的好处就是说我们读数据的时候啊,通常也喜欢按照行来读啊,它按照时间进行扫描的时候呢,效率要更高一点啊,这是我们对应的一个刷写啊,对应那个刷写好,除了这个128兆刷写之外呢,底下还有一个叫当memory到达到了128兆乘以四的时候,这个四呢是一个峰值啊,乘以四的时候呢,会阻止往这个memory store里面写。
04:05
数据同时呢也会刷写啊,它也会刷写,同时呢,我这里面阻止写数据,它有两个判断条件,那为什么两个判断条件呢?这里也说了,因为我们这个线程监控啊,它是周期性的,所以有可能面对数据洪峰,上一次他他来检查的时候只达到120兆,但下次再来检查时候,一下子就到了150兆,是不是有可能啊,它是有可能超过128兆的啊,那我们呢,会明确的设置一个阻止它继续往里写的这么一个条件啊,其实这里啊有一个隐藏的问题啊,为什么要阻止往里写,因为写缓存里面的数据非常重要。啊,写缓存里面的数据非常重要,因为写缓存里面数据就是数据本身,你如果把写缓存给删掉了,你一直往里面写,它不容易内存溢出嘛,内存溢出数据就删掉了,对不对?你要是把写缓存里面的数据删掉了,那就跟你这个服务挂掉了,其实没有区别,你在进行垃圾回收的时候,你也不会回收写缓存里面的数据的,你只能回收别人的。
05:03
接外轮数据一旦被回收,你需要做的操作非常的麻烦啊,非常的麻烦,你还要回过头来到我们最开始的那个预写值里面,一个一个去找,对不对?好,那这个呢,是我们刷写的第一个条件叫大小啊。
我来说两句