00:00
就是下面啊给大家啊把这个。组建的其他策略来做个详单介绍,这策略有很多,我这里边有一个博客,咱把它打开,因为这个博客比较多,我没附到笔中,给大家提供一个网址啊,那这个网址咱把它打开。这个啊,这个博客。然后在这里边啊,我们来看一下啊,这里边就列出了我们比较常见的这些主见的生成策略,给大家来详细说一下啊,首先里边有第一种策略,就是咱们比较常见的策略。啊,这个图我先关掉啊,咱们重新画一张图,关于我们的主见策略。然后第一种策略是什么呢?就是各位应该知道的,它叫做自动增长。刚才我上节课也问到了啊,自动增长就是你每次的值会自动生成,比如说第一次值是一,第二次是二,第三次是三啊,以此类推,这个叫自动增长啊,这是我们的第一种策略,而自动增长一个特点啊,在我们的买so里边,它有一个关键字叫o to increment,能实验一个自动增长啊,应该说我们之前在买所有阶段各位应该是学过的啊,所以这是第一个策略,你把这个知道。
01:19
但是这种策略啊,它本身也是有它的一定的这么一些缺点的,或者说有一些也是不方便的地方的,那我下面给大家来做个说明,就是它有哪些不方便的地方。啊,我们来说一下啊。比如说我现在啊,我们做这个自动增长来实现数据库的操作,那在数据库操作中的一个词,不知各位是否听过。它叫做分库分表的这么一个操作,咱就以这个分表为例来说明,那什么叫分表,说的简单点,比如说我现在有很多的用户数据,我把用户数据呢,可以都放到一张表中,但是这么放的话,会造成你的表中数据太过于庞大,所以咱可以把数据分成多张表进行存储啊,这是一个简单的分表一个解释,那咱用它来说明自动增长啊,有什么就是不太方便的地方。
02:15
啊,那我来大概画一下啊,假如我们现在有一个用户这个数据,我现在比如想把用数据给它放到三张表中进存储啊,比如里边有三张表,假如这是表一,表二表三,假如现在我想这么做,让每张表中就存这个1万条数据。啊,比如说第一张表,按照咱们自动增长方式,那它里面的ID值的生成是不是应该是一到这个1Y是这个值。然后咱看啊,第二张表中呢,因为它是自动增长嘛,那它的ID值是不是应该是这个10001,比如说到这个。2万这个值,然后第三张表,按照自动增长的规则,它的ID应该是这个20001到这个是不是这个3万啊,所以这是一种简单的这么一个策略,根据自动增长,第一张表一到1万,然后10001到两万两一到3万,当然可能还有更多的表。
03:15
这是啊,我们这么一种方式,但是这种方式在这么做的过程中,里边有个地方不是很方便,什么地方呢,给大家强调啊,大家注意看,假如说你看第一张表是不是一到1万呀,也就是说啊,他最后一条记录的ID值是不是1万呀,但是你看我第二张表的第一个ID值。它跟第一张表最后一个值有什么关系吗?所以你看这个值大家就会发现啊,就是说我现在第二张表中的ID值,要是你第一张表最后一个值是不是要加一啊,这也一样是2万加一,这是不是1万加一,也就是说你要做这个操作中,还需要得到上张表的最后一个值,把它加一,是不是它要生成进一张表。
04:01
这是啊,它的一个特点,所以这个有它的不方便的地方,但是功能都会做到,因为你每次做的话,还需要得到上涨表的最后一个值,把它加一才生成我们新的一张表啊,所以这种策略叫自动增长,但是咱功能都可以得到啊,所以大家把这个给他知道一下啊,就是第一个策略叫纵增长。这个咱做个说明,然后除了这个策略之外,在咱操作中还有第二个策略,这个策略叫做UUID。啊,我在这里写下啊,不知道各位之前是否听过啊,UUID。那这个我说一下,什么叫UID呢?说的简单点啊,就是我们每次操作生成一个随机的唯一的一个值啊,就是你每次都会生成一个随机的唯一的一个值啊,这叫UID,而它生成值是什么样子呢?咱们看一下啊,里边有个示例。
05:02
再往下找,大家看他每次生成值应该是这个样子啊,这是它生成这个UUID的这么一个值。啊,就是这个样子。我把这个啊给大家记出来,而这种方式的好处什么的,比如说我现在再做分表,那我每张表的值跟上张表是没有关系,每次你重新生成一个uyd值是不是就可以了啊,这叫uyd值的特点,但是这种方式也有它的缺点。什么缺点呢?希望各位能好好想一下啊,它有什么缺点?首先你注意啊,我觉得有同学可能会想它的值太长了,其实这个不能叫缺点,而它的最典型缺点是什么呢?比如说我们用UID的方式,跟我们自动增长相比,自动增长的值是不是一到3万这个值,所以它的这个ID值是不是能排序哦?但如果说你用普通方式随机生成UID,这个值是不是就没法进行排序哦?
06:00
所以它的就是排序会不方便啊,因为它是随机生成值,这是第二种方式,但是它不需要关注上涨表的数据,每次都重新生成可以了,这叫UYD也是一种策略啊,就是每次都生成随机的唯一的值啊,这是第二个包括啊,除了这个之外,还有第三种方式,这个方式。就用red做到啊,这个大家也写一下啊,就用red来实现。实现啊。然后这个怎么实现,咱们直接啊看这个里边这个例子啊,Ready中啊有个操作,这操作各位可能听过,可能没听过,我这里说一下啊,它叫什么?叫做原子操作,就是每次的值啊,做相加和这个操作,然后这里边有个例子,咱直接看这个例子啊,这里写到,比如现在有五台radi,就是abcde,然后每台的初始值是12345啊,就是各位这么来看啊。
07:01
Abcde是不是12345,然后它就是ID值生成,怎么生成,每次它的不长,就是每次加五,比如你看啊,第一个A是一六十一,第二个是二七十二,每次是加五,用这种方式能生成ID,这是用red的原子操作镜实现啊,这也是一种方式。而这种方式啊,它是应该是有时候用的比较多的啊,所以大家把这辈子知道啊,算是一种策略,然后除了他之外,还有一种策略,就是咱们现在用的这个策略。和小D位置啊,就最后一个策略,就咱说的在咱们的MP中。MP中啊,它会给我们就是自带这么一个策略,这策略咱刚才也看到了,它最终生成的是一个19位的这么一个值啊,所以咱们用的比较多的还是用MP自带策略,而这策略中它的19位其实有一种算法啊,这里边标注了它这19位是怎么生出来的,这要求各位做个了解啊,不需要你记。
08:07
而他用的算法是这个算法叫这个snow,这翻译过来应该有那个雪花的意思啊,是一个雪花的这种算法。IP中用这种方式做到,那这个算法是怎么样的,给大家也做个介绍啊,咱们也给他做个了解,不需要你去记,但你知道里边有这么多地方啊,那咱看一下啊,首先第一个。在这个19位中,它里边首先使用41比特我们的毫秒数,然后第二个用十比特追你的机器ID。然后GID中发含这些啊,那什么意思?举个例子啊,比如说这里边有个叫数据中心和机械ID,什么叫数据中心呢?比如说现在啊,我这项目比较大,那我肯定啊,在全国各地是不是都有我的数据库机房啊,假如现在在北京的机房,我的标号是001,在天津标号肯定跟北京不一样,是不是他要标什么002或者其他址,所以这个叫数据中心。
09:12
然后里边有机器ID,而在我一个数据中心中不可能只有一台电脑,是不是有不同的电脑,假如我这个北京的数据中心中有100台电脑,那每台电脑的机械ID是不一样啊,所以这个就是叫机械ID这么一个解释,然后除了他之外,他还用12比特,所以你这个叫毫秒内的流水号。什么叫流水号呢?举这么一个例子啊。各位应该都在网上买过东西,比如说啊,特别是在那种双11双12的时候,因为他在就是单位时间内是不是有很多的订单生成啊,那它里面比如说我们在某一毫秒内是不是会有很多订单,而每个订单是不是都不一样啊,那怎么区分每个订单是不是有个订单号,这订单号列为就是咱们说的流水号,毫秒内的流水号作为它的一部分啊,所以这就是咱说那个MP里边一些核心的一个算法。
10:08
大家对它做个了解,而另外有一点你要明确它为什么用这些来表示的,主要是为了区分,让你里边这个19位的值,让它不能一样,每次生成值让它都不同啊,包括每次都是一个。唯一的这么一个值啊,所以这是一种算法啊,这是关于咱说的。我们用这个主见生成策略中基种比较常见的策略啊,各位把这几个给到就是知道一下啊,如果说以后在面试中别人问到你,只要你能说出这么三四种策略,就是逐渐的生成策略,比如你说我知道有自动增长,有UID,有ready u MT,但是我们项目用的是MT这种策略。啊,把这个能给他说出来,这是咱们提到这么一个内容啊。然后这个说完之后,下面咱说一下这策略我们该怎么去用啊,各位注意啊,我们刚才的代码中,大家仔细观察,刚才咱们写这些地方中,咱好像没有在任何地方配置过咱那个策略吧。
11:14
啊,咱们没有配置过啊,这是那个logb注解,跟策略无关,但是现在就是你不做任何配置,它默认用的是MP的那个策略,但是咱可以做配置,怎么配置,给大家说一下啊,做法很简单,就是你只需要在你就是要进行主键那个属性上边加个注解,因为咱的主键一般都是ID嘛,在ID上边加个注解可以了,就是来加上这个注解。咱看一下,然后来演示啊,注解叫做table ID。我把这个啊给大家截过来,然后在里边解释一下,在你的这个主键的属性上边加个注解,这个注解就叫做table ID啊,第二它。
12:00
这个啊,给大家接过来啊,就是我们的。这种方式啊。然后这个策略中有很多给大家一个来说一下啊,咱看一下首先啊,就是前面这结构是固定的,在后面有不同的值,这值咱都看一下,就这几个值。想看到啊。就这些。然后这些值我给大家都截到,就是这位中来啊,咱来详细说一下这些值分别代表什么意思。啊,咱们都来说一下啊。然后截过来啊,然后一个来看啊,首先大家看啊,在里边有第一个指要这个凹凸。这个值应该最好理解,就是如果说啊,你在ID上边加上这个东西叫那个凹凸。那它就表示什么意思呢?我们现在的策略就是这个叫自动增长啊,这是第一个就是咱说那个自动增长。
13:03
啊,自动增长再用这个叫凹凸,这是它的第一个策略啊,这个我也知道,然后这里边还有第二个。来写一下啊,第二个叫这个ID worker。还有一个叫做ID worker s tr。这两个咱一会儿再说啊,我先说明这两个是MP自带策略,然后咱先说后面这个啊,下面还有一个叫input。Input什么意思呢?给大家强调啊,就是说你现在比如说我们现在把这值改成叫input,那这个ID它就不会帮咱们生成,咱需要自己来输入这个策略,Input嘛,就是输入需要我们就是自己来输入,或者自己来设置这个ID值啊,这叫input。然后里边还有一个叫这个no,它就表示不用任何策略,就是没有策略啊,这个也需要咱们自己来输入,这是,但是一般用input啊,然后除了它之外,还有最后一个叫这个UUID。
14:09
这各位应该知道,它就给咱们每次生成一个随机的唯一的一个值。啊,这是里边的几个策略啊,咱第一个叫凹凸自动增长,第二个input就是需要我们输入,咱需要自己设置,第三个no没有策略啊,咱需要自己设置,最后一个就是UID随机唯一的一个值啊,这是里边的几个策略,然后除了它之外,这里边还有这两策略,我这里强调这两策略都是MP自带的那个策略。那为什么是两个策略给大家啊,来解释一下啊,大家里边写一下,比如说第一个策略。ID。然后里边还有第二个策略。啊,它叫ID worker这个ST。那这两个什么意思,我给大家啊详细解释一下啊,希望各位把这要记住啊,因为后面咱要用到的啊。
15:06
那要说明,首先我们看第一个啊叫ID worker。那什么意思呢?比如说它第一个是MT。自带的策略会生成一个19位的一个值啊,这个没有问题,但是它是什么意思,就是这个策略是针对什么,如果说你这个就是属性类型,大家看是什么类型。是不是那类型,就是你是一个这个数字类型。那我们就要使用这种策略,比如说我们是一个浪类型,那咱用这个叫ID worker啊,这是第一个,然后还有第二个。我觉得这么说各位应该能理解它了啊,这个叫什么ST,那什么意思呢?给大家强调,它也是MP自带的策略,但是现在它针对什么类型,如果你是一个叫字符串类型,比如说我们的string啊字符串类型,那这个时候用它策略,比如说现在你把它改成叫词,对,那现在用这个SR,但如果说你是一个浪,那咱用的是上面这个策略啊,他们是针对你不同的类型来使用。
16:16
就是你ID worker是。你的数字类型,比如浪类型ID worker s tr是字符串类型啊,针对不同类型我们用不同策略,但你默认不写,它会给你默认识别用哪个,比如说这个是,那默认用它,如果你是s tr string啊,用这个。啊,这是咱们说的里边的这么一个策略上的东西啊。这个我们做了一个说明啊。所以咱们啊,就是把。这里边我们比较常见的几种策略给大家都做了一个说明啊,各位把这给他知道,最后重复一遍啊,第一个自动增长,这每次自动生成值,第二个UID,第三个red啊,这个也了解一下,最后一个是LP自带的,咱们重点掌握是LP自带的,它用的是一个叫snow flag雪花这种算法,而在这里边默认是MP自带的,但是我可以自己设置。
17:13
怎么设置在你主键的使用上边加上这个注解table ID。后面指定你不同策略,比如说我们写这个凹凸自动增长input,就是自己输入,那没有策略。UID就是随机升值ID worker ID worker s tr,针对long类型和串类型用不同策略啊,这个就是。主见的几种常见的策略给大家啊,就是都做了一个说明,所以各位把这些给他知道一下,这个文档中应该都写到了啊,就是这么一个啊,包括文档我带你看一下啊,这是它那个源码中里边这个东西,在它的源码中用的是一个这个东西。这个应该知道啊,是一个枚举,然后枚举里边有它的不同策略,咱刚都提到了,All to now input ID worker u ID等等。
18:07
啊,这个咱就说完了啊。
我来说两句