00:00
下面我们继续来学习分库分表的基本概念,刚才呢,我们学的是垂直分表,垂直分库,那下面咱学什么呢?肯定学这个水平分表,还有水平分库,那我们来看一下这个水平分表和分库到底它是什么意思?我在里边给大家写一下,首先大家先学习什么叫水平分库,然后说完之后咱来介绍一下什么叫水平分表,那我下面给各位详细来说明,咱们还是结合刚才这个例子,把这个内容给各位来具体来讲解一下,那我们来具体看一下。首先给大家画这个图,还是刚才这个图,大家看啊,这个图重新画一下啊,刚才我们讲到叫做垂直。这么一个的库,它的做法就是呢,把咱们单一的数据库按照业务划分成多个独立的数据库,让数据库做到专库专表,那给大家画一下,咱们刚才举个例子,我们这个在线教育项目中,我们有这么两个表,一个是课程表,一个是订单表,按照咱们分库就是垂直分库原则,我们这个课程信息表咱可以放到课程数据库中,订单表放到订单数据库中,也就现在里边。
01:27
两个数据库我写一下,第一个是咱们的课程的数据库,第二个是咱说那个订单的数据库,然后在我们的课程数据库中再有两张表,一张是课程的基本信息表,一张是我们这个课程的描述表。那我来写一下,这个是课程的。基本解表,然后下面这个表叫做课程的。描述表,然后这里边是订单数据库,里边比我们刚才说那个订单表。
02:02
这个是咱们刚才说的垂直分库,但是各位注意啊,比如说我们现在咱们第一个把我们的表做了一个垂直分表,然后又做了垂直分库,而这么做之后,现在还是有问题,什么问题呢?比如现在啊,也是随着我们业务量的增加,我们的表中数据也会急剧增加,假如现在我虽然做了垂直分表,也做了垂直分库,但是我现在表中数据依然很大。比如我现在在我们这个就是在线教育项目中,比如现在我这里边有几万个或者几十万甚至几百万,甚至更多的课程,那咱现在在我这个课程表里边是不是要存更多的数据,那也会造成我们现在你这个进行操作数据库中,它的效率会很低,因为目前只做了一个垂直分库,垂直分表,但是我表中数据量大的问题它依然存在。
03:00
那针对这个问题我们要怎么做呢?有有同学可能会想,我现在可以把这再做分库,再做分表,但你注意啊,目前在这种方式,我的课程这个表好像没法再进行表的划分,也没法再进行垂直库的划分,因为你不可能把它再建一个基本信息库,建一个描述库,咱肯定不这么做,就算这么做的话,它也不能解决数据量大的这个问题,那怎么做呢?所以针对这个问题,我们就要用下面的要说的方式,叫做水平的进行方式,咱要做水平分库,或者说水平分表。那下面给大家介绍一下什么叫水平分库。我在里边写一下,那水平分库什么意思呢?大家看啊,我们目前的问题就是比如现在我去访问课程,课程呢都在我的课程数据库中,就算我这里边把课程表做这个就是垂直的分分表,那他现在也是仿一个数据库中,这张表里边数据量大,问题依然存在,那咱怎么做呢?
04:07
大家想一想啊,就是现在我们能不能把这数据库做个切分的,怎么切分,比如现在我的课程数据库是不是一个数据库,我是可以建多个数据库,比如现在我建两个数据库,然后让他通过两个数据库来分担这个表中数据多的这个问题,那怎么做,给大家画一下。比如现在我这里边我的做法就是我可以把我们这个就是。一个课程数据库,给他切分成两个相同结构数据库,注意我的描述啊,我现在有一个数据库,然后把这数据库怎么做,咱给它拆分成两个数据库,或者说多个数据库,而这拆分成的两个数据库,它们结构都是一样的,什么叫结构一样?比如我现在我在这里边呢,还是有这么一个数据库,数据库的结构跟我们之前一样。
05:04
比如这是我们的第一个数据库,假如这个数据库我起个名字,我们就要这个课程的这个数据库,它这个A。然后这个做到之后,我们把这个可以再创一个跟它相同结构数据库,注意啊,这两个数据库的结构是一样的,那比如这个数据库我们就叫做课程。数据库。这个B。而大家注意这种方式叫什么?就叫水平分库,也就是说我们创建多个相同结构数据库,在数据库A、数据库B中,他们的表都是课程基本表、课程表述表,表的结构都一样,而两个数据库也一样,这时候用两个数据库或者多个数据库做个切分方式,这就叫水平分库。那这么做的话,有同学可能会想一个问题,我现在这么做的话,我数据该怎么存呢?我怎么把数据在里边存储,那这里面注意啊,这个存储过程中,咱需要在我向表中存数据中做一些特别的处理,怎么处理,这种处理方式有很多,给大家举一个最简单例子。
06:17
比如我现在我想做这个就是课程信息的添加,那咱添加信息咱是不是要通过就这里边往这个表中加数据了,而我加完数据之后,课程是不是有它的ID址,那我现在我就可以用一种最简单方式,根据课程ID做个判断,怎么判断呢?给大家写一下啊,比如现在我做这么一个判断。当我这个课程ID,比如它是一个这个偶数的时候。那怎么做,咱就把数据加到我们这个课程数据库A里边,如果说ID是基数的时候。是奇数的时候,那怎么做?咱就把这个数据加到我们的课程数据库B里面去,就是在我们家之前做个判断,然后依次向不同库里边相同的表中加这个数据,这个是我们一个特点,那这个具体判断很简单,比如说写一个最简单的例子啊,假如用这个ID。
07:21
咱怎么样取模这个二,如果这个值啊等于零,表示是不是就是偶数,如果它这值不等于零,是不是就是奇数啊,就这一个特点,如果这个值等于零表能整除,那它是偶数,不能整除就是奇数,所以咱用它最个最简单这么一种判断。然后这么做之后,当我再加数据,比如我这个ID手偶数向A里边加数据,是基数向B里面加数据,而最终部署的话,咱可以把数据库放到不同的服务器中,然后每个里边放相同表结构,这么做之后能实现一个叫水平分布处理,而这么做大家就会看到啊。
08:01
咱们正东做的目的是什么呢?是不是也是为了减少你单库单表中数据啊,假如我现在有10万条数据,那我在A库里面存5万条,B库中存5万条,然后它可以做到一个,就是让你单库单表数据减少,这种方式就叫水平分库。所以各位把这个给他知道,就你知道什么叫水平分库。我把这张图给各位截过来,就是这么一个基本的一个结构,就是咱们。做法就是。把你的数据库创建多个相同结构的数据库,然后在库里边的表一样,在创建过程中,我们最终往里边肯定要加数据,那加数据怎么做,咱可以做一个判断,比如现在我约定一个规则,当我的课ID是偶数,咱们把数据加到数据库A中,我是基数加到B中,但是A和B数据库结构是一样的,这种方式就叫做水平分库,它的目的也是为了减少咱们的单库单表中因为数量过大而造成的性能降低的问题。
09:11
这个啊,各位把什么叫水平分库给他知道,然后这个说完之后,最后咱来介绍最后一个概念叫水平分表。就是这个水平分表跟咱刚才说的水平分库差不多,库是对这个数据库做这个切分,而表那肯定对表做个切分,那最后咱说一下什么叫水平分表,给各位在里边我来画一下啊,咱说最后一个概念叫做。水平分表,那我来解释一下,比如说咱们现在在我们这个操作中,咱们做了一个垂直分表,垂直分库也做了一个叫水平分库,但是我们这么做之后,大家发现啊,这是做法中都有一个问题,咱们不管你是一个库还是多个库,里边是不是只有一个表,比如现在按照我刚才说的水平分库方式,咱把它划分成了多个数据库,里边结构一样,比如现在我这么做的话,是不还可能会产生单表数据量过大呀?
10:17
比如说我现在A库里边这个表中有1000万条数据,B库中表中也有1万条数据,那这么做并不能根本解决问题,大家有同学想,我把这库是不是可以再给他拆分,比如说拆分成数据库C、数据库D、数据库E、数据库F可不可以可以没有问题,你拆分成多个也可以。但是会有一个问题啊,大家注意,因为现在我每个数据库是不是放到不同服务器中,比如说现在我把数据库拆分成五个甚至更多,那会造成我现在维护起来是不会特别不方便,我有多台服务器中都有数据库,最终我运维再去维护肯定会很不方便,所以针对这一系列问题,最后我们就看这种方式,这种方式就叫做水平分表,那什么叫水平分表?
11:05
给大家说一下啊,比如现在我们这里边呢,有这么一个数据库啊,比如现在我也做了垂直分表,垂直分库,水平分库,然后这是一个数据库,比如这个叫课程数据库,这个A。然后在课程数据库A里边,比如现在我们有这个表,假如这个表就是我们说那个课程表,包括它的描述表,假如里边啊两张表。我写一下这是课程那个。基本信息表。然后还有一个表是咱说那个课程的。描述表,那这个时候,比如现在我想对这个表做个水平分表,那怎么做呢?给大家说一下它的做法,就是咱们第一个还是在同一个数据库中,数据库不变,就是现在还是这个课程数据库A。这个数据库没有变化。
12:02
然后在里边怎么做呢?那就是把我数据工作的表建,创建相同结构的多张表,比如说现在里边两张表,一个基本信息,一个描述,那里边怎么做,咱先创建第一个。然后再创建相同结构的第二个,再创建相同结构的第三个或者第四个等等对应的实际,比如说现在我就创建了两个,这两个表。然后大家看啊,第一部分表是咱们的。这个部分有课程基本信息,包括描述,第二个有课程基本信息,包括描述,大家注意他们的前提条件是什么,都在同一个库里边。假如说这是表一。这是描述表一,这是课程表二,这是描述表二,以此类推。所以现在我们这么做就叫水平分表,而这么做的最终效果怎么样?刚才一样,比如现在我们也可以根据这个课程ID做区分,当你ID是基数,那就放到我们的课程信息一表和描述仪表中,当你是ID是偶数,或者说是别的,这个特点咱放到课程信息表二、课程描述表二中,跟刚才类似,刚才是分户,现在是对表做过处理,而这么做的好处显而易见了。
13:22
咱们库做了水平分库,表做了分表,那我这么做之后,咱们可以让每张表中是不是放我数据中的一部分,假如我现在数据有100万条,那比如现在我拆分成多个表,每个表中放一部分数据是可以了,按照那个规则,奇数,偶数,包括其他规则向里边放数据,这种方式就叫水平分表,也就是说呢,咱们刚才说了这么多,不管你是垂直分表、垂直分库,还是水平分表、水平分库,他们的最终目的都是一个目的,为了减少你单库单表中的数据。
14:02
为了解决因为数据量过大而造成的性能的这么一个问题,所以这种方式叫水平分表,就是把你表拆分成多个相同结构表,然后按照一定的规则向不同表里边给它添加数据。这个啊,我们就做了一个说明。所以咱们现在就把里边的几种分库分表给大家做一个介绍,但是介绍中各位要明确,它们区别很明显啊,水平分库和水平分表,如果你是水平分库,那它库是一样的,水平分表它的表结构也是相同的,但你做垂直的话,垂直分库库是不一样的,里面表也不同,而你垂直分表分成多个不同的表啊,所以这是有它一个区别。最终给大家重复一遍啊,水平就是你的库和表是一样的,而垂直廓表都是不同的,这是它的两种主要方式。
15:00
垂直和水平。所以咱们现在就把分库分表的基本概念给大家做个说明,要求各位这些概念不需要你死记硬背,但是要求能知道这些方式到底是什么,然后他们分别用在什么场景中。刚才我把每部分给各位应该都解释出来了,这是关于分布分表的基本概念,我们就介绍完了。
我来说两句