00:00
各位,刚才呢,我们讲到了什么是分库分表,分库分表呢,主要是为了解决由于数据量过大而造成数据库的性能的问题。咱们下面给大家就来具体说一下这个分库分表到底该怎么实现,也就是介绍一下分库分表的这些方式。那我来写一下。分库分表的方式,首先各位要明确,我们要对数据库进行分库分表有两种方式,一种叫垂直拆分,一种叫水平拆分,我在里边写一下。分户分表有这么。两种方式,一种方式叫垂直拆分,或者说叫垂直切分。还有一种方式叫做水平。切分,这是分库、分表的两种方式,而在两种方式中,各位要明确,垂直切分里边又分成两种,一种叫垂直分表,还有一种叫垂直分库。
01:14
比如咱们对表和库都可以做这个操作,另外水平里边跟他一样。水平切分中也分成两种,一种叫水平分表,还有一种叫水平分库,所以这时要给各位介绍内容,那下面我就给大家详细介绍一下,到底什么是垂直拆分,到底什么是水平拆分,咱们可以结合几个具体例子,把这概念给各位做一个详细的一个介绍,因为咱们现在内容中主要讲筛丁水重一些基本概念,咱们把概念学完之后,最后再用里边的相关的产品来完成这个具体的代码实现。咱们现在先学的是概念部分,那下面我们看一下啊,首先我们先看第一种方式叫做垂直拆分,在垂直拆分中给大家介绍什么叫垂直分表,然后介绍之后再来介绍什么叫垂直分库。
02:15
这个是我们要做的介绍,那首先咱们看什么叫垂直分表,这里边给大家举个具体例子,再来引出我们这个垂直分表的切换概念,那我们来看一下啊。比如现在呢,我们打开一个网站,就是我们上硅谷的鼓励学院。咱们把这个网站打开。等他打开,大家知道鼓励学员网是一个在线教育平台,咱通过这个平台可以进行我们相关课程学习,就是里边我们可以搜索或者找到某个课程,然后点进去某个课程,能进行这个课程学习,就咱以它为例来说明我们的垂直拆分和垂平拆分到底都是什么意思,第一个咱看这个叫垂直拆分。
03:07
那大家注意啊,我给各位画个图,大家看我们这个鼓励学院的在线教育网站中,大家看你看啊,我们这里边如果说咱要学习某个课程,首先进入到了是不是咱们这个课程的列表页面中,在课程列表中大家就会发现里边列出的是我们当前是不是所能学习的所有课程啊,当然课程我们可以根据条件查询,或者说做这个分页的查询,但是这里边会列出我们的所有课程。而大家注意,我们在数据库表里边,咱每个课程信息是不是要存到一张数据库表中,在表中会所课程信息,但是大家仔细看啊,你会发现。在咱们的课程的列表页面中,我这位置是不是只显示两个数据,第一个是什么?是不是你的课程封面,第二个是不是你课程名称,包括如果你有价格里面会显示,而别的信息没有显示吧,比如说列表页面中啊,只显示基本信息,当我现在点进去某一个课程,进入到是不是它的详情页面,在详细页面中显示它的基本信息,包含他的描述,包含它的章节、小节,评价、笔记等等信息,是不是他的更详细信息,所以这些数据肯定最终会存到我们那个,就是数据库中那个课程表里边。
04:30
那给大家画一下。比如现在我们做这个在线教育网站,有咱们相关这个课程,而课程呢,我们存的话,按照咱们最可的方式,咱在里边肯定有一个我们相关的自然教育网站这个数据库,比如说叫DB。然后在数据库中呢,咱们肯定会张表,这张表中呢,会存咱们的课程信息,假如我现在有这个表,表里边比如存储咱的客人信息啊,我这个表就叫。
05:00
课程表,然后在课程表里面会包含里边信息,比如说咱们刚才看到的这个课程的名称,包括课程的封面,比如说课程如果是收费,那里边可能会有它的相关的,比如这个课程的价格等等。然后除了这个之外,在里边还有其他信息,就是咱们刚才看到的,咱可以再看一下,我到墙页面中是不是有课程的简介,课程的目录,包括你的笔记,包括评价等等啊,就还有其他信息,那我写一下,比如说课程这个。简介或者说描述,或者说有课程的等等其他的信息,所以咱们现在在课程表中会存入这么多数据啊,这是我们就是针对我们的这个鼓励学院看到这个课程,它肯定是这么存储的。当然大家考虑这个实际场景,比如说随着我们现在这个时间的推移,或者说我们这个业务量的增加,那我在在线教育网中的课程是不会不断增加,比如说现在你的数量在不断增加,那咱按照我们目前的方式,这些课程信息是不是都要存到咱的课程表中,DRR表里边我可能存几百条数据,几千条、几万条,甚至几十万,几百万,甚至过千万,大家注意目前有问题了,如果你数据量过大的话,咱们对数据库这个表进行增删改查操作时候,它的这个操作效率是不是特别低啊?所以对它要做什么叫做分库,那要处理。而咱现在要讲第一种方式叫什么叫做垂直分表,那我说一下什么叫垂直分表?
06:44
把概念也说一下,然后咱说他具体怎么实现,它的做法是怎么做呢?就是我现在啊,把数据库中的某张表的这个啊某张表。就是要操作数据库中的某张表,然后怎么做呢?咱就把这张表中的注意啊,这张表中的一部分字段的这个数据存到一张。
07:12
新的表里面去,然后再把注意啊,再把这张表中的另一部分数据,你注意这表中比如有十个数据或者十个字段数据,咱们把其中五个字段放一张表中,把另外五个字段数据再放到另一张表中,它就是这么一个特点,然后给它写完,再把这张表中的另一部分字段的数据给它存到另外的一张。表里边这个过程就叫垂直分表,那这个具体什么意思,咱结合我们的具体的意思给大家说明,大家看啊,就按照我刚才说这个特点,咱们现在比如说啊,我到这个课程的列表页面中,咱是不是只查看封面和名称,或者你的价格呀,而你的课程描述咱不需要查吧。
08:04
比如说现在我可以怎么做,就把课程基本信息存到一张表中,里边只存它的基本信息,比如说有课程封面,课程名称,课程价格等等,然后再来张表,还是存课程信息,但是里边我可能只存描述这些信息,这个就是一种简单的分表,然后给各位在图上再来画一下啊。按照我刚才说的方式,比如现在我们数据库中呢,有这么一张表啊,就这张表。然后这张表咱现在要怎么做呢?我们要做的方式叫做垂直拆分,注意啊,叫垂直拆分或者垂直分表。那它的做法怎么样做呢?按照我刚才说到的这张表还是这张表,咱们这个表拆分成两个表,就现在我做拆分有两张表,然后第一张表,比如说我们就叫这个课程的基本信息表,这个表啊,它就是存那个课程的。
09:04
基本列表,然后除了这个之外,还有第二张表,这个表我们就叫课程的描述表。我小的位置。课程描述表,然后咱怎么做呢?就是我现在把我这个之前那课程表中的第一部分资源数,就是把这几个数据给到怎么样放到咱们的课程基本信息表中,然后另外把里面这个描述包括其他信息放到咱们的描述表中,也就是说把一张表数据分成两表进行存储,然后这个两表加一起构成咱们一个完整的课程信息,这种方式就叫垂直拆分,所以各位通过这张图至少能知道垂直拆分到底是什么意思。我把这个图给各位复制到我的课件中来。就是我刚才说的这句话,把数据库中的某张表的一部分数据放到一张表中,另一部分字段数据再放到一张表中,这样的话最终构成张表,当然各位注意我这个描述啊,只是把它一部分资数据,那我说的具体点,比如我现在表课程表中有这么。
10:12
1万条数据,那这个时候呢,我把这个字段数据放到课程表中,那这数据量是不是1万条,然后我描述中是他其他字段,这数据量是不是应该是1万条啊,所以它是这个特点,这种方式叫垂直拆分,所以各位知道这个特点,而这么拆分有什么好处呢?我觉得我们应该一目了然,能看到它的好处啊,大家注意。比如现在我在这个课程的列表页面中,咱是不是只查基本信息啊,那这个时候我只查什么就可以只查课程基本信息表是不是足够了,不需要查描述表,给大家明确我描述表中一般描述的数据是不是很多呀,那你很多的话,查的话肯定会占用大量的IO,所以咱们如果说只显示基本表的话,那我就查这个数据就足够了,不需要查描述表,这是它一个好处。
11:08
另外啊,它里边还有一个特点,比如我现在我想改这个课程,这个描述信息,比如注意我想改的信息,如果按照之前方式,咱在改数据的时候,那别人是不是不能这样操作,就是把这表是不是做一个锁定啊,那这个时候你只改描述我的课程名称,课程封面,课程价格是不是也需要锁定,是不是就影响我这个查询效率,但是现在按照这种方式,我改描述的话,基本信息是不受到任何影响,是不是可以继续进行查询,所这个啊是它的一些好处,所以咱们现在把垂直分表给大家做个介绍,就是把你一张表按照你的相关这种查询的频率,或者你相关的这种需求,给它拆分成多个表,根据它的字段,一部分字段数据放到一张表中,另一部分字段数据放到一张表中,咱举一个课程查询就是一个典型例子,所以这是关于垂直分表它的一个描述,大家把这个特点给他要记住。
12:08
这个啊,我们做了一个说明。然后咱后面会用到这个筛定皮尔中的相关的这个产品,会完成这个具体效果,现在咱讲的主要是一个基本的概念。但这概念给大家说明啊,就是各位啊,不需要刻意去记这里边到底什么叫垂直,什么叫水平,因为记的话很容易忌讳,你就结合我们的具体例子,通过这个例子,你把它到底是什么事情给他要并列出来,所以这是咱们说的什么叫垂直分表,给各位做这个说明啊,各位把这知道。这个我们就介绍完了啊。然后介绍完垂直分表之后呢,咱们下面继续给大家介绍,那下面介绍什么。就是咱要说这个叫垂直分库啊,就是它也是垂直,那什么叫垂直分库,给各位我这里来说一下啊。
13:02
大家注意啊,就是我们刚才啊做垂直分表,虽然说把这表做了分的这种方式,但你注意,我现在就算分完之后分成了两张表啊,但是你明确啊,咱不一定只分两张表,根据你的实际,你可以分多张表都是可以的,我现在根据我们的场景分两个表,但是你注意,就算我分多个表,这多个表是不是还是在一个数据库中。这各位应该能想清楚啊,现在你分了多个表,这多个表还是在一个数据库中,而你查的话,会造成你数据库这里边IO量是不是增大呀,就是你现在比如你之前查一张表,现在多了两张表,或者多了三张表,要查的话,一个数据库的压力是不是会增大呀,所以这是这种情况下,咱可以怎么做,就可以做一个叫垂直分库啊,那下面给大家说一下什么叫垂直分库,就是刚才说一场景,你分表之后,它还是在一个数据库中。也是增加你数据库查询的压力,那这个时候咱可以做一个分库处理,咱先说叫垂直分库,什么叫垂直分库呢?我写一下啊,它的描述就是把咱们现在。
14:10
单一的数据库按照你的这个业务进行这个划分,它可以做到什么?就是你的专库专表的使用。我写一下啊专库。专表。什么叫专库专表?那我下面给大家也是咱们举个具体例子来说明这个垂直分库到底是什么意思,但我强调啊,这里写到是按照你的业务定划分,那咱们还是找到我们在线教育这个咱举一个具体业务。大家注意,比如我现在啊,这里边我有这个课程的信息,它有课程的列表,然后我们一点到他的是不是详情页面,那这课程比如说我这课程是收费的话,那这位置咱是不是要把课程进行购买呀,而在这个过程中会产生几个表,第一个表就咱刚才说这个课程信息表,还有一个表,咱是不是要产生订单呀,所以它是不是有一个叫课程这个订单表啊,那咱以它为例来说明咱这个垂直分库什么意思?
15:19
给大家我来画一下啊,按照我刚才说到的,比如现在我们这里边有这么一个数据库。有一个BB。然后数据库中呢,有这么两个表啊,第一个表就是咱那个商品表,当商品表你按照我们刚才方式,比如咱们已经做这个拆分啊,那比如第一个就是我们的商品表。我小的位置啊,它是一个。商品。这么一个表啊,这是第一个表,当然这个表按照刚才咱垂直方式可以拍成商品利润信息,还有商品描述信息,然后除了商品表之外,因为咱的课程如果你要收费的话,可能要购买,购买的话最终咱肯定要生成订单,假如这个表是咱们的。
16:03
订单表就存你课程生成的订单啊,这是我们的原始方式,但这种方式大家会发现,因为他们都在同一个数据库中,而在同一个数据库中我们要进行查询,会造成你这里边的数据操作中会有大量的IO产生,不利于你查询效率这么一个提高,那这时候怎么做?咱可以第一种方式,刚才咱们讲的叫垂直分表,我可以把商品表做拆分,但是订单表这不好拆分,那咱怎么做,咱就又可以用第二种方式,在这基础之上把这个库再进行拆分,刚才叫垂直分表,现在叫垂直分库。那垂直分库什么意思?给大家画一下啊,它的做法其实很简单,我写一下啊,这个叫。垂直分库就是按照我们的业务,把你每个业务专门建个数据库,里边放你专门做业务操作的表,按照我们这场景,大家看是不是一个商品表,是不是订单表,那怎么做?咱的做法就是第一部分咱们先创建两个数据库,各位要明确啊,先有两个数据库。
17:15
然后在数据库中的第一个数据库,就是咱们那个课程或者说商品啊,咱叫课程它这个数据库。啊,这里边啊,我改成叫课程啊,或者叫商品也可以啊,因为都是我们这个相关的东西,咱们给他写的完整点啊,这叫课程。表,所以咱们做法就是把课程这部分专门建个数据库,我们就叫课程数据库,然后把这个订单在创建一个数据库,它就叫订单数据库,这里面注意是有两个数据库,然后咱在课程数据库中放咱的课程表,按照咱们的拆分方式,比如里边有这个课程的基本信息,包括课程的描述信息表两个表。写一下啊,基本信息表,包括有这个叫课程描述表。
18:07
然后在我们的订单表里边,咱就放一个这个课程的订单表。所以这种方式又叫垂直分库,而最终咱在部署的时候,我把课程数据库放在一台服务器上,把订单数据库放在一台服务器上,他们是不同服务器,然后你再进行数据库操作的话,就做到咱刚才说的专库专用,减少你这个数据库IO的压力,因为它是不同的服务器上不同的数据库,真正做到专库专用,你做课程就访问课程数据库,你做订单就访问订单数据库,这种方式就叫垂直分库。啊,所以这个是咱们做的第二个概念介绍,我把这个图给各位截过来,要求各位通过这个图把这个特点给他知道啊,我再快速重复一遍啊,它的做法就是什么呢?把你单一数据库按照业务进行划分,做到专库专表。
19:07
比如我们刚才这个场景中,我的课程和订单咱可以分成两个数据库,一个课程,一个订单,两个数据库,然后在课程数据库中放课程信息表,在订单数据库中放订单表,他们步入到不同服务器上,做到专库专用,这种方式就叫做垂直分库。所以这样的话,咱们就完成了两个基本概念讲解,关于垂直拆分中的垂直分表,还有垂直分库,大家把它到底是怎么做的,包括它的场景给它记住,然后一会儿给大家具体来讲解什么叫水平拆分。这个我们就做了一个介绍。
我来说两句