00:00
各位,刚才呢,我们给大家介绍了分库分表中一些基本概念,那下面呢,我把这几种分库分表方式给大家做个小结,并且说出分库分表会带来的一些相关的问题,那咱们来看一下,首先咱们快速给它总结一下,就是几种方式,第一个叫垂直分表。什么叫垂直分表?很简单,就是我现在把一张表中的一部分资源数据放到一张表中,另一部分资源数据放另一个表中。比如咱举这个课程,它可以有基本信息,有描述,这是第一个叫垂直分表,但是垂直分表之后只把一张表做了拆分,那它并不能根本解决我们的数据量多的问题,那怎么做?咱可以做一个叫垂直分库,根据业务把它翻成多个独立的库和独立表,做到专库专表。比如我举个例子,课程和订单我们是两个不同数据库,然后里边放专门的表,他们部署到不同服务器中。
01:03
但是这么做里边还会产生一系列问题,所以咱做一个叫水平分库,就是把你数据库创建多个相同的结构,然后里边有相同表,把这数据存到不同库里边。最后一个叫水平分表,它的做法就是在一个数据库中创建多个相同结构的表,在表里边平均在里边放我们的不同数据。也就是说呢,前两种方式,垂直分表、垂直分库都是针对你的这个结构发生变化或者发生一些修改,而水平分库、水平分表是把数据按照你的字段或者你的数据量进行不同显示。比如说我现在把每1万条数据存到不同表中,把每1万条数据存到不同库中,这是两种不同的方式,一个垂直改为结构,一个水平改为你的数据量。这个啊,是咱说的这么两种方式,垂直和水平,当然有同学可能会问到说这两种方式在实际项目中到底该怎么去用呢?或者用在什么地方,是我们都用还是用轻的一部分,那给大家我在里边来说一下。
02:14
关于这个分库分表的这么一个应用和它带来的问题,首先咱说它这个应用,比如在实际中该怎么做呢?给大家强调就是一般来讲我们做这个就是就是在我们数据库设计的这个时候,我们就要考虑到什么,这个垂直分库和垂直分表,也说你在设计数据库的时候,就要考虑到哪些表需要拆分,哪些库需要拆分,这是第一个在设计阶段就考虑垂直分不分表,然后第二个。各位注意,就是随着我们这个数据库里边的数据量的这么一个增加,咱们不要马上就去考虑做这个水平的这么一个切分,就是比如说你数据量之前比较小,我们做垂直分布,垂直分表,但是随着数量增加,我们马上就做水平切分,咱不要这么做,当你增加之后,我们怎么做,首先要考虑做什么,比如你做一些比如这个缓存的处理,或者说读写分离,或者说使用这个索引。
03:29
等等方式啊,先考虑这些做处理,如果说这些方式不能根本解决这些问题了,那我们再去考虑做这个水平的这个分库。包括水平的这个。分表,所以这是在实计中用的场景,我再重复一遍,要各位记住啊,我们在数据库设计的时候,一般就要考虑到垂直分库,垂直分表就你表该拆的拆库,该拆分的拆分,但是我这个水平不是说马上要考虑,假如数据量增加,咱首先考虑的是做缓存,做读写分离,是用索引等方式,如果这些方式不能解决,咱们再去考虑做水平分库,随用分表,比如你创建多个结构的数据库,创建多个相结构的表,然后做这个拆分,这是在实际中的应用的场景,各位把这记住。
04:26
所以这个啊,咱们做了一个介绍。然后这个介绍之后呢,最后给大家介绍一下咱们做这个分库分表所带来的一些问题。这各位要明确啊,咱们任何事情嘛,都要一分为二来看,任何事情有它的优点,有它的缺点,咱做分不分表,它的优势是什么?能够很好解决单库单表数据量大的问题,造成这些读写效率低的问题,但是它也会带来一些就是不好的问题,所以下面给大家介绍他会带来哪些问题,希望各位对这些问题有个认识。
05:05
那我在下面写一下啊,首先我们做分库分表会带来第一个问题,什么问题,它就是存在这个叫跨节点连接查询的问题。我写一下跨节点。这个连接查询问题,或者说跨节点这个RA的这个问题。那这问题是什么?给各位我来举一个具体例子啊,给大家画一下。比如说我现在这里边呢,咱们做了一个垂直分布操作,我有两个数据库,垂直分库,第一个数据库是在那个课程。他这个数据库,第二个数据库,比如说我们的订单的数据库,那在课程数据库中肯定有我们的课程基本信息表,包括描述表,在订单里边有咱的订单表,比如现在我这个是一个。
06:00
课程的信息表,然后这个表,比如是我们一个叫描述的啊,就描述表,然后这是一个订单表,比如现在我想查询这个订单和课程表中有关联数据,比如现在数据中既包含订单信息,也包含课程信息,假如说是这么一个信息,给大家画一下啊,比如在我这个想查的信息中包含。这么几个部分,我在里边画一下人现在想包含什么,第一个就是我这个订单号,第二个包含我这个,就是订单的这个。金额就是订单,它一共花多少钱,第三个比如想包含我这个课程的名称,包括我想包含这个课程里边,比如有一个叫课时数,包括想包含课程中的加信息,然后大家看啊,我这些信息如果想查的话,咱只查个课程表。查不出来吧,只查订单表是不是也查不出来,是不是两张表有关联才能查出来,但是这么查的话会有问题,什么问题呢?大家注意啊,因为第一个我是不同的数据库,而数据库我又放到了不同的服务器中,就是你要查的话,如果说我直接关联是没法关联,因为他们是不同的服务器,又是不同数据库,那咱需要怎么做,这过程就稍微麻烦点了,那咱要怎么查?第一个比如说现在我根据这个课程ID先查出课程的基本信息,或者说我根据这个订单号先查出订单信息,然后在订单表里边肯定存我们的课程信息,帮我拿着课程ID再去查这个数据库中这个课程表,然后把数据查出来。比如说咱们现在要分成多次查询,并且你多次查询过程中还要去查询多个服务器中的多个数据库表中数据。这过程虽然能实现。
07:58
但是它是分库分秒钟带来的问题啊,我再重复一遍,要各位理解这个问题啊,问题是什么?比如现在我想查这些数据,这些数据中呢,肯定是两表中才能包含,你查一个表查不出来,所以咱要查的话怎么做?第一个肯定需要查多次,比如第一次我根据订单号先查出订单信息,在订单信息中有课程ID,然后第二次我拿着课程ID再查这里边的课程表,把数据才能查出来。这过程中你需要查多次数据库,然后把多次出据库查数据,最终进行汇总,然后最终才能得到你的数据,所以这个过程是比较麻烦的,它就是分库分表带来问题。
08:40
或者说我们在过程中呢,比如说我这个操作过程中,我要进行分页或者进行排序,那这个过程肯定也是很不方便啊,要做分页或者说你的排序。那咱的方案都是这样,我把这些数据库中两个数据都查出来,最终进行汇总,汇总之后再做分页,再做你这个相关的排序,所以咱肯定需要这么来做,所以这个问题就是分库分表所带来的一个问题,就是跨节点连接产生问题,里边包含我们的分页排序。
09:15
这个啊,第一个问题,然后除了这个之外呢,分库分表还有一个问题。什么问题呢?它就叫做多数据源管理的问题。那这个问题是什么呢?大家注意啊,因为我现在是不是多个数据库,而多个数据库是不是要在不同服务器中,所以咱在操作中我是不是要管理多个数据源,比如我课程数据库,假如说它的数据库是在那个192.168.1.1的服务器中,它叫这个数据库,然后这个比如在192.168.1.2的服务器中,它是这个数据库,咱是不是要对多个数据库中的数据源进行管理,当然有更多肯定我们还需要进行管理,所以这个过程肯定是不是很方便。所以这个就是我们用这个分布分表,它既有它的优势,能够让你单库单表中数据降低,包括提高我们的这种访问效率,另外也带来问题,第一个问题就是跨节点连接查询问题,包含分页查询,包含排序,第二个就是多数据源管理问题,所这个啊是咱们都说的分分表,然后咱们一会儿要讲到这个叫sheding SP里边就能按照它里边这些产品解决问题,就是咱一会儿马上说这个叫she定JDBC就能很好解决问题,怎么解决一会儿咱会马上说明。
10:36
所以咱们到这里咱就完成了我们课程中的第一分内容,关于筛Ding中的基本概念啊括什么是C词,二包括分库分表,它里边分别都是什么意思,以及咱最终说到的它主要的应用场景,以及分库分表带来问题。所以咱们现在完成了里边的基本概念。
我来说两句