00:00
好,那刚才啊,咱们就相当于把常见的几个数据库啊,就给大家做了一个介绍,大家呢,做到这个心里有数就可以了,那么回过来啊,咱们再看一看这个排名,大家呢,就会发现另外一个这个信息,就是我们排名前五的这个语言当中,这个这个数据库当中啊,大家你会发现呢,前四个都加了一个标识叫做relational。那就是我们所说的叫关系型对吧?那前四个呢,我们都可以统称为呢,叫RDBMS,那也就是关系型的数据库管理系统,那么什么是关系型数据库管理系统呢?啊以及呢,所谓的非关系型数据库管理系统都有哪些呢?那比如像我们这里看到的这个document,就是基于文档的啊,叫mango DB还呢,基于k value6的叫red,还有呢,像这种这个搜索引擎的,像这个electric search简称的ES对吧?像这些呢,都属于非关系数据库,那么它们之间有什么区别呢?对吧,这也是我们比较关心的一点。那通过咱们刚才那会儿的一个讲解啊,大家能知道的是这个事儿,比如说咱们要用关系型数据库了,或者说默认呢,就是关系型数据库,然后呢,我们接着去选择,哎,Oracle啊,My circlele啊,还是这个circleql server啊,还是这个PG circle啊,诶大家呢,可能会考虑说,呃,你是不是收费呀,这个是不是用的微软的这个全家桶的呀?呃,你是不是这个性能高啊,呃,支持这个circleq是不是更加的这个标准呢?呃,通过这样的一些点,我们去选择应该用哪一个关系型的数据库。
01:29
对吧?好,那么我们再跳到外边一层,就是你前提呢,是基于已经用关系型数据库了,那我们现在接着跳出来,那么关系型数据库我为什么要选择用它呢?那这个非关系型呢,又有什么特征呢?那这就是我们下边呢想给大家讲的一个问题啊,也就是这个事儿叫做RDBMS和非RDBMS。那我们能看到的就是这个RDMS呢,是现在这个主流对吧,我们排名前五的当中,前四个都是关系型的数据库,哎,那么关系型数据库的这个,哎,这个本质或者叫实质是什么呢?咱们首先呢,诶对针对这个关系型数据库啊,咱们做个介绍,然后呢,咱们再讲一讲这个非关系型的这个数据库啊好,那么关系型数据库啊,它是这个这种类型呢,属于最古老的这个呃,数据库的类型。
02:17
哎,这个关系型数据库的模型,把复杂的数据结构啊,就是咱们要存的数据嘛,那么数据跟数据之间的这种特征呢,我们就称为叫数据结构了,归结为简单的二元关系,也就是二维表格的形式。啊,大家想想咱们,呃,在上小学的时候,咱们最早接触的数据是不是也就一旦数据量比较多的时候,我们确实也考虑过把这个数据是不是放到这种表格当中啊。大家想想我们是不是接触过九九乘法表啊,接触过这个课程表对吧?哎,其实都是一种表格的形式,那么这种表格的形式啊,或者叫二维表格的形式,呃,为代表的就是我们这种关系型数据库的一个实质。
03:00
咱们呢,把这种数据呢,分成了行和列,对吧,行叫肉啊,列呢叫column行,那么这个呃,行和列呢,结合在一起,就构成了我们这样的一个table。啊,像这个描述的就是呃,各个系别的这个老师的一些信息啊,比如说这个T001T就是teacher的意思了,这个这个老师啊,女老师还是计算机系的老师啊,还有其他的一些字段信息啊,这呢就是一张table,那么如果我们有很多张table合在一起,那就构成了一个库。那就构成了一个库,或者我们就构成了一个数据库,注意这个数据库说的是啥呀,说的就是咱们最上边。来,我们往上搂一下。讲解的这个概念。就是咱们刚才呢,讲解的这个Oracle也好,MY也好,说的是这个DBMS对吧,那我们说的这个关影数据库呢,它底层存储的这个数据,就是我们说的这个这个数据库的概念了啊,就好比我们刚才在这说的那个点doc是吧,就word读的那个点doc格式文件一样,那么这个数据文件呢,这个叫数据库了,这个数据库里边呢,就存着一张一张的表。
04:07
那再举一个这个我们实际中的例子,就是那会儿呢,咱们,诶我带着大家看了一看,我这已经装好MYSQL8.0的版本了,那么我这个装好以后的这个软件在哪儿呢?软件在这儿。咱们先搂一眼。我这儿有一个。买蛇。这个MYSQL里边呢,大家就会看到是不是有MYSQL8.0上面你先不用管这个打开之后。大家你会发现呢,里边有很多的文件,这个相当于谁呢?就相当于咱们的DBMS,你可以这样来理解,就是这个DBMS,那么我们这个DB是啥呢?这个DB呢,没在这儿,哎,这个我我这么着一下,咱们截个图啊好,这是一个它了,然后呢,我再去找我的这个C盘。C盘呢,有一个program,有一个MY。再打开这有一个8.0对吧,然后这里边儿呢,尤其是咱们这个data,我再往里边走一层,这块大家看到的。
05:04
哎,这块我再把它也盯一下啊,好,那么对应回来大家就可以理解,咱们这个说的就是它,然后这个呢,你可以理解成说的就是它,哎,这样呢就比较清楚了,哎,先有这样一个概念,一会咱们再去装这个来S购这个数据库啊好,那么刚才说到了,你这个数据库里边是不是存的都是一些相关的文件呀,哎,不是相关的一些表啦,对吧?好,那么这是我们整体上的这个data里边的,其实这每一个文件夹都是一个具体的数据库。那这个爱特硅谷DB,这是咱们后边呢,讲课的时候呢,要用到的一个数据库,这个数据库里边大家看到的每一个这个文件实际上都是一个表啊,那这呢就叫员工表,这叫部门表,这个呢涉及到这个国家的一些表,这呢是这个员工都有这个具体的工作是吧,工种就是工种的一张表啊,这里边每一个点A。BD这个文件都是一个表。有同学说说老师你给打开咱们看看这里边都有什么数据啊,这个你注意这个数据不是让我们这个双击打开看的,咱们这是用的Windows啊,是这个可视化的,呃,其实呢,我们必须得通过这个是不是DBMS呢,去读这个数据库当中这个文件才能看,对吧?啊,你不能这样的去暴力的去双击打开去看啊,这是不对的。
06:17
好,这个呢,清楚这个概念咱们再拉回来,哎,我把这个呢再删掉,行先清楚这个表呢,就构成这个库的概念了,好那么我们解释了这个库了,是不是还涉及到叫关系型这样一个概念啊好,那这这就出现什么情况呢?就是表跟表之间我们说会存在着关系。啊,就好比是你,比如我们这张表,这一个表里边呢,是不是存的就是咱们说老师的一些这个信息了,每一条记录是不是就是一个具体的老师,对吧?那么这个具体的老师的话呢,呃,他会有具体的部门嘛,哎,那么这个部门的话呢,也会对应着一张表啊,比如说这个部门他是在哪个位置呀,呃,对吧?呃,然后呢,呃还有其他一些字段信息等等,那么员工的这张表和这个部门的这个表呢,它就会有一定的关系,我们把这种关系呢,就成为一种叫关系模型啊来表示的,那么哎,数据库呢,主要为代表的是表,那中间呢,他们是有这种哎关系模型来进行的连接。
07:14
啊,那么就构成了我们所谓的叫哎关系型数据库。啊,大家先这样来整体理解一下,诶,因为呃,咱们还有很多这个具体的操作方面的这个概念啊,大家还没有接触到,所以先有个整体的了解就可以了啊啊那么关于这个关系型数据库的优势是什么呢?我们说呢,便于复杂查询啊,可以用这个SQL语句方便的在一个表或多个表之间呢进行复杂的数据查询,咱们再给大家讲课的时候呢,咱们看一下这个。哎,课程诶这个是咱们高级的了啊,然后看一下我们这个基础的,像我们在诶这一章当中,专面专门的就来讲这个多表之间的一个查询操作。啊,就是表跟表之间这种这个有关联关系了啊好,那么再一个呢,就是关于这个事物的一个支持,使得呢,对于安全性很高的数据访问呢,得以实现啊,这个大家如果接触过,像Java语言的话呢,我们知道,呃,如果一块数据呢,多个线程来访问,那这时候我们就要考虑线程的安全问题了,那么我们同样的,如果是多个事物来访问的话呢,我们要保证这个数据的一个安全,这就涉及到一个事物的支持,OK,那这个暂时呢,大家如果不清楚了,我们就先忽略,咱们在下篇当中也会重点给大家去讲解这个事物啊。
08:22
好,这是我们说的这个问题,嗯,那么再回过来,咱们说了关系型数据库呢,之所以用的比较多,就是由于我们现实世界当中的各种数据都可以把它梳理成一种二元的这种关系,把这个数据呢都存放在这种表当中了,所以说呢,我们使用的比率是更最高的啊,那相比较而言,这个非关型数据库,我们看看它是具备什么样的特征呢?诶,首先一言以蔽之,这个非关系数据库啊,诶,它可以理解成是关型数据库的一个阉割版本。啊,或者叫一个轻量级的版本,这里边儿想给大家分享一个词呢,叫做舍得。啊,有舍才有得,那么关系型数据库呢,已经能够解决我们大部分场景问题了,在一些特殊场景下呢,我们要舍掉其中的一部分功能,是为了得到更高的一些,呃,就更特别的一些诉求,那这里边舍得呢,就是它一些,呃,存储数据的这种丰富的特性,对吧?呃,包括呢,进行这种关联查询的这种特性,那么在非惯性数据库当中就不具备了,那么能获得的是什么呀?就是既然舍掉了一些东西,轻装上阵,我们就可以获取更高的性能。
09:29
这是相较于关型数据库的特别之处。那市场上现在主流的非关系性数据库啊,都是免费的啊,那么非关系性数据库的话呢,呃,又具体分为哪些呢?大家就会发现咱们刚才讲了一个表格当中,只要写的不是relational这种场景,都是非惯性的啊,你会发现呢,其实挺丰富的,像这个document啊,Q value啊,还有这个search engine啊,是吧?哎,都属于非关性数据库。哎,那么非关型数据库,那我们看看它都有哪些类别呢?哎,这块呢,首先啊,像这种建值型的数据库啊,典型的这个兼值型数据库呢,就是我们内存级别的一个缓存数据用的数据库,叫做red。
10:12
啊,我们可以通过这种k value啊,简值的方式呢,去存储数据,通过K咱们去找对应的你这个value。啊,这个KY6,如果大家你接触过像Java这样的语言的话呢,哎,一说KY6像我们的map,哎是不是就存储在KY6特点的数据对吧?哎是不是他查找数据的速度是比较快的呀。啊,因为K呢是作为唯一的标识啊,甚至能够达到是不是就AO常量这样级别的这个时间复杂度对吧?诶最简性场景呢,就是内存的缓存,比如这块呢,我罗列出来一个这个K6这种场景啊,比如说这个K呢,就分成了叫分区的key和这个排序这个key啊,比如我们在实际应用当中呢,就可以这个K呢,就拿这个序号为这个键,而这个具体的这个Y6值呢,就可以使学生呢,比如说性名啊,性别啊,年龄啊,班级啊,哎这样的一些信息,哎查找的速度是比较快的啊,这叫键执行。
11:02
啊,那如果大家你做过像Java开发啊,包括你像学这个Python开发等等,只要是后台开发我们都会,呃接触到这个red这样的一个缓存级别的数据库。啊,像秒杀呀等等一些场景,我们数据呢,都需要做一些缓存处理,对吧,哎,Red呢首当其冲。OK,然后下边呢,叫文档型的啊这呢也是我们典型的看到的那会儿排名第五的叫mango DB对吧?诶属于文档型的数据库,呃这呢大家其实你也可以把文档型的数据库呢,看作是一个特别的呃建值型的数据库啊,因为这个键呢,呃,因为这里边这个值呢,诶不是一个具体的一个变量了,而是一个具体的文档啊,哎,可以来存储像这个叉猫啊,杰森啊,哎等等这种格式的数据。啊叉和杰森呢,作为我们传输数据的主流的格式啊出现的对吧?OK,好,下一个呢,就是这种存储引擎的,呃,搜索引擎的这个搜索引擎的话呢,像我们用的比较多的现在应该是这个electric search了啊,那么其次的话呢,像solar啊,这个现在呢,主要是ES用的多一些啊sor呢也算是一个,呃,主流的这个搜索引擎的这个数据库,那核心的这个原理呢,就是倒排索引。
12:08
哎,倒派索引这个搜索引擎呢,呃这块呢,就是呃,由于呢,就是它需要呃搜索引擎大家知道像百度等等啊,它需要爬取大量的数据,然后以特定的格式来进行这个存储,对吧?然后我们在讲到这个下天的时候呢,咱们会提到这个索引。啊,会提到这个索引所引呢,有好多类啊,逐渐索引呀,普通索引呀,唯一索引呀等等,其中还有一类索引呢,叫做全文索引,那所以呢,能够提升速度,但是全文索引的话呢,你要用它呢,这个不行,效率太低了,哎现在主流的话呢,我们针对这种呃,数据量比较大的这种场景呢,咱们哎用的都是搜索引擎。啊,这个大家注意,就是大家用的百度的搜索引擎,以及呢,比如说你在这个京东啊,这个呃,这个淘宝等等是吧,诶各种场景呢,只要它有个放大镜一样,你点开搜索引擎,只要数据量比较大的,我们都选择的,诶搜索引擎的这个数据库啊好,下一类呢,叫做劣势数据库,呃劣势数据库什么情况呢?诶这个呢,就提到了咱们这个关系型数据库啊,其实都属于这个叫行式数据库,就是我一行代表一条数据啊,第二行第二条数据,那我们在查找数据的话呢,也是一行一行就是行是存储呢,就是数据我们就呃先存了这个一,然后呢,就是这个A845,然后存这个二,然后存这个A3,再存这个一是吧,然后接着下一条数据啊,这个我们比如说是一个链式存储,我们就诶存出这个二,这个诶851,然后这个A5啊这个二。
13:38
然后下边这个二,哎,然后接着存第三条,这个呢就是行式存储,而这个列式存储呢,就是我先存的这个,就是比如第一列啊,这一一紧跟着这个是二,然后三啊等等等一直到七了是吧,然后接着呢再去。找它的第二列。啊,就是存储的这个845851,哎872哎这样的一个方式,哎叫劣式存储,诶同诶这有点意思是吧,那那这种存储数据的方式决定了它的特点是什么呢?就是这样存储的好处呢,就是可以大量的降低系统的IO啊适合于这个分布式文件系统,典型的就是h base。
14:13
啊,学习大数据的同学呢,应该这个属于必学的一个技能,叫h base,那同学说这个,哎,怎么就降低这个IO了呢?哎,这块我们要提到啊,咱们这个数据库呢,咱们常常做的一个操作,是不是就这种查询操作呀。比如你想查询这个表中说这个谁谁谁的啊,信息是什么,或者大于多少多少信息是什么,我们都是是不是一行一行的在找这个数据,对吧?哎,如果我们要用行式存储的话呢,我们就这样一行去找,但是这块呢,大家呃要注意一个点,有的时候呢,我们在查找的时候。我们只想查出,比如说最终查出来是这两条记录,我们只想查出了他的哎,这两个字段的这个信息。是吧,嗯,第二段第六段数据如果也要就是这两个字段信息,那么其他这几个字段啊,就我打勾的这几个字段啊,我们实际上是不需要他查的,但是呢,如果你要使用这种行啊,基于行这种存储的话呢,相当于我们要把每一行数据呢,都要加载到内存当中啊,那你相当于是不是加载了几个冗余的这个字段啊。
15:12
啊,那就或者说我们这个表的话,有可能它有20个字段,然后你只想查其中的两个字段,那其余的18个字段呢,都意味着它是这个冗余的字段,你就给加载到内存中了。啊,那么注意听啊,加载到内存中的这个无用的字段越多,它占用的内存呢当然就越多,占用的内存越多,那就意味着我们其实在加载的时候呢,你加载的无用的数据越多,那就意味着我们就进行了比较多的IO。我们讲下品的时候注意啊,咱讲下品的时候呢,会给大家去讲,咱们想提升数据查询的一个速度,哎,那有同学说那内存CPU是吧,他们有这个,呃,这个这个这个存读取数据的一个速度,我们说尽量这个数据呢,咱们都用内存了,然后内存呢,我们讲算法又分成这个常量级,也是这个,呃,跟相关的和N方相关的log相关的,我们有算法层面的一个复杂度不同的一个讲究,对吧?当然这些呢,都还是相较于我们,呃,如果从IO级别去读数据,还有还是说从内存级别读数据来讲,这个呢,都是小case了。
16:14
啊,这个呢,就是我们要读个数据来自于IO,就直接从硬盘加载到内存中的,跟这个数据本身就在内存中相比,这个速度要慢得多得多。所以说呢,诶,刚才回到这个点啊,我们如果说这个,呃,有过多的冗易字段,采用这种行式存储的方式呢,冗易字段过多,哎,我们占用内存当然就多了,其实就意味着我们加载更多的冗余字段进来了,就意味着我们就有可能会出现过多的IO。那么这时候性能呢,肯定就不会高。啊,那怎么去降低IO呢?咱用列式存储,你不就关心其中两个字段嘛,我就只查这一列啊和你关心的那一列了,其他的字段呢,就不往内存加载了,自然IO次数就少了,所以速度就快了。啊,不知道刚才我这样一个讲解,大家听得清楚不啊,如果有点迷糊呢,那也是正常的,咱们讲到这个,诶夏天的时候呢,咱们会讲这个索引这块是吧?诶咱们就会提到了关于它这个底层存储的这个问题啊,包括这个数据存储,这页的这个结构等等啊好的行,那我们再回来,这呢是关于这个劣势存储,还有这种图形的,那那我们想描述这种图形的这种关系的,你像你要用二维的这个表格来讲,那是非常复杂的。
17:27
啊,像这种典型的社交网络这种场景当中的人物跟人物之间的关系,那我们就诶考虑用这种图形诶数据库来进行刻画,就会非常的简单。OK行,那么以上呢,咱们就诶讲解了一些这个非关型数据库的具体的一些分类啊,那大家能看到就是主要呢,来适配这些非咱们说这种表格化的数据,我们就用这种诶这个非惯性数据库了,对吧。那么非关系性数据库呢,通常我们也几个词呢,你可以也用作叫no circle来表示,为啥呢?因为咱们的呃,Circle,哎,注意听啊,咱们的circle呢,主要是用来操作这个RDBMS的。
18:06
哎,那么对应的呢,那个非RDBMS是不是就我们就也起了个词叫做no circle,哎哟,S没了啊,哎,叫做no circle。啊,那呢,其实为代表的,我们就可以理解成叫非诶关系数据库。是这样子的啊行,那么诶说这个circleq呢,你是来这个操作这个关性数据库的啊,一直这个霸榜是吧,说那个有些人就考虑说能不能开发一门技术呢,就远离circleco啊,这个时候就no circleco就诞生了啊,结果呢,事实发现呢,这个no circle no circleco弄了半天最后还离不了circle啊,所以大家就会看到这个网上大家也能搜到啊,就比较好玩的一个关于no s一个功能的一个演变。啊,功能一个演变啊,七零年的时候呢,No circle,就是we have no circle,哎,我们还是有一些没有circle的一些场景的,哎,后来发现,诶,我们还得需要了解circle是吧,然后坚定的提出我们就是要no circle啊,后来发现呢,呃,好像我们还离不了circle啊,就是我们称为呢,叫not only circle就不只有circle啊,最后呢,还是no逗号circle口这个语言博大精深,就相当于呢我们现在的no circleco可以看作是最S库的一个补充了。
19:12
所以circleq呢,也可以列成啊,无处不在啊,嗯,好总结一下的话呢,就是说咱们在很多的场景下啊,比如像这种日志收集啊,排行榜啊,定时器啊等等一些场景下呢,我们就需要一些性能更高的啊,成本更低的一些数据库出现,那么哎,非关系性数据库啊就应运而生啊,像典型的这些场景呢,我们的呃,Red是吧,就有它的这种应用场景。好,呃,那么呃这呢,就是整个我们关于这个RDBMS和非RDBMS的整个的一个讲解啊,希望呢大家应该有所了解,那么接下来呢,咱们就诶这个讲另外一个点就涉及到叫关系数据库的一个设计规则啊,关系数据库的一个设计规则,哎,我们上面不是提到那个哎,这个关系模型了是吧?哎,这里边呢就会讲解。
我来说两句