00:00
各位同学,我们继续上课啊,刚才的内容中呢,我们讲到了筛定ABC实现水平分表操作,咱们通过创建我们的工程环境,创建数据库,然后配置它的分片策略,最终写测试代码,完成了用she定JBC实现水平分表。那这个做到之后,咱下面继续使用设定GBC来实现分库的操作,那这里边给各位我在课件中写一下。咱们下面要做的内容就是我们使用这个筛顶。ADBC。来实现一下这个水平分库的这么一个操作,因为刚才咱做的是水平分表,现在咱们来做这个水平分库,把这个效果用设定GBC做个实现,那这怎么做?首先咱们快速回顾一下,在前面内容中咱讲到水平分库什么意思呢?
01:05
咱看一下啊,之前咱们特别提到过它的做法就是呢,咱们可以把单一的数据库创建成多个跟它相同结构数据库,然后在数据库中的第一个里边存问数据,第二个里边存另问数据,这个叫水文分库,就你创建多个相同结构数据库里边的表也是一样的,那我们下面按照这种方式,咱们把这个给它做到,那怎么做?首先给大家先说一下我们要实验的这么一个效果的一个需求。把需求各位做个分析,就是咱们要做成什么样效果,然后分析完需求之后,咱们再通过代码把这过程做个实现,然后这里边给各位做个分析。因为咱们现在要做到水平分库,所以我怎么做呢?首先第一部分咱一会儿就先创建,比如说两个数据库。
02:01
咱以两个为例,当然你可以创建多个,比如一会儿我建两个数据库,我在图上给大家画一下,比如说两个数据库是这么两个。第一个数据库,比如我们是这个,咱们给它起个名字,为了跟之前区分,因为咱们之前数据库叫这个cos DB,那这里边为了区分一下,比如说咱们一会儿第一个数据库给它起名,我就叫这个。E Du DB下线一,这是咱们一会儿见到第一个数据库,然后第二数据,我起名叫e Du db2,这是我们一会儿建到两个数据库,然后建完数据库之后,咱们在这数据库中里边创建表,表还是按照上午那个结构创建,就之前我们那个结构,那我写一下,比如说我们现在在这个e Du DB下线一里边咱们建。两个表,然后两个表的名字,比如第一个表,咱们还叫这个cos_一。
03:06
这是第一个表。然后在里边的第二个表,我们起名叫cos_二,把这个表按照之前的结构串建出来,包括咱们在这个EBDB2中也创建相同结构表张表,所以咱们现在我想正在创建,这是咱们一个数据库和表的一个规划,一种方式,我再重复一遍,比说咱们建两个表,第一个叫ED比一,第二个叫E丢DB2,在两那个数据库里边都是有两张表,一个叫COS1,一个叫COS2,咱们一会儿这么来做,那这做的过程中要怎么实现的,咱给它就约定这么一种分片的规则。我写一下啊,约定。这么一种规则,什么规则呢?因为咱们现在要做的叫水平分库,并且这里边咱是不是也做的叫水平分表,所以咱们把两个东西在一起混合使用一下,就给它写的稍微复杂那么一点点,那什么规则我说一下,首先第一个规则就咱们约定。
04:12
因为我们在添加课程的时候,在咱们的课程表中一个字段,这个字段叫user ID,咱一会这么约定,当我这里边的user ID值。如果说它是一个偶数啊,这是偶数,那咱把这个数据就添加到我们这个edu。下划线。DB1的这个数据库中,咱做这个操作,如果说它是基数,那我们就加到EBDB2的数据库中,我写一下啊,如果这个ID它为这个。基数,那我们就把数据添加到这个e Du db2的这个数据库里边去,咱们现在要做这个效果,但是在添加过程中,咱们给他再加上一个表的规则,因你注意啊,上面这是你数据库的规则,这边有你的表的规则。
05:09
这是数据库的这么一个规则,然后下面我再写这个表的一个规则。然后表规则怎么样呢?咱就跟上午一样,因为咱们现在只是判断加到哪个数据库,最终肯定要加到表里边,所在表里边咱们约定这么有规则,跟咱上午一样,比如现在我在加的时候,在我表里边是不是有一个cid的时候,我约定如果cid是这个偶数。那咱把数据就添加到这个叫COS1的这个。表里面去,如果说你CAD它为一个基数,那他把数据就添加到这个叫cos加线二的这个。表里面去,所以现在我们就做这么一种,就是规划,这是我们一个需求分析,最后重复一遍,然后再按照形式把表创建,把代码就成完成。首先我们两个数据库一丢,DB1 DB2在里边分别都是两张表,COS1COS2,它们结构都一样,然后咱们规则就是两种规则,一个数据库规则,一个表规则。数据库规则就是当我在添加的时候,如果说这个user ID是基数,那我们就加到地面中。
06:24
U cid是偶数就加到b Bo中,然后表中里面规则就是我们再加克程中,如果cid是偶数,那到CO1里边,Cid是奇数就到COS2中。所以咱们。按照这种形式把这个用筛顶DDBC实现出这种水平分库的这么一个最终效果,咱们就是按照这种方式把它做大,所以各位通过我的描述,你先知道我们目前要给他最终做成什么样的效果,所以咱们把这需求做了一个分析啊,就是这么一个基本过程。
07:01
然后这个分析之后,咱们下面咱们进入到我们的第二部分,先根据需求创建出我们做这个分库。分表中这个数据库,还有它这个表,把这个我们先创建出来,然后现在在里边给各位快速创建出来,咱们直接在工具中操作一下。首先我先建两个数据库,第一个叫e Du DB,这是第一个数据库。然后我在创建第二个数据库,叫edu。DB2。这两个大家看目前应该都创建出来了,然后创建之后在两个数据库中都是创建两个表,这两个表跟咱上午那个表一样,这是第一个叫。COS1我在BB中先创建。等它创建出来,创建之后,我们再创建COS2。所以在我们的DB中两个表都创建了,然后创建之后在DB中同样两个表,咱们快速创建出来。
08:06
这个先执行,然后再改成一把这个创建。所以这样的话,大家看目前我两个数据库都有了,然后在两个数据库中分别有两个表,一个叫COS1,一个叫COS2,这个啊我们就快速完成了,所以这是关于表的一个准备工作。我把这个给各位截个图,咱放到我的课件中给各位按照这个特点把表数据库快速创建,然后这个创建之后,咱们的第三步就开始编写代码,把这过程做个实现,因为咱们前一个例子中把这个代码结构已经写出来了,咱下面其实只要做什么,我们只需要第一个要改一下配置文件,加上数据库的这种分片规则,然后下一部分写这种测试方法,把它这种写个测试,咱只需要写这样东西。
09:05
那我写一下我们的第三步,就是咱们在这个我们这个spring boot。它的这个配置文件中配置。你这个数据库的一个分片的一个规则,然后配置之后,第四部分我们就来编写这个测试方法,进行最终测试,主要咱就写这么两部分,把它最终做到。所以现在啊,都是准备工作,那这些都做到之后,咱下面进入到第三步,咱们开始写它的分片的规则,或者说分片的策略,咱们先来到这里边。大家看啊,咱之前例子中呢,有这个配置文件,咱为了区分,我把它重新复制一份。得先备份一下,这是咱们之前说那个就是水平分表,比如说叫这个就是。一啊零一,咱先写一个,然后我现在在这里边就是property里边完成我们现在这个具体操作啊,咱从这里边改成我们做这个就是。
10:10
水平分库的操作,那怎么做,咱们把它改一下。咱们把这打开,然后用它操作啊。因为这里边呢,有咱上午写那个分表的那个策略,但是咱现在要加上分库,那怎么加,咱们还是找它的官网上这个例子大家看啊,其实跟这例子差不多,再看例子中第一部分。咱是不是要写这个数据源配置,也就是说你要连多个数据库,或者你的某个数据库,但我现在列的数据库是不是有两个要,所以咱们现在第一部分在里边要创建我这个数据源,但是数据源目前有两个,因为咱要做一个水平分库。我写一下啊,因为我们要做水平。分户,所以我们要配置两个。
11:03
数据源这是里边的第一部分,那咱下面给他做一下啊,这里边比如之前它叫M1,咱再来一个逗号,再加一个叫M2,这写法你参考官网都有,这是第一个,然后写完之后在里边咱就对应它配置你的数据源的具体内容,那咱们一个一来配置,这是咱们上午写那个,那我现在用它快速改一下。我写一下啊,这是配置的第一个数据源。第一个。数据源,然后这是配置的第二个数据源,然后第一个数据源咱改一下,它是M1,这是你的连接池,这是地址,然后数据库,数据库改成我们的数据库,咱们叫e Du DB下线一。我改一下啊。Edu下划线。DB,这是第一个数据库,然后这是第二个,第二个咱的名字叫M2,你把这需要改一下,跟你一样,那肯定不对啊,改成这个叫M2。
12:05
这是第二个,然后在里边我们也改一下驱动名字,包括这个连接池,这是数据库的名字,咱改成叫EDDB2,这是第二个数据库,包括用用密码都一样,所以这样的话,咱把这数据源部分就配出来了,它有两个M1 m2 M1对应这个,M2对应它。这个做到了,然后做到之后呢,咱们往下来看,下面怎么做,给各位来说一下啊,咱们看一下这个官方的例子中往下来看。大家注意啊,在这里边其实给我们写到了,咱要写的就写这么一种形式,也如你现在你数据库的这个分布的情况,包括数据库里边的表的分布情况,把这个叫做配置,咱看上午这个配置,包括这个配置中的,我们只是写了M1,因为当时咱没有做分库,只是M1中的表,现在既有表还需要有这个数据库啊,那我把这个注释给大家改一下啊。
13:08
咱需要指定我们数据库。就是指定啊血压啊。你的数据库的这个。分布的。这么一个情况,还有你数据库里边这个表的一个分布的情况,把这个需要设置下的规则,然后这个规则中大也看到了,因为咱目前呢,有两数据库,一个是M1。还有一个是M2啊,有两个数据库。而在M1里面有你的COS1COS2,在M2中也有COS1COS2,所以咱们需要把这个做到,我写一下啊,它有一个。COS1。还有一个COS2,那我们需要设置一下,大家看啊,咱们这个写法中呢,把你的表已经设置好了,就是COS1COS2,而现在这位置肯定不是写M1,咱把M1位置要换成咱们里边那个基本规则,因为咱们有两个,一个M1比M2,现在肯定不是这么做,那咱们参考它的官方文档,把这个咱给他快速改一下,我就把这个。
14:25
复制过来用它改成我们的效果啊,咱给他改一下啊。你看它的写法啊,这里边它的例子中叫DS,但是咱们不叫这个名字,我们是不是叫M,咱是M1或者M2,然后这里边咱们不是零和一,我们是一。还有一个二,这是我们的规则,所以这样的话,把这个规则就写出来了,就是你现在数据库和你的表的分布情况,咱数据库有两个数据源,一个M1 1M2,就是你的一或者二,然后里边的表有COS1或者Q42,这样的话把这个做到了啊,这是我们。
15:03
指定数据库的这种分布情况和里边表的分布情况,然后这个写完之后,因为咱们要添加那个课程信息,肯定要设置你的主见,包括它的这个生成策略,这个不需要变,还是跟上午一样,然后除了这个之外,最后要设你的表的那个就是策略。包括咱们表策略,其实上午已经设过了这个策略。看看我写到的啊,我的策略就是当CAD的值是偶数,那我们向COS1里边加数据,当它的值是奇数,向COS2里边加数据,这规则咱上午都写过了,CAD是它的主键,如果它是偶数,向COS1里面加,如果是奇数,向COS2中加。比如你对二做个。取模,如果它能整除那就是COS1,不能整除就是COS2,这是你的表的那个分片策略。我写一下啊,这是指定你的。表的策略,然后咱们现在啊,不止有表,是不是还有那个数据库,所以咱们最后还需要多加一个设置,这是什么,就是。
16:10
指定你数据库的这个分片的一个策略,这要做到,因为咱们之前没有做到,数据库只到这个表,而数据库策略怎么样,咱们刚才也做了一个约定,这个约定根据UID做个判断,然后写一下啊,咱就来约定一下,如果说你那里边的user ID,咱看这字段啊,User ID如果说它是一个偶数。那咱怎么做,就把这数据添加到咱们那个M1的这个数据库中,这是一个如果说这UCID是个基数,那数据就给它添加到这个M2的这个数据库中,这个是我们设一个规则,根据user ID这个操作,而这个规则中咱是不是也是这么做,用这个对二取模,然后加一,做到它是M1还是M2。
17:05
这个啊,是咱们一个策略,那这策略怎么做,咱们到它里边看一下啊,首先里边有第一种写法,你可以用这个改一下,跟它基本一样,我把这个给各位复制过来,这是第一种写法。然后大家看啊,它在写法中怎么做,这就表示你根据哪个字段做这个策略,这字段咱们是user ID是不是它就这个,然后下面是你具体内容,因为咱现在根据UID我们做这么一个策略,如果说你的策略中UID是一个偶数。比如咱们给来一个加一。啊,是偶数,那咱给它就放到我们的M1里面去,如果它是奇数,那咱就放到M2中,所以里边我们写的是这么一个基本策略,这么写是完全可以没有问题的。但是大家看啊,这希袜中有这么一个地方叫default。
18:00
这是什么?是不是就默认的,就是默认情况下,你这个数据库中所有表都按照规则来做,比如现在我想我只想指定某些特定表这么做,而这个是所有都这么做,那咱怎么做呢?我写一下啊,就是现在这么写功能可以做到,那咱可以把它做进步的简化。怎么简化给大家,我在里边写一下啊,咱写法前面都是一样的。给前面仰,然后后面呢,给它改一个东西,改成这个叫tables啊,注意tables tables后面加上你的表的规则,因为咱的表是不是cos,然后Co后面加上一个叫A,就是这个数据库的一个策略,在策略后面加那个叫in line,然后后面就一样了,跟这个就一致了,加这个shding column。等于这个。User ID。这个是一个写法,那比如说把这句话我先注掉,而这句话的含义是什么呢?给大家强调,它就表示对我们数据库中的这个表的策略中这个UID做这个规则,如果说别的表里边有ID,那不做这个规则,只用你的具体表,然后下面一行写法跟上面一样,再用它也是快速改一下啊。
19:19
前面。这个部分到这个Co,然后在cos后面部分加上这个叫date,就这个database这种策略加一个叫这个音,来点上你里边这种规则的表达式,把表达式加上,然后表达式是咱们刚才写的这个东西。拿回来,所以这样的话,咱们又写了一种其他的写法。各位把这知道啊,然后把这个再重复一遍啊,就是我目前的写法,在这个过程中呢,就是咱们现在把这个分库的策略就已经是完成了,就这么一个策略,然后在策略中,首先我们做的这几部分,第一部分。
20:03
配置你的数据源,因为咱们是分库嘛,多个数据库,我是M1M2,包括里边就用你不同的库,这是DB1,这是DV2,然后这做完之后,下一个要设置一下你的数据库和表的分布情况,咱有两个数据库,M1M2和表COS1COS2里边是这么一个规则,然后除了它之外,设置你的cos表中的主键的策略,就是cid,我们用这个snow flag,上午咱们看到里面这个ID的这么一个规则,然后设置之后,咱下面指定你的表的分险策略,但是根据CAD,如果它是偶数,是奇数到不同表里面加数据,另外再指定你库的这个策略。刚才咱也说到库里边,我们的策略就是根据user ID做判断。当然你也可以根据CD判断是一样的,我只想改一个字段,让各位知道啊,不同的这种效果,然后最终我们有两种写法,第一个是所有库表的规则,帮你指定表,这个规则咱就写一个扣这个表,包括里边根据我们这个。
21:06
字段包括根据你的表达式制定你的规则,U cid偶数到M1里边,U cid是奇数到你的M2里边,然后最终日输出这些基本信息。所以这样的话,咱们就把这个。分库策略在里边完成配置啊,主要就是这么一个写法,所以各位知道里这过程不需要各位可以去记,因为在它的官网上都有对应的代码,对应的配置,但你要知道这里边的每行配置,它的具体含义什么意思,刚才每个我应该都解释出来了。然后我现在把这配置给各位。复制到我们的课件中来啊,给他直接拿回来,就各位根据这个过程能把这个给他配置出来。这步我们就完成了啊,然后完成之后呢,咱现在把第三步做到了,完成了数据库的分片规则的配置,然后咱们下面就是到最后一步就来开始编写这个测试代码,把这个最终的效果给它测试出来,最后咱们来做一个最终的测试,看一下效果。
22:14
那我们来写一下啊。咱来到测试代码中,就是在这里边,那咱怎么做呢?比如一会儿我们这么来做,咱们也是先写一个添加代码,在添加中注意啊,这里边有两只特别注意,一个是UCID,还有一个是你的课程ID,你根据它要做判断,另外大家做个查询,根据这个。就是课程ID还有UID分别查询,咱们可以看到它有什么效果,因为咱们有规则,你是奇数,偶数会操作不同的库,不同的表,举一个具体例子,比如说啊,我现在cid,它的值是二。然后我这里边比如说这个userc ID,它的值等于这个就是11,那这里边如果说咱们这么操作的话,那会怎么做?第一个u cid是不是奇数,它会把数据加到D边中,另外cid是偶数,它会加到D边中,这个是不是COS1这个表里面去在里边用的数据啊这个特点报告单查的话,根据u cid找到DB,二,根据cid找COS1把数据查出来,所以最后写的肯定是这么一个效果。
23:29
所以这样的话,咱把这配置我们就最终完成了啊,各位知道这配置中每步有什么含义,包括咱们目前要做这个效果,就是我们介绍这个需求。这个我们先做到这里。
我来说两句