00:00
好,那么第四章呢,逻辑架构呢,咱们就告一段落,接着呢,我们来看这个第五章叫做存储引擎,它呢可以说跟我们第四章呢,是融合在一起的啊,只是呢单独的拿出来讲一下。那我们在讲这个逻辑架构的时候呢,提到了这个最上层我们说叫连接层,中间呢叫服务层,最下一层呢,叫做这个引擎层,对吧?那这里呢,我们就专门来谈一谈这个存储引擎,呃,跟前一章呢,我们做一个这个相当于是承上启下啊说前面呢,我们提到了,说这个要想客户端跟服务器端做这个交互,这是客户端这整我们这个服务器端对吧?然后这里边儿呢,呃,需要涉及到呢,就是我们这个连接的管理,呃,然后呢,涉及到这个查询缓存,当然这是我们5.7的这个之前的这个版本对吧,这个8.0就没有了,然后这个有查询缓存呢,直接还直接返回,没有的话呢,我们会涉及到这个解析是吧,语法解析啊,语义解析,然后呢,还会涉及到我们这个,呃,查询优化叫优化器了,然后再往下走的话呢,是不是生成这个执行计划呢,我们就需要呢,跟这个存储引擎这个引擎层啊去打交道了,对吧。
01:00
那么前面这些呢,属于我们MYSQL的一个核心功能,然后这个引擎层呢,那这里边儿我们说是插件式的,那可以选择不同的这个存储引擎,而这个不同的存储引擎呢,也就决定了我们底层存储的这个文件系统中文件的相关的物理结构啊,有这样的一层关系,所以我们这一章呢,主要呢,就是来讲一讲这个存储引擎的一个介绍啊,有不同的这个存储引擎,对吧?好,那么这个提到这个存储引擎的话呢,它首先是一个概念啊,简而言之的话呢,它就是表示这个表的类型。存储引擎就是表的类型啊,大家呢,应该还记得我们在讲这个第二章的时候呢,提到了这个,比如in DB和MY是不是在底层这个对应的这个表的这个格式啊,都不太一样啊,还记得吧,来我们打开再相当于复习一下,你看我们在这个小节当中写的,如果呢,咱们使用的是这个叫in DB的这个存储引擎,咱们这有个表呢,叫表B,对吧?那么这个表B的话呢,首先我们说呢,诶,这个表结构呢,是用的FM这个,呃,这个文件来表示的。
02:00
具体的数据的话呢,我们可以存储在叫IB data1里边,这叫系统表空间了,也可以呢,存储在我们叫b.ibd啊,跟这个呢是在同一个文件目录下的,这叫独立表空间啊,现在呢,我们默认的情况下呢,是都是用的这种独立表空间的方式了,这呢是不是有两个这个文件对吧?那8.0的时候呢,说把它干掉了,又留了个它,然后呢,相对应来讲呢,如果你要是用的叫MY这样的一个存储引擎,我们会发现呢,它底层的一个文件结构是不是就变了,这个FM还有啊,但是呢,对应的另外一个ibd呢,它就变成了叫mdd和mi,这个呢,就是由于底层呢,MY里边呢,这个索引和这个数据啊,它是分开存储的啊,到时候我们讲到这个索引的底层结构呢,大家就知道怎么回事了。然后在这个8.0当中呢,还提到了FM呢,是不是被这个s Di这种格式给替换了,对吧,那也就是说呢,我们这样横向上下呢,去做对比,你会发现呢,不同的存储引擎呢,底层决定我们表这个结构啊,你看是不是就不一样啊。这呢就是它的一个主要功能,所以呢,我们这个存储引擎啊,就是主要指的就是表的类型啊,但是你要说叫表达类擎吧,感觉有点土对吧,那就起个高大上的名字,那我们叫做引擎啊,一说到这个engine引擎的话呢,呃,大家就会想象到说汽车也好,飞机也好,引擎呢,是不是最核心的这个这个结构了,对吧,那一说叫存储引擎,总感觉呢,就非常的高大上了啊,这个以前的时候呢,有个比较土的名呢,就叫做表处理器。
03:26
叭较土,现在改成存储引擎呢,就感觉不一样了,对吧?它的主要功能呢,就是来接收上层传下来的指令,比如说呢,你呃,在经过这个优化器以后呢,咱们是不是生成一个叫执行计划呀,然后具体呢,我们通过这个执行器在执行的时候呢,你到底是想进行这个数据的一个查询呢,还是想进行一个数据的写入呢,就是增删改对吧,那这个呢,都需要我们做一个指明。OK行,那么针对于咱们MYSQL数据库服务器来讲,这个默认的话呢,它有哪些存储引擎呢,我们可以做个查看啊,这里边呢,我先把这个诶插帽呢,把它打开远程的连接一下我们的这个8.0和5.7啊,这个咱们是这个呃150的,这个是8.0的。
04:10
啊,然后再连一个。呃,这个100呢,是5.7的对吧?好,那我们就以这个8.0为例呢去演示,呃,首先的话呢,我们先去做一个登录啊MYSQL-U啊,我是入的,哎呦入的用户啊,重来一下,然后杠P啊回车啊C123进来,然后接着的话呢,我们通过这个指令叫受啊engines。哎,这个单词呢,你得会写,这样呢,我们就能够查看咱们当前支持的这个存储引擎啊,第一列的话呢,就是我们这个引擎的这个名字啊,一共呢是有几个啊。是不是九个呀,OK行,然后下边的话呢,这叫support是否是支持的,就相当于我们当前的MYDBMS呢,它是否是支持的这样一个情况。啊,这个呢,你看它是个no是吧?呃,然后呢,在这个支持的绝大部分都支持的情况下呢,有一个叫做default,那就相当于咱们在这个8.0当中,它默认使用的这个存储引擎呢,就是叫inno DB,哎,你看默认的是不是叫inno DB啊啊没问题,然后下边这个叫comment,你可以看成叫评论也好,叫备注也好,叫说明也好,都行,关于呢,每一个群众引擎的一个简单的一个介绍。
05:16
啊,你看基于这个哈希算法的是吧,哈希这个结构存储的OK,嗯,然后下边呢,叫transactions,这个翻译过来呢,叫做事物,相当于呢,就是我们这些存储引擎呢,它是否是支持事物的,那我们看到有个亮眼的是不是就是这个印度DB啊,诶,它是支持事物的,OK,然后这个xa呢,它指的就是是否是支持分布式事物的。那你其他的都不支持事物了,那分布式事物呢,也就无从谈起了,诶所以这个呢,只有我们的印度DB是yes,然后下边呢叫point,这个呢,呃,在我们circle里边其实也有一个关键字,就叫做point。那这个呢,就叫保存点的意思,支持事物的话呢,我们其中再提到一个保存点,相当于支持这个部分事物的一个,呃,回滚啊这样的一个场景,我们要用到的这个叫simple point,其他的话呢,都不支持事物了,所以这个s point呢也就没有意义了,所以都是个no。
06:07
好,这样的话呢,我们简单的对于这个存储引擎呢,先做一个泛泛的一个概述啊,先做一个泛泛的概述行,这儿呢,我们能够查看支持这个存储引擎了,然后的话呢,咱们可以再去查看一下啊,这个指令我就这个不不写了啊,就是相当你这个用杠G的话呢,就换一种那横横的变竖的,竖的变横的一种展示方式是吧,那这个我就不说了,好,然后再往下的话呢,我们能够查看一下系统默认的这个存储引擎。对,默认的一个存储引擎,我们可以通过这样的一个方式啊,CTRL一下,这就是一个变量的一个查看啊走起,那我们查看一下呢,跟storage相关的这样的一个变量,那其中第一个呢,就提到了叫default storage engine,那这呢是印DB。啊,跟我们这儿呢,是不是就哎相匹配的是吧,然后呢,也提到了,你看这个临时表的这种这个默认的存储引擎呢,也是运动DB。啊,OK,是没问题的啊,或者呢,大然你通过我们这个参数呢,去查看也行啊,CTRLC一下这个呢,专门查看的就是我们这个default这个story engine了啊明确的说就是in DB,那这个呢,是在我们5.5之后啊,改成了这个in DB,在5.5之前呢,咱们用的其实都是这个,哎,My is am啊这个存储引擎。
07:17
好,这个我们就接着往下说,嗯,下边呢,就提到我们可以去修改所谓的默认的存储引擎,来修改默认存储引擎,这里边呢,提到一个点,就是我们在创建表的时候呢,如果没有显示的指明存储引擎的话呢,那它就是使用这个默认的存储引擎,那举个例子,比如说咱们这里边啊,先去受一下叫data basis是吧?哎,我们当前呢,有这样的一些数据库,咱们就用这个吧,DB test1那首先use一下。DB1,然后呢,我们先去收一下tables是吧,这里边有这样几个表,那此时呢,我们去create。那这个叫table,我叫EP2吧,然后这里边我就简单写一个这样的参数,好我们的回车。啊,这就成功了,对吧,那我创建这个表,注意呢,我们所说的这个存储引擎啊,哎,这个咱们说以前的名字是不是叫表处理器,相当于呢,它是不是跟这个表呢,是相关的呀。
08:10
对吧,跟表呢是这个相关的,就是它主要处理的就是一个表,所以说呢,我们在创建一个表的时候,没有指明这个存储引擎呢,诶它这时候呢,会有一个默认的存储引擎,那比如我们去show一下。哎,Create这个table啊,E2啊回车,当然你会发现呢,我们此时显示的这个表对应的引擎呢,就是印度DB,主要原因呢,就是咱们默认的存储引擎呢,就是印度DB啊导致的。好,那现在的话呢,我们说还可以这样去修改这个存储引擎。嗯,设置,嗯在这儿。嗯,在这是吧,去修改,那修改的话呢,我们可以呢,是通过这种临时的方式啊set default storage engine呢,改成my Sam。啊,也可以呢,去改这个配置文件,改配置文件呢,相当于它就是个持久的一种方式了,那改完以后呢,接着重启服务,它才能够生效,那我们这呢,就临时做个修改啊,CTRLC一下好回过来啊,比如这块我们粘过来一执行这就成功了,对吧?那此时的话呢,如果我们再去叫嗯。
09:09
上面这个。啊,这个是吧,Select default engine,这时候你会发现呢,咱们启用的就是MYM了,那这时候默认的存储引擎呢,我们就做了一个修改。做了个修改啊,你看我们这样写呢,叫show engines呢。啊,这时候呢,你看发现我们这个default是不是也改成MY了。OK,没问题,行,那在这种场景下呢,我们还是use一下DB1,然后呢,咱们去create table。Create table,我叫EP3吧,哎,这个呢是ID音的啊,用非常简单的这样的方式去造一个表,这个时候呢,我们再去一下。Decorate。哎,这个table,那E3那你会发现呢,呃,由于我们默认的存储引擎做了修改,所以呢,我们在创建表的时候,如果没有显示的指存储引擎,那就是你默认的这个my is am。
10:05
啊,My is am对吧,哎,这就没问题了,然后呢,你可以往这表里边是不是接着存储数据啊,哎,OK啊行,那这块呢,你看我们再回过来啊,我这块呢,双击一下。嗯,双击过来,嗯,咱们呢,进入一下咱们这个数据,它本身的这个存储的这个路径啊,还记得吧,啊咱们这个之前呢,也演示过啊show variables,然后like这个呢,我们叫data DR是吧。啊,这个呢,咱们得先进入这个指令啊,Root。呃,杠U啊入的用户杠P啊ABC123进来,然后呢,我们再执行刚才说的这样的一个指令啊。那这样是吧,好,那这个路径呢,下边呢,放的是不是就我们这个数据文件啊啊,那我们这呢,做一个退出来CD一下啊ver啊lib,然后这个MY,然后进来,进来以后的话呢,首先这个LL查看,诶我们呢,操作的是不是这要DB test1这个数据库啊,那所以我们再去进入一下啊,这个DB test1啊这样的一个数据库,然后再L一下,好大家看在这里边的话呢。
11:10
咱们刚才这个EP2呢,咱们用的是叫in no DB吧,啊DB在8.0当中呢,咱们就只有这一个文件了啊5.7里边呢,你会发现还有那个叫呃叫这个FM这个结构是吧?好,这个呢是我们说的这个度DB的这个格式,然后呢,我们改成这个呃,MYS的时候呢,是针对于这个MP3呃EMP3的,呃,你会发现MYS里边呢,你看是不是就有这三个呀。诶跟咱们前面讲过的是不是叫一脉相承的对吧?诶所以这里边儿我们想说的问题是什么呢?就是我们这个创建的这个表哈,每个表它会对应着它的一个叫表处理器啊,也就我们现在所谓的叫存储引擎。啊,每个存储引擎来负责你对应的这个表,这个结构,它在底层存储数据的时候呢,哎,到底是什么样子的一种格式啊,直接做了一个决定。
12:01
是吧,哎,大家呢,看的是比较清楚的。好,那这样呢,我们就说清楚了,这个表和这个存储引擎它俩这样的一种耦合关系了啊,然后呢,我们在创建表的时候啊,实际上呢,是可以显示的指明我们这表使用的存储引擎的,你像我们刚才默认的是用这个MY,咱造表的时候呢,这不也没有去指明用谁,然后呢,默认的就是MYS,那我们再来一个,那我呢去create一个table,那我叫E4吧,那也是ID in的类型,然后在这个位置呢,我们写上叫engine。嗯,这个是吧,然后呢,我写成叫。No DB,嗯,这块呢,注意这个大小写呢,都还好啊,就是不用注意了,但是你这样写呢,多少看着有点业余是吧,那我就就这样写一下,看看啊走起是不是成功了,然后呢,我们再去受一下叫create。啊table啊EM4,那大家会发现呢,我显示的指明了这个存储引擎了啊,那这时候呢,你看它底层呢,就是用的我们显示指的这个啊印度DB。
13:00
啊,这就这样一个场景啊呃,那么实际开发当中啊,一般啊,咱没有特殊情况的话呢,都是用的这个印度DB啊,所以咱们默认的话呢,就用印度DB了,这个位置上可写也可不写这样啊。啊,这是说的一个我们可以造表的时候呢,显示指明,那我们这个表呢,创建完以后呢,我们能不能去修改这个表对应的存储引擎啊,那其实也可以啊,其实也可以,当然了,这个咱们这样的操作的其实并不多是吧,那这个方式呢,我们叫做al table啊,比如说EP4。我把这个EP4呢,它的存储引擎呢,做一个修改,那你这块呢,直接呢就engine啊,等于比如说叫MY这个这个,但以后呢,可以不写了啊my I sum,哎,你看我这就全部写成小写了啊,也是OK的,那写完以后的话呢,我们再去收一下create e mp4,你会发现呢,它就做了一个调整,MYS是吧。好,这样呢,就相当于我们针对这个表啊,如何呢去修改,嗯嗯,咱们再接着把咱们默认的这个给改回去吧。嗯,咱默认的给改成这个MY了哈,这个咱们还改成这个度DB。
14:03
那回来啊,这个大家写呢,其实是都OK的啊,没问题,行,那我们再去查看一下这个受是吧,哎,我们就简单一下,就这样写吧。难受。ANS,那这时候呢,是不是又改成了度DB了,没问题是吧?行,那这呢,我们就做了一个整体的一个演示,那大家应该知道这里边说的是什么啊,如何呢?设置默认的存储引擎如何呢?针对于表我们去设置它的这个存储引擎啊。行,那我们呢,就说到这儿,然后下面的话呢,咱们就具体来介绍一下这个存储引擎之间它有什么区别。好,那接下来的话呢,咱们就来介绍一下MY啊DBMS呢,它支持的这样的一些的存储引擎,那么在这些存储引擎当中啊,我们说最重要的两个呢,毫无疑问,那一个呢叫inno DB,一个呢叫MY,那在5.5之前的版本呢,我们默认呢是MY,然后在5.5级之后的版本中,咱们默认的呢是in DB,那这两个呢,是咱们用的最多的场景,那下边这些呢,大家整体上来讲做一个了解,知道呢他们各自的这个特征使用场景就可以了。那么前面这两个呢,在面试的角度上来讲,也是最爱被问到的,就是他们二者的这个区别是什么?
15:18
啊,当然了,这我们只是说从面试的角度来讲,那么在实际咱们开发的角度来看的话呢,这两个呢,确实也有必要啊,大家呢,能够做一个很好的区分。首先呢,明确一点啊,就是这哥俩呢,它不是一个替代关系,什么意思啊,就是说我们以前呢啊用这个麦,说现在啊,咱们都用这个印度DB了,不是这样子的啊,就像我们说以前呢,用这个诺基亚手机,说现在呢,我们都用这个智能机了,那这儿呢,是一个完全你可以理解成是一个替代的关系,对吧?而我们这里呢,不是替代,也就是说呢,他们各自呢,具备这个优劣势,在某些场景下呢,我们推荐呢使用MYS,在某些场景下呢,我们推荐大家使用inno DB。
16:00
啊,这呢其实也导致的,就是我们面试的时候才会问你他们二者的区别是什么,对吧?你想想咱们面试的主要目的呢,还是希望呢,能够通过这个问题呢,能够问出来你在开发当中呢,呃,具体的实操,所以呢,如果只是泛泛的说去问一下他们二者的区别,那就意义不大了啊咱们在开发中呢,大家需要呢,去在创建表的时候呢,能够知道进行如何的选择,好那这呢,我们首先来介绍一下,这个叫in DB,它呢是具备外键支持功能的事物存储引擎,这里边呢提到了它的一个特征就是支持外界啊,那相对来讲呢,我们的MYS呢,它就不支持外界。啊,当然了,这个知识外界与否,这是二的一个区别,但是不算是特别重要的,为什么呀?因为咱们在前边呢,讲上篇外界的时候,是不是提到过说这个外径因束呢,咱们在很多场景下呢,是不是不建议大家去使用,因为呢,有了外界呢,是不是会影响我们数据的一个,诶这个添加呀,删除啊等等这样的一个这个一个效率问题,对吧?所以我们是可以考虑在这个应用层呢,先做了一些判断之后呢,直接呢把这个数据呢,我们再在这个表级别呢,进行这个处理,所以外界这个呢,支持不支持呢,实际上呢,不是说最为关键的是吧,在这个点我们说清楚了啊,它支持的话,反而还影响我们的性能,OK,嗯,这是一个点,然后另外的话呢,呃,这里边提到这一个基本点就是它的,呃这个使用是5.5之后才开始用,默认使用,但是你注意呢,我们这个,呃,Indo TB呢,它在3.23这个版本当中啊,实际上就出现了啊,只不过呢,默认的当初还是MYI而已,OK,然后呢,他们二者的区别呢,呃,这个除了说外界之外呢,另外一个非常重要的区别就在于in DB呢,它是支持事物的啊,这个呢是非常重要的。
17:42
那所谓的事物的话呢,咱们放到这一章的时候呢,咱重点给大家去讲这个第13章,包括呢,13,十四十五十六这四个章节呢,都是重点呢,来讲这个数据库事务问题的。啊,数据事问题,咱们在讲到上篇提到tnket table和delete from的时候呢,其实也给大家呢,提到过一下这个事物的概念啊,我们再稍微的这个回顾一下,呃,这个事物的话呢,其实它就是一个名词,它描述的呢,是这样的一个场景,我们这儿呢,比如说呃,是一个事物啊,或者先不说事物,就这里边呢,包含了两条这个呃,DMR操作,那比如说我们这个AA的用户呢。
18:19
他呢减100块钱,他给这个BB这个用户呢,呃去转账100块钱,相当于A呢使用update减100是吧,BB呢使update呢加100,然后这两个操作呢,我们说它就整体上构成一个失误,为什么呢?因为我们要求这两条操作呢,是不是要么呢,是不是都执行成功,那就相当于呢,咱们转账成功了么呢,是不是就是转账失败,那就是没有做成。不能够出现什么样的场景呢,就是说AA呢减了100 BB呢没加。相当于俩合一起呢,少了100块钱,这个呢是不能接受的。啊,再说一遍,就是你要么呢这两条语句同时都执行完了,要么呢,就是你即使出现执行了一半啊,接下来呢,你可能BB的账户写错了,或者说网络出现拥堵了,呃,MYSQ宕机了呀,等等这样的问题,必须呢,是不是要求我们已经执行的这一条语句呢,也得回滚回去啊,相当于回出回到这个最初的这个状态,哎,这个呢,就是我们说事物的这样的一个要求。
19:14
啊,保证数据的一个完整性,一致性啊,准确性啊等等这样一些词,后续呢,咱们会讲叫a cid的这样几个属性,OK,那这呢,大家就先整体上呢,有一个大体的概念就行,OK,那么印度DB呢,因为它支持事物,所以呢它就支持数据的一个提交和回滚。呃,数据的提交和回滚,那么对应的我们这个MY的话呢,它不只是失误了,那相应的这个提交啊回滚啊,这个行为呢,相应的就不具备了,尤其是这个回滚行为对吧。那其实我们很多的这个呃,特征就是印度DB的,呃,都是基于这个事物呢出发的啊,比如说啊,比如说你看我这个课件,最后呢,这个课外的一个补充哈,提到了这个印度DB的一个优势啊,这段话呢,咱们一起来看一下,这个呢,其实就是基于这个事物啊造成的,来我们看一看啊说印度DB呢,它在实际当中运用很多优势,比如说操作便利,提高了数据库的性能啊这个一会儿我们再说这个性能的事。
20:12
啊,通过这个行机锁来体现的,比如说是吧,并发能力啊,这个维护成本低等,说下边由于硬件或软件的原因导致的服务器的崩溃,那么在重启服务器之后呢,是不需要进行额外的操作的啊in DB呢崩溃恢复的功能啊,它的自动它就会呢自动的将之前提交的内容呢定型,然后撤销呢没有提交的进程。哎,重启之后呢,继续从崩溃点呢开始执行,那么说到的这个特征啊,我现在圈出的这个特征,都是基于我们这个事物啊,它具备这样的特征啊导致的啊,包括呢,我们后边还会提到这个事物相关的这个日志啊,有这个呃,安度日志,锐度日志啊,都是为了支撑我们刚才说到的这样的这个知识点。啊,后续我们再讲解,行,那咱们再拉回来,相当于这里呢,我们提到了这个优点啊,如果说呢,外界呢,算是一个的话呢,第二个呢,是不是就提到了这个事物的支持啊,啊,这是印度D比的第二个优点好,那么第三个优点的话呢,或者叫一个特征就是呃,如果大家在表当中啊,频繁的进行增加或删除的话,那就insert和s select的话呢,这个时候呢,实际上是推荐我们用这个MY的啊,因为呢,它的效率会高一些。
21:25
那如果说呢,我们在更新表的时候啊,在操作表的时候呢,还有大量的这个更新和删除的操作,那么咱们就推荐呢,大家使用这个in DB。啊,使用它呢,诶我们说呢,效率会更高一些。啊,很多时候呢,我们也在这个更新和删除当中呢,去体现这个事物的特征啊,OK啊,下边呢,就是总体上泛泛的说了一句,就是如果大家呢,没有特别的原因,这个选择的话呢,建议呢,你使用印度DB啊,当然这就是一个总结性的话了啊呃,这呢算是咱们村第三个优点啊,第三个优点或者叫特点,然后呃,下边这个呢,也算是一个总结性的,就是DB呢,是为处理巨大数据量的最大性能来进行设计的。
22:05
啊来进行设计的,就是我们这个my I sum的话呢,诶大家呢,形成一个直观上的一个认识啊,就是它呢,主要来处理这些数据量比较小的这个表啊,性能呢,实际上是比较高的啊,尤其呢,是针对这种insert和update和这个select这个操作呢,哎,它的性能是比较高的效率比啊印度D比较高,哎但是呢,诶我们说这种并发量,这个数据量比较大了,以及呢,我们访问数据库的时候,这个并发量比较大的时候呢,我们建议呢,大家使用这个印度DB。啊,这里边儿呢,其实还涉及到度DB的一个优点啊,我呢是在这个里边的表中呢,呈现出来的就是关于这个是表锁还是行锁的问题。那MYS呢,它只支持表锁,而我们in度TB呢,是支持行锁,行锁的行锁什么意思呢?就比如我们这个呢,是一张表,然后这个表中呢,我们一个事物啊,或者大家这时候呢,先理解成是一个啊,一个一个线程是吧,或者一个人是吧?哎,现在要泛泛理解一下,我们呢,要使用这张表呢,然后呢,我们要用这个表中的这一条记录啊,比如做一个update布的更新是吧,那此时呢,我们就针对这一行数据呢,咱们进行一个锁定。
23:13
然后呢,如果现在在另外一个事物过来之后呢,我们访问的数据或者操作数据不是你这一条,那此时呢,是不影响我们这个另外的一个事物来访问这条数据的,因为它只是锁定这个具体的行,对吧?而我们这个MYSM的话呢,它需要把整个这个表呢来锁定,即使呢,你只更新其中的一条记录。啊,那这时候呢,对于这个并发性,哎,是不是就非常不友好啊,啊那这呢就是也导致呢,我们在并发高的这种场景下呢,诶印度DB的性能是不是就更好的发挥啊,因为它这个行锁的力度呢,哎是不是更低一些是吧,更细一些啊。好,那这呢,我们提到了是不是好几个关于印度币的优点,总结一下,第一个外界,第二个啊,这个提到了事物是吧?呃,第三个就是提到了,如果我们除了增加和查询之外呢,还有比较多的这样的一些行为啊,我们推荐的使用in DB,这第三个啊,第四个啊,大家可以看到刚才我说的那个行级锁的问题。
24:07
啊行机锁的问题,OK,四个优点。好,说到这儿,呃,另外的话呢,属于它的一个特点就是提到了度DB呢,咱们刚才呢,是不是也看到了,就是在底层存储呃,这个表的时候呢,呃,这个表的结构呢,用的是点FRM,然后这个表中这个数据的话呢,用的是ibd,对吧?呃,跟这个MYSM呢是不一样的,这算是个特点,谈不上说是优点,OK。行,那说了这么多呢,我们看看这个印度DB呢,它有什么缺点呢?这个缺点的话呢,这里边我写了两个,第一个啊,就是它说印度DB呢,它的处理效率呢要差一些,第二块呢,它对内存的要求呢就要高啊这个是我们的第二个点,嗯,啊这呢主要是说到它这个缺点,那么在有一些场景下呢,我们就要避开它这个缺点啊,咱们可能要选择这个买SM是吧,那首先呢提到说这个效率会差一些,那这个怎么去理解呢?
25:01
啊,这个怎么去理解呢?就是他更擅长的是处理我们这个数据量比较大的这种场景啊,尤其呢,还跟事物相关的,如果呢,这个表中的数据量呢,相对来说比较小一些,然后以这个增加和查询为主,那这时候呢,我们确实这个性能呢,是比不上这个MYS高的。啊,这个呢,是我们说的它的一个主要的点啊,这是卖SM的要好一些啊,OK,这是一个点,然后另外一个呢,提到说内存要求比较高啊,大家可能会有一个疑惑,因为一般的咱们通常说到说对内存要求高的呢,通常一般的说这个性能都会呃好一些是吧,但是这块你看那个内存占用高,然后处理性能还要偏差一点啊,这怎么回事呢?啊,这个内存要求比较高的原因呢,是在于它底层存储这个表数据的啊原因造成的,什么意思啊,就是在这个DB当中。啊,这又是涉及到咱们后边讲索引的一个内容,这个所以呢,诶跟数据呢,在咱们DB里边呢,你看它是合在一起存在这个叫ibd这个文件当中的啊,在咱们这个呃一动DB中啊,我们会说一个说一句话啊叫索引集数据,你看这个集是这个。
26:09
啊,数据。诶什么意思啊,就是我们底层啊,到时候我们会讲一种索引呢,叫做聚促索引,这个聚促索引呢,其实就是我们底层呢,存储的这个表中一行一行的数据,它俩是二合合二为一的啊,所以呢,我们底层你看到这个表明点ID呢,它俩呢其实是一个东西。啊,到时候我们说下一章的时候,大家就明白了,好,那么这个MYS呢,诶我们知道呢,它是不一样的,它呢这个诶对应的比如说FM,这是存储表结构的,它存储这个表数据的话呢,咱们叫MYD是吧,存储这个所以的话呢,是不是叫myi呀。也就是呢,底层呢,它是数据和索引呢,分开存储的,跟这个区别就来了,那么我们在加载的时候呢,其实是只需要加载索引呢,所以MMY的话呢,它只加载这个,而我们这个度DB呢,因为索引数据呢,所以把整个这个呢就都加载了,那你这边是不是多了一部分数据啊,那相当于呢,就是度DB呢,对内存的要求呢,就会更高一些啊,你这是索引加数据,我们这个呢只有索引,所以很显然你这个印度DB占用内存要更高,对吧?OK。
27:16
嗯,而且呢,这个内存大小对性能啊,还是起到决定性的一个影响作用啊,OK,行,那么关于这个动DB的优点缺点,我们就说到这儿,然后下面呢,看这个MY啊,这个它呢不支持事物,那上面对比说过了,然后不支持外界啊,也说了啊,不支持行际锁,只支持表级锁啊,这方面呢,确实都算是它的一个缺点,相较于印度D来讲,对吧?然后呢,这个呃,有一个毫无疑问的缺陷,就是崩溃后呢无法安全恢复,这个原因呢,就是由于它不支持事物造成的。啊,以及呢,你事物相关的认知文件啊,其实它都呃支持度就不高了啊好,然后的话呢,我们说的它是5.5之前诶默认的一个存储引擎啊,然后这呢,都算是这算一个特点了啊,然后它的这个优点是什么呢?刚才我们提到了诶这个访问速度快啊,主要呢,以这个iner和这个select为主的应用当中呢,我们这个访问速度呢,要高于啊移动DB。
28:13
好,这是这个,呃还有一个呢,呃,这算是一个优点,就是咱们后续讲这个测后优化的时候呢,也会提到啊,我们看的星呢,去查询呃表中一共有多少条,记录的时候呢,DB的话呢,是真实的是一个一个的去累加看有多少条,而我们这个MYS的话呢,它实际上呢,是有专门的一个变量啊,直接记录了一下这个表中的记录数,所以呢,我们这样呢,去查询的时候呢,它的这个查询呃效率呢是达到这个OE级别的。啊,就是常量级别啊,直接呢取这个数就OK了。行,然后这呢,我们刚才说的这个数据和我们这个索引呢,是分开存储的,对吧,那主要的应用场景呢,就是呃,数据量不大的时候呢,以读和读和insert为主,哎这样的场景中,建议大家呢,用MYS。啊,基本上就说清楚了,那最后这一块呢,我们有一个关于他二者的一个对比的一个表格啊,上边这块你看我也写了他们一些区别啊,咱们刚才呢,其实也都讲到了,那我就不在这儿去多啰嗦了,行,那么主要的区别的话呢,相当于是做一个小结,我一边说呢,大家一边去记啊,因为咱们说了面试当中,这还是一个非常高频的问题啊,外建刚才说了是吧,诶事务啊说到了,呃,行机所还是表机所,那我们刚才呢也讲到了,那行锁的话呢,因为力度比较小,所以呢,它在高并发的场景下呢,会更合适一些啊。
29:32
然后这个缓存只支持这个只缓存索引,不缓存真实数据,而我们这个呢是索引及数据,所以呢索引和数据呢都会缓存,所以呢对于内存的要求呢,就比较高一些啊。自带系统表使用啊,这个呢是自带的啊,这个没有自带啊,这个还好啊,影响度不高,呃关注点呢就是它呢是节省资源消耗少,业务简单啊,因为呢,我们说内存占有比较少嘛,然后业务比较简单,就数据量比较小的时候,对吧?啊也不用这种高并发的这种场景啊去去去操作的时候呢,建议呢用MYS,而我们这个印度DB呢,呃主要呢就是体验失误,而且支持行锁,我们的这个并发的时候呢,会更好一些,然后呢,我们这个内存占用呢会更高,需要更多的资源。
30:14
哎,然后呢,哎还牵扯到我们这个update呀和delete的操作呢,也相对频繁,对吧?哎用in DB啊要合适一些啊,是否默认安装是吧?哎这块都有啊行,嗯,这个呢是我们说的二者的一个区别,然后的话呢,下边列了个说阿里巴巴呢和淘宝,那这呢也算咱们国内的这个大厂了。哎,他们主要使用哪个呢。大家应该知道呢,像阿里巴巴体系呢,在国内算是这个Java支持的一个先驱了啊,像这个C和C加加呢,这个腾讯呢,算是支持的一个先驱,OK,那么这个阿里巴巴的话呢,它呃,当然呢,像这种大公司呢,它肯定不是说这个绝对的啊,说我们所有的产品呢,都是基于一个呃后台的数据库服务器了啊,或者一种类型的这个肯定不是的啊,只能说呢,我们在某些业务线上呢,使用的是这个啊,仅此而已。
31:01
呃,那么在这个呃,阿里巴巴这个提议当中呢,他这里边提到了一个引擎啊,叫extra DB啊,就是在这种大公司里边呢,很多我们看到的一些开源软件呢,他们可能都需要呢,诶都会出现做一些更新迭代,修改啊,变成他自己的啊,你包括我们讲到的像Java中的这个GVM,那么对于这个呃阿里巴巴来讲呢,它其实也不是用的像这个呃,GM里边默认我们官方供的拟啊,相当是自己来定,对吧,包括呢,我们说主流的一些框架啊,像SSM啊,啊包括呢,我们说微服务这些框架呢,其实有很多呢,也是阿里巴巴自己来主导啊推进的。啊,这就是大公司的一个特点啊,那这块呢也是一样啊,它相当于呢,这个使用的存储引擎,也是用我们这个SDB呢去换了DB,在性能和并发上呢,效果会更好,当然这个呢也是基于它自己的业务场景,OK,而我们这个开源的呢,像印度DB啊,它这个呢,其实就更符合一般的这种场景的一个需求。
32:02
所以呢,中小公司呢,一般都是用纯开源的,然后这种大公司呢,通常都会出现这种定制化的行为啊,大家知道这个特点呢就OK了,行,那这里呢,咱们把这两个引擎啊,就分别做了个介绍,也做了个对比,最后呢,课外补充这块呢,我还罗列一些,罗列了一下这个印度DB的一些优势啊,与acid的模型,这个ad呢,就是我们后续讲的事物相关的这个特征,这方面的啊,原子性啊,性啊,隔离性啊,持久性啊等等,这个呢我们就先不多去讲了啊,因为呢,事物我们还没有展开去说,下边呢,关于这个呃,架构方面呢,提到了一些,比如说表空间呀,呃,日志啊等等,这个我们后续呢还会展开给大家去讲啊,暂时呢我们就先放到这。OK。
我来说两句