00:00
呃,这个引内的方法当中啊,这里首先有个start,有个end,这个咱们之前说过了,它表述的是一个准备和一个结束的过程啊,你准备的时候把那些对象给它准备好,那么你结束的时候把那些资源给它释放掉啊,是一个star again,中间呢是我们的业务操作,那我这里首先呢,就是创建命名空间,然后呢,接下来创建我们的表啊,我们这里加了一个叫NX,加了一个叫叉叉XX,其实表述的含义呢,是有特定意义的啊,这个在很多的一些框架里面都有这个意思啊,比方说你有了我该怎么办,你没有我该怎么办啊,还有这样的一种含义在里面啊,那所以呢,我们对它做了一些封装,那么这里呢,首先啊,我们的创建命名空间,创建命名空间的时候,我们这里首先先把那个的in给它获取到,我之所以可以直接调用这个方法来得到的in呢,是因为我们在底层当中对我们的这个adin呢,给它保存了一下,你保存到我的线程当中,只要线程不变,那我的数据是可以直接得到的啊,所以有这样的一件事情,那么在我。
01:01
那么获取我们min的时候,这里还涉及到一个connection的问题啊,那么我这里还写错了啊。后写了一个什么东西啊,应该有set是吧?啊,我还忘写这个了啊,正好看一眼啊,那么我们的ad米亚在这个时候呢,我们可以把它放到县城当中,你放到县城之后啊,那么这里我们就可以直接给他拿到,那么拿完了以后呢,我们这边就可以直接来使用啊,还是非常好的啊,然后呢,在这里呢,我们说了,我们要判断啊,咱们要判断,判断什么呢?判断我们当前啊,我的命名空间是否存在,这个咱们讲过了,咱们这里面应该有一个异常在里面啊,就是异常来决定了我们命名空间到底在还是不在,如果你去get的时候,它没有发生异常,就说明命名空间就在那,如果它不在的话,就会发生这么个异常,那这个时候呢,我再去创建我们的秘密空间啊,这个呢,我们以前做过这里是封装了一下啊,然后还有一个就是我们创建表,创建表的时候,我们这里呢,首先拿到的还额的命对象,然后呢,我们再去判断表是否存在,那我们这里加上一个叉,叉的含义就意味着如果你有的话,我把你的。
02:08
删除掉了啊,不要你那这时候我们把它delete,那么这个delete我们这里说了,我们也封装了一下,因为我们这里呢,是首先需要先disable再给它delete的啊,然后呢,我们这边删除之后,我不管你有还是没有,反正我的目的就是为了创建,所以我直接我创建表就可以了,那么创建表的时候,我们这里呢,去拿到我们的表格描述器,还有呢,那个列足的那个描述器,给它准备好之后,你创建就可以了啊就是这样,那么我们这里还涉及到一个什么呢?就是我们这个列足啊,你可能传,你可能没传,那你没传的话,我就默认呢,给你一个什么这个东西啊,这是完全可以的,所以啊,咱们这个也别给他写成这个了,既然咱们有那个长量,所以啊,我们这里呢也改一改啊,把咱们这边我变一变,咱们那个常量,我这里呢,这个列足啊,我就拷位一下啊,拷位拷位以后呢,我就写个叫info啊,咱们就默认值啊,咱们就叫info了啊,所以把这个呢写上个info,嗯嗯,把这个地方嗯。
03:05
嗯,来写个叫info啊好,那把这个呢,我拷贝一下,嗯,拷贝以后呢,在我封装的这个里面呢,给它稍微的变一变啊,所以来我们写上叫names,点啊我们的A它然后呢,把这个呢点我们叫get value啊就可以了,这样的话呢,我们这边就能够创建出来了啊,然后接下来呢,我循环便利把每个列足呢给它增加好,增加好以后呢,再创建我们的表格就可以了啊这个呢是我们上午呢给大家简单的做了一个封装,那么我们接下来准备往下写啊。那么往下写啊,我先别写我刚才啊,我们在这程序当中的下一个方法,这个方法呢,咱们先不完成它,我们还是回到我的引类当中,还是回到这些方法当中,我们要再完善一些内容,完善什么呢?我们如果这么来创建一张表的情况下,那么这个表它会有几个分区呢?如果我现在我们就这么创建,我们这么创建的情况下,这个表其实当我们说过它是不是只有一个分区啊,那这样的话,当我们的数据量多了以后,是不是会拆分呢?对不对,拆分完了以后我再增加数据,那么很大几率上,它是往最后一个分区里面再添加数据,那也就意味着你资源的分区啊,可能啊就不可能就访问几率就比较小了,这样的话就会导致什么呢?叫数据倾斜啊,我们也称之为叫热点数据,这样的话对于我们的查询呢,对于我们的效率来讲的话是非常不好的,所以在这种情况下,我们需要给他提供一个叫预分区,所谓的预分区呢,就叫预先给表格增加分区。但是这就。
04:37
涉及到我们对未来数据的一种判断了啊,看看我们的增长趋势是多少啊,你的判断我到底给多少个分区,那这个咱不考虑那么复杂,说给1000个2000个不考虑那个东西,咱们就考虑什么呢,给他增加分区,所以啊,我们这里咱们补充一下来,咱们写上。当什么东西呢?叫增加预区啊,咱们叫预分区,那么增加预分区我们之前专门的给大家介绍过几种方案,比方说我们可以干嘛呀,用16进制的那个字符串吧,也可以用我们的什么东西啊,是不是可以用我们的文件呢?也没问题吧,对不对?或者呢,你直接给他一些分区件是不是也可以啊,哎,都可以啊,然后呢,我们也给大家演示了一下,我们的Java当中是不是也可以传相应的参数啊,那就意味着我的in可table的时候,它其实是有一个参数的,所以呢,同学们看一下啊,在我们这里来,我们这个里面同学们看啊,你会发现我们的第三行的这个参数列表当中,第一个是表格描述器,这个是什么?这个是不是我们的分区键的二维数组啊,这个咱们给大家讲了,这个加中的是二维数组呢,是数组里面有数组,但没要求它的二维当中的那个数组的长度是一样的,没这个要求,所以我们这里就不管它,咱们就知道咱们现在需要个什么东西啊,需要一个这个东西吧,对不?
05:54
对,咱们叫split啊,Split我们叫kiss,叫kiss叫分区键啊,所以我们这写上咱们叫分区键啊,就是这样。
06:05
好了,然后呢,我们在这里呢,给它来写个叉叉叉叉叉啊,就意味着我现在什么也不知道呢啊,所以把这个呢放过来,所以啊,我们把这个给它放到这里,那这个是可以的增加预分区,可是在某些情况下,我不想增加预分区,咱们数据量没那么大,那没那么大的情况下,可能话就很少,那很少的情况下我就不需要分区,那所以可能有可能没有,那既然可能有可能没有的情况下,我这里呢,稍微的就给它加点东西啊,我加什么呢?我写上叫做这个。咱们叫T,给他一个叫region。大家想想什么意思啊,叫做分区数量吧,诶就意味着你要告诉我这个表格你的分区数量是多少,那你这个分区数量你告诉我了,我就想办法呢,给它做一下就行了,但是呀,你这个分区这个东西啊,可能没传给我,或者可能是零啊,那这样的话,我就没有必要去分区了,所以呢,我我给判断一下,咱们叫啊我想想吧,咱们这里呢,别给个in了,我给个这个东西啊,我给个in啊这什么意思呢?因为如果我给个in的话,那这个时候啊,我能不能给none呢。
07:14
能不能给那不能吧,为什么?因为我给那的情况下,是不是就发生了空指针异常了,对不对,所以我这边呢,就不能给那了,但是给那是比较准确的,这个阅读我不分区啊,就一个诶,所以这个now还是比较准确的啊,所以在这种情况下呢,我们还是给他来一个啊,咱们叫iner啊,就是这样,所以我这么写啊,那你这么写的话,这个reading count,我们就判断一下,如果啊,如果来我们写上它等于我们的now,或者那它比方说我们叫做什么呢?小于等于我们的零。啊就说明啊,那在这种情况下,说明你根本就不想做座预分区,那你不想做预分区的情况下,那我这里呢,就不需要把这个就去掉就完事了啊然后呢,我们再写个else,那只要你不为空,而且你还大于零了,不管是一个还是两个,那么你告诉我之后,诶我这让我想想,哎还这么写吧,是吧啊因为你两个才有必要嘛,对不对,那所以在这种情况下,我们把这个拿过来啊,所以把它放过来,这个呢,把它去掉,然后再把这个拷贝一下,嗯,拷贝以后呢,然后呢,想办法呢,把这个值呢给它,诶它给它放到这里面就可以了啊好,所以呢,我们现在呢,一会儿呢,咱们再去完善它,我先把咱们这个前面的接口给它变一变啊,那咱们这个接口变一变以后,同学们看一看,你会发现我这地方是不是就传了个值了,但你这个值能传固定的嘛,你不能传固定对不对,因为你传固定的情况下就感觉不太好了啊,而且我这么写完以后,大家看我这个地方懂么了,是不是也得传呢,但是我就不想传。
08:48
难道不让吗?对不对,所以在这种情况下,我可以再拷贝一个。拷贝一个咱们学的那个方法的重载,不就意味着方法名完全相同吗?对不对,但参数列表不相同吗?那所以在这种情况下,我是不是就可以来了,我写上一个什么东西啊,我们叫做什么叫region count吧?诶我这么写,你这么写完了以后,那我的region count是不是就可以往里面放了,诶我这么写就可以了,那也就意味着这个方法你可以调,那这个方法你是不是也可以调啊,那也可以调,但你两个方法都可以调,但是其实是不是类似的啊,所以在这种情况下怎么办呢?我拷贝我能不能把它变一下呢?变一下以后呢,我把这个name我传过来啊,我把这个name啊。
09:33
我把这个地方的name我传过来,反正你的目的就是不想去什么呢,分区嘛,我给个那就完了吗?然后呢,把这个我们的family诶你传过来不就行了吗?所以我们的方法其实还是写了一份对吗?只不过我们这里是不是间接去调用它,这个在咱们很多的框架当中都是这么说的啊,比方说构造方法,一个参数的构造方法,两个参数的,三个参数的,但是你最终其实调用的都是那个最多参数的那个吧,对吧,前面的都是为了让你用起来方便,所以在这种情况下,那么我们这边我们发生改变之后,那么我们其实回过去就可以做一些别的操作了啊,就是这样,所以大家可以看到,在我们当前的这个引力当中,我们用改吗?不用对不对,不用改啊,为什么呢?我不需要分区,我就可以这么做,但是万一我想分区了呢,对不对?呃,所以在这种情况下,我们就可以加东西了,比方说我想把咱们当前的这个表啊,分六个分区,诶我就写个六就可以了,你写个六以后咱们这个词不就有了吗?诶就是这样啊,呃,但是我们这个呢,我想想,嗯。
10:33
写个六其是个常量啊,这个常量我在这边也给它加上点东西吧,咱们写上一个new啊,咱们创建一个它,嗯,咱们叫做value,呃,咱们给大家说一下,除了枚举以外,咱们还有一种方式,就是我们比较常量类,咱们在用另外一种方式啊,嗯。咱们叫做它,咱们就叫value的一个常量啊,比如说我们用几种不同的方式来实现我们的这个东西啊,然后呢,这个呢叫public啊,这个呢,我们叫public,然后呢,Sta,嗯,然后呢,啊,然后呢,我们写上,嗯,这个不是string了,应该是我们的啊,咱们叫做region啊,咱们叫region,我们的count啊等于六,诶咱们就这么写,你这么写了以后,这个我们称之为叫常量类啊,咱们写上叫常量类,嗯,好了,然后把这个词我们拿过来,拿过来以后放到这个位置,你就别写上它了,嗯,好,然后点点了以后直接把那个region count给它拿过来,那它呢就是我们的六了,那你要想改它是可以的啊,你就这么改就行了,那除了这种方式以外,还有哪些东西我们可能会用呢?还有一些地方啊,举个例子,我们完全可以把这样的一些什么六啊,什么CT啊,什么靠这种常量东西呢,干嘛呢写到这里去。
11:50
叫做什么呢?就是我们之前有一个配置文件对吗?叫consumer,点我完全可以把它那些东西写在里面去,什么意思呢?点我们叫做space,然后等于什么CT啊,你这么写,然后呢,Space点我们的table,然后呢写上一个等号,CT我们叫做lock,诶你这么写也行,那也就意味着如果你要是写在一个配置文件当中,那是不是意味着当系统启动之后,要读取这个配置文件,而且把这些内容要放到一个固定的地方啊,然后你再去取,对吗?哎,就是这样,那这个读取文件咱们恰恰咱们之前咱们说过说过什么呀。
12:31
大家想想啊,我们是不是说过这个东西啊,算了吧,咱们今天说到这给家演示一下吧,啊来也别光说是吧,嗯,演示一下啊,那比方说我这里咱们再来一个,那咱们再来一个什么呢?咱们写上咱们就叫做它,咱们叫conig,就是我们的配置,配置量啊,咱们这么写,咱们写上叫配置常量啊点击OK,点击OK以后,然后呢,我们写上叫做public,嗯,然后我们写上一个tic,这么写可能不合适,我们写个叫吧,那好,然后呢叫,然后呢,我们写个map map啥意思啊,Map表述的含义是不是我们的P啊,建职对吧,那么建对它里面恰恰保存是什么东西,保存的是我们的配置文件中的那个名那个东西吧,所以样我就可以这么写了,来咱们的啊,好,咱们就叫做什么呢?咱们就叫做values啊value map吧,就是取值嘛,目的就是为了取值啊,然后呢,New我们的哈希,然后呢拿过来啊,所以有很。
13:31
多种方式可以实现同样的功能,就看你觉得哪种方式好了啊,嗯,枚举可以,常量类可以,我们的属性配置文件也可以啊,然后呢,把这个拿过来啊,拿过来以后,那接下来干嘛呢?我们写个叫static啊,我们这来这里我们写上叫static啊,Static以后怎么办呀。静态代码块是不是加载这个类的时候,我们要做一些事情啊,对不对啊,然后呢,这里来啊,我们点可以往里面放数据吧,那你放数据你首先是不是应该读到我们的数据,对吗?那怎么办,我怎么做读这个是不是要读取我的配置文件呢?咱们就举个例子啊,来咱们写上,咱们来resource,我new,我创建一个文件,这个文件的名字就叫CT啊,咱们叫CT点,诶配置文件,那我这么写了以后就跟刚才一样,我写上,那咱们这里来我写上咱们叫base,以别space了,咱们叫CT的name space.name space啊这个项目的命名空间咱们就叫CT,然后CT.table啊,然后等于CT啊我们的呃,Log,诶好了,还有那个CT点,我们叫topic啊,那个什么主题,然后呢,咱们就里写个CT对吧,然后呢,再来CT.cfcf就是我们的列足吧,然后呢,里面的color,诶等于我们的color,诶好CT,然后点CF,我们点info啊。
14:53
那等于我们的info,就是把这些东西啊,在配置文件里面给它写上,这样的话你只要修改配置文件,程序一点都不用改,这样的话扩展性也会更强一些,所有的框架,就是包括我们的web框架,很多都是这么来做的啊,你是不是会发现所有的框架里面都会有叉mail或者property的文件,对不对,为什么呢?就是为了扩展性,否则我在程序里面写死不就完了吗?恰恰不能写诗,他为了扩展它啊,所以啊,我们这里拿什么叉mail啊,拿practice啊写都大同小异啊。
15:23
好了,那现在问题来了,我如何来读取我当前的配置文件呢?这个咱们是不是之前有一个叫什么东西啊,是RI的那些东西啊,对不对,咱们还有另外一种方式,大家看啊来,我们写上叫resource,咱们叫做resource,有个叫bund啊,有这么个东西点它有个叫get,然后呢,写上一个咱们叫。这个专门是用来读取配置文件的,专门是用来读取配置文件的,为什么呢?因为早期的时候有这么一个概念,不知道你们有没有听说过,叫国际化。叫国际化啊,翻译出来了是吧?啊什么叫国际化呢?很简单,就是说在早期的时候,那时候程序员呢,他觉得。
16:06
当时的网站他们会这么认为,他们觉得什么呢?就是我写一个网站呢,我可能又想中国人看,我可能还希望美国人看,我还希望什么呢?诶法国人看,或者什么,还有英国人看,那也就意味着我一个网站有那么多国家的人来看,但他们看不懂怎么办?我就希望呀,我的代码就写一份,但是可以在不同的环境下怎么了,显示不同的文字,我希望达到的这么这么个目的,在不同的环境下显示不同的文字,中国人在中国,在中国就是我们的汉字,是我们的中文系统下,我看到就是中文,那么在我的什么欧美的那个环境下看到的就是英文啊,所以在不同的环境下看到不同的文字,这就属于一种国际化的操作,所以这种国际化靠什么时间,靠practice文件实现啊,靠这功能实现,当时是这么做的,大家想当然的会认为你的网站会有很多人看,后来发现恰恰不是这样的,你的网站没人看啊,啊,为什么呢?是因为不同的语言,它的文字是不一样的,那文字不一样的话,就导致我的页面布局不一样,什么意思呢?举个例子。
17:06
我们的中文当中的一些文字是不是特别短呢?但是如果你翻译成英文的话,是不是别长,那这样的话长短不一的话,对于整个页面布局来讲,中文可能特漂亮,但是如果变成英文之后,文字异常了以后,把整个布局全打乱了,就特别难看,所以那个时候国际化就已经不再流行了,为什么?因为用户的友好度非常的差,所以。为了解决这个问题怎么办?不同的语言一份页面,不同的语言设计一份页面,所以就没有国际化这个事儿了,所以啊,这个技术还有,但是已经不再去用这个功能了啊,所以这个呢,专门是用来做国际化操作的,但是它恰恰就是读取配置文件的啊,所以啊,这个呢,我们就不关心了,咱们只要知道能够读到它就可以了,所以啊,你能够读到它的情况下,那么这个CT我就可以直接把这个配置文件读到,读到以后它会返回,返回什么东西呢?同学们看,它返回的就是它。啊,所以呢,我们写上咱们就叫CT啊,就叫它就可以了啊好,那么你叫他以后,然后呢,我CT点点什么东西呢,同学们看有一个叫get kiss吧,对不对,然后呢,它是一个枚举对不对,诶那么这样的话,我们就可以来了,点我们这边就可以看看他这里还不行,那我这里呢,把它拿过来。
18:19
把这个呢,我们点一下,然后呢,点一下以后把这个呢给它拿过来,拿过来以后呢,我放到这边啊,然后呢,我们的银捺,嗯,加个S吧,诶等于它啊,然后呢,这里加上一个我们的泛型应该是个spring,嗯,好,然后呢把这个呢给它引入过来,引入过来以后,那然后呢我们就可以well了,Well以后同学们看啊,然后呢,这里来我们写上点点我们的has more element啊,有没有更多的元素,如果有的情况下,Enough点我们的叫next element啊这样的话,把咱们的那个什么我们的K就拿到了,你拿到K以后,那我的value就能拿到,所以等于我们的什么呢?CT点我们的get,你get string拿到的就是我的那个value,所以这样的话,我的key value就得到了,Key value6得到以后,同学们看,那是不是就意味着我们这里就可以把这个K和Y6怎么了放到map里面去了,那这样的话就意味着你当前的map里面已经保存了我配置的信息吧,那好。
19:20
保存好了以后,那如果我想用的话,我怎么用呢?那不就简单了吗?Public static,咱们叫static,我们叫做string,咱们叫get我们的配置啊,Get我们的value吧,哎,就这么写,你这么写了以后,你给我传个key进来啊,String啊,我们的key,所以我写个key,然后呢,我就直接return了,什么呀,Map啊,然后呢,我们叫map DR get key啊,把那个key传进去就行了啊好了,那你这么写完以后,同学想想吧,那我现在就写个main方法,Public,他这个VO啊,我们的men,好了,直接来写吧,好,那我现在呢,就直接来,咱们看很简单,我现在呢就直接写,咱们叫做DR,我叫get value,你叫get value的话,我是不是可以直接读取咱们这里的东西啊,那比方说我想读取咱们的color,把这个拷贝拷贝过来以后,我就直接放这儿啊,我就放这儿,这个值是个固定的啊,但是我想取的是它的value,所以我们直接来啊。
20:20
然后把这个呢,我们直接给他放过来,嗯。好给他放到这里啊,行了,那我放到这里以后,我直接就运行一下,看看结果就可以了啊运行嗯,这啥东西啊,这给它做掉啊,这个给它注掉,嗯,好了啊,然后呢,继续。嗯。哎,看看啥东西。嗯,我刚才这个重新点一下,点大家看取没取出来,取出来了吧?哎,所以这样的话,如果我不改动任何的程序的话,我只要把配置文件一变,是不是列出就跟着变了啊,那这样的话,我们说扩展性就会更强一些了啊,所以啊,我们的常量可以采用很多种方式来做,而且为了考虑扩展性的话,拿叉mail啊,拿properties呢,都是一个好的选择啊,这样这里呢,我们给大家演示,但我们后面可能不用啊,就是我们告诉大家有这么回事儿就可以了啊。
21:21
好了,那这个呢,咱们说完以后呢,回过去把这个该关的给它关掉啊,来咱们回到咱们之前的里面去,来咱们点一下,呃嗯,看看啊,咱们点点完以后呢,我们现在呢,点一下就是我们这边,那那我现在这边呢,我们的region count现在我们已经准备好了啊,我们的常量已经有了是六个,可是你的这个值,问题就在于我如何来获取咱们的分区键呢?就这个分区键咱们怎么来获取呢?啊,我现在把这个拿过来,分区键我放过来在这儿啊,这是我们的分区键,我们刚才啊这一块呢,并没有完成,那现在呢,我们要把它完成了,我该怎么做。
22:01
那这个时候同学们想想,那我是不是得想办法来获取啊,所以我写上叫生成,叫generation啊,咱们叫生成我们的split,哎,咱们的case,哎,我要生成我的分区键,那你要生成分区键的话,就意味着你得把分区的数量你要告诉我,最起码你不会空,你比一还要大,你告诉我就行了,所以我这里写个,因为这个分区键的获取呢,就在当前的类里面有效,别人我就不让你用了,那然后呢,我们的bit,诶,好写上咱们就叫生成啊,拿过来,拿过来以后在这里面写上我们的region count,嗯,好,把这个呢,我放到这里,然后在这里写上啊,咱们叫生成,生成分区键好了,那你生成分区键的话,咱们别的不说,你首先就应该有一个我们的bit啊,应该有一个BY,然后写个BS等于new我们的bit OK,那我写完以后,然后呢,Return啊,把咱们当前的这个BS呢给它返回,这是我们首先需要。
23:01
要做的,那首先需要做的情况下,那我就问问同学们了,我现在这个地方报错了,那是什么原因。我这报错了,应该是什么原因?是没有指定它的长度对吗?但是这时候你又要想一下了,我们的多维数组当中,我们是要把每一个数量给他写上吗?不是吧,因为是数组里面有数组,那就意味着我们只要把最外层的数组给它定义好就完事了吗?所以这样的话,只需要我们的外外层有数字就可以,不见得每个地方都有啊,所以这外层这个数字我们要知道,那这个知道,那它是多少呢?它是多少呢?记住这个是我的分区线,我们讲过为什么是我们的二类数,咱们讲过这个事儿吧,咱们怎么讲的,还记得吗?就意味着当前我们的这个地方来大家看我现在有三个分区,我有三个分区以后,那么由于啊,我们有一个范围的概念,所以我们这边有个叫负无穷,这边有一个叫正无穷,但是你负无穷和正无穷中间应该给它分隔开了,那所以这个可能是A,这个可能是A,那么这个是B,那么这个是B,所以也就意味着我们当前我们的败的记录,我们这个分区键是一个还是两个,两个也就意味着是多个吧,那我应该用个数组吧,然后呢,写上一个A,写上一个B,对吗?这是一位数组,可是你在存储的时候,不是按照字符串和数字存储的,而是按照BY的数组来存储的,所以数组里面不是A,不是B,是什么?是A对应的那个败的数主吧?哎,就是那个我们的败的数主,同样道理,这个B是不也是败的数主?
24:41
啊,所以说我们是数组里面有数组就叫做什么呢?二维数组了,我们这块就这么来的,那就是它了,好,那这个你能明白的话,那想大家想想,那我最外层的这个数字应该是几。A和B对吧,那这个A和B和这个数量之间的关系是什么?差一个对不对,那所以这个你能明白的话就好办了,那也就意味着我们应该写上叫int,我们叫split key的一个count,什么意思啊,分区键的数量吧,它应该等于我分区数量减一啊,你有六个分区,那你就应该有五个分区键对吗?啊,为什么呢?还要包含我的正负正无穷和负无穷嘛,所以在这种情况下,它你要知道,那就好办了,这个是不是应该变成它呀?嗯,好,所以首先咱们先把这个准备好啊,准备好,那准备好了以后,可是问题在于这个分区键是多少呢?
25:37
分区间我写什么呢?我写个A,写个B,写个C,还是写什么什么东西呢?那你就要想一想,我们这个分区间的目的是什么,咱们这个分区间的目的是什么。是不是为了希望我们的在增加数据的时候,可以放到某一个分区当中来达到一个均衡的效果呀,对不对,那其实我们说类似于什么呀,类似于我们哈希map的那个小格子的索引吧吧,0123对吧,只要你的那个什么,你的那个数据呢,转换之后是个零,OK,我放零的小格子里面,如果是一放一的小格子里面,概念不是一样的吗?你的分区键的目的不也在这儿吗?既然是这样子的话,那好了,我这个分区键也不写,也不写别的了,咱们就写索引,那也就意味着什么东西啊,我的分区键就是什么0123这样的,哎,我就写成这个样子的,那如果我写成这个样子的话,同学们想想,那现在我们假设咱们别说六个分区了,就三个分区,那么它应该是什么样的一种分区效果?
26:38
那首先大家看应该是一个中括号加上它对不对,那这里我们应该写上一个叫负无穷啊,咱们叫无穷。啊,然后呢,这边应该是一个我们的正无穷啊,应该是一个正啊我们的无穷,诶就这个东西好了,就是默认情况下,记住我们这边应该什么呢?这个其实也不对啊,但是没关系啊,就这么写吧,嗯,好了啊,然后这么写完了以后,中间恰恰被分开了吧,那现在我们我刚说过了,我们现在可能没有六个了,就可能是什么三个,那你三个的话,我这应该怎么写,那么我写零,那是不是就应该是什么东西啊,应该是零,然后呢,这么写吧,然后呢,记住啊,这个时候应该是什么东西啊,应该是包含的,这个应该是包含的啊然后呢,应该是什么一,然后这个应该是什么一。
27:25
诶,应该是这么一种效果啊,所以零和一,那么也就意味着是两个分区键,然后呢,分三个分区,这样的话,只要你保证什么呢,我们的肉它是以零开头的,是不是就进到这里面去了,然后呢,在零和一范围之内到这里面,然后到这里面吧,诶不对。哪不对了呢?如果以零开头的情况下,好像这也能满足啊。对不对。比方说我当前的R是这个样子的。他应该去的是这边还是去这边,应该是去的是这边吧,那什么样的数据会去这边呢?小于零的哪些小于零负一,咱们是字符串,咱们是字符串好吗?不是数字周串。
28:18
所以啊,我刚才说过了,咱们是零和一,我希望什么呢?我希望呢,以零开头的啊,然后呢,比一大的,然后零和一之间的啊,所以在这种情况下,大家看我可以怎样,比方举个例子,我现在数据是这个样子的,一什么什么什么东西,然后呢,再写个二,我像这样,那也就意味着我希望它一个什么效果呢?这样的数据放它里面,这样数据呢放它里面,然后这样的数据放里面。能明白什么意思吗?就是我这样的数据他放在这个里面去,我想达到这样目的,然后呢,他的数据放这里面去,他的数据我放这里面去。我想达到这样的目的,那我该怎么写这个分区件呢?啊,这个咱们之前给大家说过,为什么呢,你这么写就行了。
29:07
能明白意思吗?我们加了一个什么东西,加了一个竖线,我们说了为什么加竖线呢?其实最阿斯克玛的最大值不是竖线,最大值是那个花括号的右划括号,但是你加上一个竖线表示分隔的意思啊,给它分隔符就这种感觉啊,为什么呢?因为在有些我们的数据结构当中,它就是用竖线分隔的,它就这么写的。啊,就这么写的,所以呢,它有分格的概念,所以拿这个呢,会感觉更好一些,但恰恰它遵循了我们的规范,什么规范呢?我们这个它一定比所有的字符,除了那个花括号大对不对?那所以说呢,这样的数据是不是一定在它的范围里面,一定比它小吧,就这个数据一定比它小,为什么?因为你零相同,这个数你是多少都一定比它小,那么这个数据是不是一定在这个分区里面,同样道理,那这个呢,这个首先1比0大对不对,比零大,但是呢,跟它一样,OK,那这个值你不管是多少,它就一定比它小,那么就肯定在这个里面吧。哎,同样道理,比这个22比1大,那么是不是肯定在这里面了,那所以啊,我们如果按照这样的规则来讲的话,我的数据就可以放在不同的分区当中,这样的话就满足了我的要求,所以也就意味着只要我们的分区键形成这个样子就OK了,什么样子呀,零竖线一竖线,所以啊,还不是说纯粹的012,所以我们这里加上什么。
30:32
么呢零诶,加这个东西如果你能变成这个样子的话,那么就会更加稳妥一些,最起码能够保证我的数据按照规则可以进入到不同的分区,所以啊,这个如果咱们能够明白的话呢,就好办了,所以我们把这个A别删了,咱们留着吧,嗯,咱们写上一个,咱们叫做什么呢?咱们叫做bit啊,咱们叫bit OK,我这么写,呃,咱们就叫做什么呢?嗯,写个BS我们的list吧,等于new啊,咱们的list啊好了啊,我们这么写就可以了啊,然后来其实我这么写不对啊,为什么不对呢?因为我的目的很简单,是把那个字污串给它准备好,所以我想想咱们还是用字污串,但是用字污串的话,嗯,又感觉啊不怎么准确,行吧,咱就先这么着吧,啊,咱们先这么着啊,接下来咱们就循环变利了,咱们循环便利,咱们负循环,OK,然后呢,写上既然你是从零开始的话,那我这里呢,应该是int I等于零,I小于咱们的这个count,然后呢,我们写上叫I。
31:32
加加好了,写完以后,那我就把我的分区键干嘛呢?放到它里面去就行了,所以我们增加,增加的时候同学们看啊,这个时候首先我先拿到我们的那个key啊,就是我们那个分区键,咱们叫split吧,Split咱们的key它等于什么呢?很简单,就等于I,就是I为什么是零嘛,对不对,但你I后面得加什么东西,加上一个我们的竖线对吗?你加一个竖线,哎,这样的话我的分区键就有了,当你循环之后,什么0123就全出来了,然后增加一个它就行了啊,你增加它以后,但是我们保存的不是字物串,是个字节的数组,所以呢,我这里写上叫bit啊,点我们的To Bit,把那个spli key给它放进去就可以了,啊,就是这样好了,那你这么放完以后,是按照我的顺序往里面放的,那我接下来我干嘛呢,我准备要把咱们这个呢,给它放到我们这里面去。
32:32
所以在我们这里呢,咱们DR,咱们叫做什么呢?咱们叫to r to r的时候,就把这个呢,我们的BS给它传进来就可以了啊好了,那你这么传进来以后,记住我这边呢,已经把咱们的什么呀,把咱们的这个集合的数据呢,给它准备好了,然后呢,我把它放到我们的数组当中,这个里面就包含了我的数据,包含数据之后我直接返回我的分区键就出来了,啊就这么个意思,那好了,那我现在这么写完了以后,对不对,我也不知道,咱们可以试一试,怎么试呢?反正你这边就传个数量过来就可以了,这样我在我的这边我看看啊,咱们这儿准备一个焖方法吧,准备一个焖方法啊,单独的测一下。
33:14
所以我们这里写上,那咱们来我们的main方法,然后呢,我们就直接写咱们叫做生成,呃,生成我们的split啊,还有看看。哦,咱们这个不是不是那个静态的是吗?嗯,不是静态没关系,加一个吧,临时测一下啊,来咱们的这个东西,然后拷贝,拷贝以后呢,我放过来啊,放过来以后呢,我传个值,这个值呢,我写个就写个六啊好,然后点我们的它行了,写完之后我们来观察一下我们这个对不对啊,那怎么观察呢,很简单,就把咱们这个打印一下啊,看看是不是跟我预想的是一样的啊,所以呢,我就直接来咱们叫split key,嗯,好了,那行,我接下来呢,就试验一下,来点一下点。
34:01
点完以后大家看是不是啊,01234,大家看是不是这样的,那么五个分区键的话,合在一块是不是六个分区啊,哎,有这个东西啊,这个呢是我的结果,这个咱就不管它了,所以咱们这个呢,应该差不多没什么太大问题,如果有问题的话,咱们到时候改了就可以了啊,说明我这个呢应该是可以的,好了,那这个可以的情况下,那咱们分区线就算是做完了,所以把这个static呢我去掉啊,然后把这个打印呢,我们也去掉,咱们测试过就OK了,嗯。好了,那我现在写完了之后,那我的这个分区没有任何的问题了,接下来我们就准备要增加我们的数据了啊好,这个我先停一下。
我来说两句