00:00
好,那接下来我们来看一下H。是。因为我们知道这个master是存在单点故障的,对吧,但是reading solo这个东西有什么单点故障问题吗?你so,挂掉了,我must只要是活着的,我是不是可以把你的reading调度给其他的人去管理了,就是这个意思,好,那我先启动了一个she,因为接下来我们要看这个内容,叫预分区。预分区,预分区的意思是这样的。就是说我们在创建表的时候。就要。定义好将来这个表分多少个区?啊,就提前规划好,因为你不规划好,他是不是按照默认的什么128兆去分,然后256兆,什么512兆等等这种方式去分啊,最后十个这去分,它可能产生什么。数据新写也就产生了我们S当中的一个热点问题,对吧?啊,客户端几乎绝大部分的一个请求到某一台机器了啊,这个是很不合理的啊,因为那一台就累的要死对吧,其他的闲的要死,那这个不正常啊,所以呢,我们要做好预分区啊,做好预分区那先我们来看一下我们之前的表有做预分区吗?没有对吧?来所有的表诶还没有加载完吗?啊加到了所有的表都是什么?
01:21
一个因为我们所插入的数据有到那么大吗?根本没有吧,根本没有到那么大,所以呢,他只有什么一个。一个分区,那A分区就将来,假如说你分成了五个区,那这块就是五五,而且来看一下,随便点一个进来啊都一样这块。它是根据什么东西来分区呢?根据一个大k and k这个东西来分区的。啊,注意这个东西不是rookie啊,这个东西不是rookie啊,不rie,但是将来数据到每个分区里边是ookie,跟他自己比较。啊,要他跟他进行比较,OK,那我们先来看一个案例啊,看案例对不对,我们可以在创建表的时候。
02:07
FOR1这个排列列一还是一个什么列足对吧,还是一个列足啊,其实你他你要不要无所谓,就是两个列足,然后之后。额外加的那种就是这个。啊,这个东西呢,跟这个什么数组,跟这个数组,那这个数组呢,就会教我们的什么。整个的。表给他划分开,切了四刀,分几个去啊?五个吧,四到五个区吗,你们。好像过来面试的时候有人被问到那个问题吗?就那个问题。就如果说我知道你是来过来上大数据的话,我不会问这个问题。这太简单了呀啊,所以说我劝了很多人去加岛。
03:04
就是当时就没招他,所以现在我没有面试,来看一下这个内容,刷新一下,现在多了一个表吧,叫。大一对吧,来刷新。五个分区对吧?好,那接下来看一下这个内容。大的可一个空的到1000 1000~2000 2000~3000 3000~4000,四千四千到正不错,这个两个空的大里面空的呢是俯冲,这个是正不穷。因为这个无无穷代表什么意思呢?因为你是一个空的对吧,这个空啊,还有这个就刚才说这个空的,那你两个一样大吗?不是的啊不是的,看那这个空呢,是最小的那个值。这个空是最大的那个值,任何值都没有看到,这意思啊,它是这样的,好,那这个主把我们区给它分开了,那接下来rookie假如说来了,它就知道进哪个区了,因为这个start key跟这个and key就是将来跟我们rookie比较。
04:05
好,现在假如说我就是87421这个东西在哪去。这最后一个。我没说比较规则是不是按。按倍比较的在这个里边吧,在这里边它也是跟一样的,跟那个rookie之间的比较规则是比较的啊,就是按倍比较的对吧?啊按倍比较的,那其实这个比较简单一点,如果你这个地方你开头是什么,就进到哪个去吧,当然456789开头的都是进到那个去。以它为开头的对吧,是不是都进到一个去啊。对吗?有没有特例啊?
05:02
四这个东西完全能进到这个是吗。400你告诉我到那个去吗?四进到去吗?进到那个去吗?比我当时怎么聊的。有饼没有大吧,那400都落在这个。不是吗吗?前面相同,我有你没有,我比你大,我比你大的话,你是不往往我前面放啊,你不能我四线都比你大了,你又能往这后面放啊。不能吧,啊是这个意思,所以呢,这个地方其实大家也能感觉的出来,如果说你是这样设计的,这个这个start的PM这样设计的,呃,那你刚才所提到的那个内容,就是说前面完全一个数字,12345,然后后面随便跟,是不是有的时候四在这个里边,有个四在这里边,这样不好,所以如果你start and key就是你的这个东西啊。
06:10
前面我们不叫一个rookie吗?对吧,这个我们把它叫什么分区键。啊,因为有一个代名词更好说一点,叫分区键,它是分区的一个关键字,相当于。啊,分区件是这意思,好,那接下来其实大家能感觉到,刚才我举个例子,如果说是40或者400这种内容的话。或者说四一四四四百一等等,他就是以四开走的,我们开始想着,哎,把四开走的放在一个区,这样更好判断一点啊,但是现在他分到两个区,那有什么办法。让我就看到这个开头,我就知道在哪个区呢。对,就是这样。我rookie,至少。
07:01
有什么?四倍。至少有四位,而且如果说你是四位的话,尽量填四位跟。分区件保持一致,也就是说如果说你rookie来了,前面我统一加X4倍,要不然是0000,我再跟后面一堆数据。对吧,好,第二个我可以加1000,再跟一个,然后加2000,一直到4000,后面跟什么东西无所谓,对吧啊IE因为保证唯一啊,因为rie我们说在这张表里面要唯一吧,既然要唯一的话,你几十一条数据怎么保证唯一性啊。长度是不是要最长啊?能理解这个事吧,我告诉你,你用一位数给我表示唯一的11个数,就是只有一位给你一一个子,你能表示11个数字吗?表示不了啊,你把字母啊那些都都用上,是不是也不够啊,对吧,那我就想办法,我这两位呗,两位是不是一乘对吧,两位还不够,这三位四位是不是保证它这个长度啊,因为这个长度我们说了后面拼接任何东西啊,你可以是拼接任何东西,因为保证微信嘛。
08:11
对吧,你只有四位或者三位,你怎么保证说几十一条数据不一啊,也不可能啊,啊是这意思,所以呢,你后面拼接一个东西,但是我不管你拼接什么东西,你前面这四位,你跟我这个rookie。这个分区线是不是应该它这个模式应该保持一致啊,那这样如果说我前面真是0000111等等这些东西,我是不是一看第一个数字,我就知道他在哪个分区。对吧,那这个时候我是不是可以说,只要以四开头的都落的最后一个问题有没有问题,或者说5678是不是都是这个问题啊,对吧?啊是这个样子啊,那这样其实其实大家也慢慢的通过这种讲,当然刚才我们所说的还是不合理的一种设计方式,因为你45678都在一块。一在一块二在一块儿是不是还是让它产生什么输心血啊,对吧啊还是会产生数据心斜,当然大家其实能体会到你分区键如何设计,是不是会影响到网络未来R的设计。
09:08
对吧,啊,它是能影响到啊,它是能影响到是这意思啊,那第二个。我们继续看啊,这个是刚才我们在命令法里边直接加一个词吧,啊这个呢,传一个这个数组,当然它可以这样传,其实这种方式用的比较少一点,我们看一下它是干什么的。指定什么分区数,这不是吗?不是我们说的一个一个的分区吗?对吧,一个个分区OK,那接下来是给他一个S的一个。啊,整个的内容你想按什么,这个是什么。16进制啊,16进制的一个字符传,OK,那我们看一下啊,这个内容给他过来啊,这种其实用的比较少一点,那少1.ok诶。还是返回来对吧,刷新一下是stop号,点开stop,诶在这个地方15个分区没问题吧,因为我们指定了15个分区,他会按16进制怎分。
10:10
Abcde对吧,16进制嘛,啊,16进制是这个意思啊,这种呢,相对来说比较少一点啊,比较少一点,OK,那我们接着看还有哪几种方法呢,这样我们可以在文件里边来写一个,然后跟一个Li。跟一个文件。啊,跟一个文件这种方式也可以,OK,那我们在这个地方来克隆一个CD o Mo,然后这个对吧,呃,VI一个SPS点点SD啊分曲线好,那这里边呢,那上面写的是abcd是吧?啊那我这A。写几倍随便吧,这样好DD。CC。DBCC,哎,文档当中是abcd,那大家应该知道是。负五就能到A,然后A到BB到CC到B,然后D到,咱们从五个区吧,分成去,但是现在。
11:08
我写成了ABDC。那就有两种情况了,对吧,要不然呢,他是这样的,他是直接是这样的。然后第一个是空到A对吧,A到BB到CC到,哎,不对啊,应该如果说按照顺序的话,第一种情况应该直接B到DD到CC到什么。无。对吧,这个是负五九,如果是这种情况,你发现有没有问题,首先。这个是不是不会有数据。比D大比C小有数据吗?不可能有对吧?哎,它这个分区等于负分区,那还有一个问题就是这个里边。跟这个里面有交叉嘛,对吧?啊啊,他是这样的,他当然是从头往前看,所以说他BD就是C到D的内容啊,都会落到这个分区啊,这个分区全是底上的,那这个不就有问题吗?对吧,但是这是一种情况,因为你自己写的失误啊,写错了对吧,写错了啊另外一种情况,我们想的应该是什么情况A。
12:22
BBCCDD到正无穷,当然前面还有个零到零的那个负无穷到A,对吧?啊负无穷到A,也就是说它系统可会给我们提前把这个文件干啥排个序,是不是两种情况啊,啊两种情况,但其实我们认为这个排序是不是更合理一点,因为如果说他不排序这个东西。就是问题吧,啊这个问题OK,那我们来创建一个到三,我们来一下啊。C来。在这个地方我是叫斯这块,注意因为我是把这个文件创在S的一个加目录上,对吧,所以我可以写什么。相对路径,如果说你不是在这写的,你要写一个绝对路径,能理解这个是吧,走一下。
13:04
然后接下来回来刷新。诶,五个区这个没问题,因为四个键五个区嘛,对吧,还是砍四刀分成五段对吧,点开。按照顺序吧,ABCDAABCD吧,啊是这个意思,也就是说它内部会给我们干什么啊排序,那这样就更合理一点啊,就是系统呢,多做一点事情,就把你的分区键拿过来做个排序啊,如果不排序的话,最后因为用户有时候传错了呀,对吧,写的着急忙慌的写错了,那系统他在设计的层面的时候,是不是把帮你设计了一下,对吧?啊帮你整个的排个序之后呢,再去做一个切分啊,再去做一个切分是这意思,那你也通过一个这个文件,当然其实在整个的这个过程当中啊。呃,用的比较多的可能是那个用一个文件那种方式啊,这三种当中,它相对来比较多一点,或者说这个,但这个直接用什么指定位数十六进制啊,这个比较少一点啊,但是最多的还是在代码当中。
14:03
代码当中,因为创建表的时候,一般代码当中也会去创建表在这个地方来,好,那我们看一下代码当中,那既然你是分区件,刚才都在创建表的那个地方去做的这个事儿了,那你告诉我这个地方应该去哪找啊?应该是create table吧,对吧,当时我稍微提了一下这个东西,但是我估计大家没有印象。考生们看一下是不是create table这个方法它有三个重载的。对吧,第一我们一直用的这第一个吧,因为第二个第三个都跟什么。一分区相关与分区相关,你看第二个传三个参数的这四个参数,这种他要你传一个。分多少个区?对吧?Number reading什么,分多少个区,然后你告诉他start k跟K,他就会把你start跟at k做一个平均。
15:05
现在。啊,一到五啊,分什么五个区,12345对吧,啊等等这样的一个内容是这意思,那做一个平均千分啊,这种比较少一点,那最后还有一种。直接传一个。二维字节数组叫split kiss。就切分的剑。对吧,那我们要思考一下,它为什么是一个二维数度。反正就。来看我们在命令行里边是不是传过字节数组,不是字节数组传过数组啊一二,假如说1000,我们传的是一千二千两千三千四千嘛,那假如说就是1234。我看那就是134好,那这个本身是不是一个速度。对吧,类似于我们在命令行里边是不是传的张三,直接传进去张三的,而在代码里边张三怎么传进去的,是ba.To Ba次把张三跟进去,也就是说命令行里边比你这个代码要高一层。
16:11
那你想看代码里边本身是数组,那不是命令行里边本身是数组,那每一个元素是不是应该也是一个数组?是不是对吧,因为你是这样的,对。命令行里边你写的是1000 2000 3000 4000,是不是一个速度,这个没问题吧,但在代码里边,它只认字节数度,你要去给他传字节速度吧,那本身这一个东西是不是有这个速度?就每一个键,你这个是多个多个键组成的一个大的数组,但是每一个键是不是又是一个数组,对吧?所以这个就是一个什么二维的直接数度了啊,这个要知道它为什么是一个二维的直接速度,就是说你传进去了abcda abcda这四个元素组成的一个数度,但是对于abcd这四个字母来说,对吧,它单独的又是一个什么直接数度,所以形成的是一个二维的直接数度啊,是这意思,也就是说你在代码当中写的时候要写一个什么。
17:15
二倍的这些速度,然后你把每个1000 2000 3000 4000这个东西都把它变成这些速度。放到二维的字节数组里边,能懂意思吧?啊,放到二维字节数组里边,OK,二维字节数组还会创建吗?啊,要限定一个大小先大小。是不是外层的呀,对吧,啊,二倍这数度你不能两个都空着吧,对吧,是不是要限定一个大小啊,是不是,是不是第一层外层的你要限定就是大的这个数组多少倍呀,对吧?其实你要分五个区,那大的你就低于四个呗,你要分六个区,你就大的低于五个呗,是吧?啊是这个意思,好那。再接下来问一个问题哦。
18:01
大家感觉这个B分区提前分多少个区,跟什么东西有关系啊?对吧,我提前规划好将来这个东西分多少个区,那跟什么东西有关系啊,两个东西吧,两个东西都有,同学提到数据量有吧,那你分多少个区,肯定跟数据量有关,你将来存100个G的数据,跟我存十个G的数据,分的区都是100个,这个不合适吧。对吧,啊,你要是数据量来定,还有第二个你机器规模是十台,跟我机器规模是100台,那将来分的区是不是也应该不一样啊。对吧,所以呢跟两个内容有关,一个是未来发展,注意是未来发展的数据量,不是当前的数据量,对吧?第二个问题就是我们所说的跟机器的一个规模啊,机器规模好,机器规模一般是这样,生产环境当中最大的,对于你当前这个电表的时候,最大是每一台机器放两到三个V力。
19:08
也就是说我们现在如果是三台服务器,三台虚拟机,对吧?啊对一张表,建表的时候我们最好合理范围。就最大值在这个范围。能听懂吗?最大你不要超过九啊,它可能性能就变变差了啊,性能变差了大概是这个二二到三倍,二到三倍与机器的数量,这是跟机群数量相关的,好第二个跟数据量相关的数据量你应该怎么估计呢?是这样的。呃,因为A分区完了之后。诶,大家是不是脑子里面应该是这样有一个这个想法,做完预分区之后,问大家一下,是不是大家都觉得我做完预分区之后,它就不会按照它的那个切割规则去写。是不是有这种想法?有有没有这种想法,就是说我们之前不是所说的什么128兆,然后十个G,假如说你现在一分区六个,最后他还会按照六的平方乘以128,然后跟十的列去比较,按照这种规则去切。
20:09
是不是大家想的应该是不会对吧,不是吧,还会还会,如果说这个地方我们不是限定了十个地方。你就算预分区分了十个,当某一个分区里面数据到达十个D,他照样还要去干啥。做切分啊,你又没有把人家那个算法关掉,你只不过说做一分区提前规划了这个内容而已,你并没有给它关掉,所以他到做V分区,呃,又要做个处理好,那也就是说这个数据量的一个计算我们就知道了,假如说未来规划。有100个G的数据假设啊,100个G的数据啊,当然市场环境,其实AT100个G的数据随便存。啊,假设100的这个数据,那合理范围是多少啊。就多少个分区比较合适啊?
21:00
十个以上吧,因为你做一分区了,你还希望他己去吗?是不是你不希望他自己去限,但是你到达十个力之后,它还是会自己去献,能听懂这个意思,所以呢,我们得是吧。十个以上啊,保证将来每一个分区都在十个亿以下,估自己切了啊,不给切了,估计数据量呢,是未来半年到一年的一个数据量,然后来规划它这个什么。分期数的那种啊,就未来半年到一年,如果说未来半年到一年,这个发展突破你的想象,发展特别迅速,这个数量大了,那怎么办。可以扩展它的分区,如果说你觉得扩展它的一个分区很麻烦,因为是这样的,这个当时因为这个相对来说用的比较少一点,因为生产环境,如果说真的数量太大的时候,我们可能会选择直接去。换一个新的表啊,然后把数据导进去啊,把数据导进去,如果说你数据要扩展的有一些,但是也不是特别大的时候,其实我们看到了有一个点。
22:05
Split啊,你还可以指定这个切分点,从哪个点给它切开啊,可以手动的去切一下它啊,这个意思就动态的扩展一两个,这种方式也可以能听懂啊,但是这个就是呃,用的比较少,所以咱没有专门的去讲一个点啊,但是有的公司当中有可能说这样的发展,它发展不是特别多,是某一个超过了,那你把这一个分区给它切开,或者说你说可以设计的不合理,对吧。其他的呢,有一个到十个G,其他的呢,可能还在一个G,有的一个G不到,是不是你当时可能RK设计的不合理导致的,对吧,因为RK我们说了rookie这个东西呢,设计跟。分区线是不是有关系啊,你设计的不合理,你尽管一分区了,是不是还有可能会产生数据信息啊,对吧?啊,就像我们刚才所设计的1234,我最后说可前面是123456789。是不是说明你分区线设计的整个R设计的不合理啊,这两个没搭配上嘛,是不是最后一个分区可能会数据量特别大呀,因为456789都在一个分区对吧?啊所以呢数量特别大,那这个时候对于某一个你可以用的这种方式来干什么。
23:10
切一刀啊,来动态的扩展一个两个这种水可以了,但如果说你从五个想扩成十个甚至20个,那就不要一个一个去切了,很麻烦很麻烦,直接重新建一个表把它读出来,你用MR也好,用SPA也好,读出来导到另外一张表,把这个表给代码删掉,能听懂吗?是这个意思,就是这个是要估计未来到。半年到一年的一个数量,不是以现在这个数量。来计算的。啊来计算的啊,这块关注一下,所以呢,它重要的就是看这两个点到底分区数如何决定啊,分区数是如何决定的,这个点好,那我们这个呢,就是我们所讲的一个预分区这块一个点啊。
我来说两句