00:00
呃,那这一部分呢,我们用到一个关键的一个工具,或者说是就是大家相关的一个一个知识点,就是mango DB,呃,那mongo DB这一部分我觉得有必要给大家就是先摘出来,先简单的介绍一下,好,那我们接下来就给大家啊,当然我们这就是一个很简单的简介了啊,就是介绍一下这个网购DB是什么啊,首先我们就来看它到底是个什么东西呢。王国D的底层C加加写的,呃,所以大家会发现就是很多,就包括这个在区块链领域,很多底层都用C加加写,对吧,就是C加加,我们平常开发写外部项目,写互联网相关的东西,可能很少用到C加加,但是底层的一些一些组件啊,一些数据库啊,还有我们这些,呃,底层的基础服务确实还是有很多用C加加写的,因为从性能角度来讲,C加加确实还是有很大的优势,当然了就是现在。
01:02
可能如果大家选选择新技术去开发一个新东西,可能呃,底层技术可能最最优先选择的是够了,对吧?呃,今今天上午可能还在还在聊这个购的一个发展情况,大家有同学可能关注到这个语言的发展状态的话,呃,购物现在的上升势头是非常非常猛的,这也就是为什么大家之前要好好的学学go对吧,因为区块链行业他如果要是招大家去做真正的底层链技术的话,就是做这个链的开发,做就是我们我们现在学这个以太坊这一部分的话,大家相当于是应用开发嘛,那我们可能不涉及到购,但如果真正做底层链开发,购物确实还是可能是很多企业最看重的一个技能,呃,所以这个看大家的这个兴趣啊,就之后的这个,包括就业应聘的兴趣方向在哪里,如果想做底层链,那购这一块还是得好好去去巩固一下,那mongo呢,它是C。
02:02
出来很早的一个产品了吧,那它是一个什么东西呢?首先mongo DB DB,那它是一个数据库,数据库系统对吧?那它是一个什么样的数据库系统呢?呃,跟我们之前可能大家有印象接触到的这些东西,像MY啊,Postq啊,包括Oracle DB two这些东西都不一样,那之前我们所熟知的那些东西呢,它都叫关系型数据库,这个大家应该有概念对吧?呃,那对于mongo来讲,它不是关系型的数据库,它是基于分布式文件存储的数据库啊,所以mongo,呃,也有人就是。大家可能听过另外一个概念,就是叫noq对吧?No CQ数据库mongo就是相当于其中的一个代表,No CQ其实是一个很大的概念了,呃,大家直观的理解可能就是说啊no cq吧,那就应该是里面没有C对吧,不能去用CQ查询,但是我看到有一种说法,说这个事实上啊,Noq其实说的是人家,人家一开始提这个no指的是not only,就是说我们不仅仅是,呃,当然这个就是大家看概念上怎么去理解啊啊,所以大家其实可以看到。
03:21
本身关系数据库之前大家如果有有了解的话,就会发现它的模式是什么样的,就是一个一个的表,对吧,里边每个表里边有有不同的这个column列的这个概概念,然后呢。一条一条记录插进去,这是一行对吧,所以整个是一个表格的这样的一个概念,作为一个存储单元的,而且在它这个关系型数据库里边,就是定义了表格之后还有主外键关系,那他们互相之间的关系就很容易能够联系起来,表和表之间有关系,所以它是特别擅长处理这种复杂关系的这样一种数据结构,那对于我们现在而言呢,为什么又又出现了各种各样的no CQ呢?大家知道之前这个CQ类型的数据库是非常非常的可以说是应用非常的成功,之前几乎就是一统天下啊,所有的数据库都是。
04:19
就是基于CQ的都是关系型的数据库,那为什么现在又又多了这么多这个no CQ的数据库呢?比如说mango,它为什么基于文分布式文件存储呢?呃,简单说它就是它就完全是文本存在那里了,这就是成立一个数据库,它为什么要用这种方式呢?啊,那logo的目的他不是说去解解决我们这个各种复杂的关系,这样的一些数据结构,他不是要做这件事情的,他要做的事情是为了解决web应用里边。它需要的高可扩展性和这种高性能的数据存储,主要是想解决这个问题啊,那么MYSQL里边,或者说这个传统的关系数据库里边,这个表结构一旦定义之后,你想要再去加上一列,就改变这个表结构,这其实是很复杂的一件事情。
05:13
或者说就是你要做表迁移了,对吧,从一个表要迁到另外一个表去,那这个就带来很大的这种数据的工作量,那这种在传统的领域其实都是非常避讳的,就是一开始你设计的时候就应该把这个设计好,不能出现这种情况,那对于我们现在外部应用而言,那可能那真的是数据是日新月异对吧?有可能我们现在存的大家个人信息,可能就是就是比方说一个姓名,一个编号,一个性别,那过两天可能就发现,诶这个人他就应该还有各种样的爱好,就应该放在里面,过两天可能发现还应该有各种各样的标签放上去,对吧,那再过两天有可能他因为各种各样的这个,呃,用户习惯他他做了各种各样操作之后,可能又会有。新的更改。所以说在web应用里边,所有的这些都变得更加灵活,这就需要我们的数据库能够提供更加灵活的这种可扩展的解决方案。
06:12
那也就是针对这样的状况,这个mongo他就提出了这样的一套这个分布式文件存储的数据库解决方案,好,这只是泛泛的一说啊,具体是它什么样子,等会儿我们看看它具体的形式就知道。另外还有一个就是网购,他能做什么事情呢?在高负载的情况下,它可以非常方便的添加更多的节点来保证服务器性能,也就是说它的可扩展性不仅仅是表现在我们的文档这种存储数据的可扩展性上,还表现在它的节点服务器上,让大家知道就本身MYSQL这边也是可以配主存的,但是它的主从配起来可能就相对来讲还是有点复杂的,就关系数据库对吧?
07:01
Mongo这边因为它是基于文件的存储,那它的主存配置非常容易,非常简单,所以很容易它可以起很多个节点,然后来配置这样一个主存关系,呃,另外大家看一下这个mango里边的基本数据结构是什么样子呢?它的基本数据结构是一个文档,他把数据存储成一个文档,然后它的基本数据结构就是建制动,所以啊,大家非常习惯的,也非常熟悉的这种方式,一个K,一个value,就像一个大对象一样,对吧?所以就是在呃,有些的这个文章里面认为mongo它的文档,它存储的东西就是一个Jason对象啊,但是其实严格意义上说它不是Jason啊,呃,它有时候会把它叫做叫做beson,就是b son。呃,有有些,有些人管它叫bison,有些人把它叫bison啊,不管怎么样吧,反正就是大家认为它就是一个类似于Jason的一个文本对象,所以这是它的呃,基本的存储形式,那它的字段值可以可以是基础的数据类型,大家熟悉的就是字符串啊,数字啊,呃,日期类型啊,时间串啊什么的这些都可以,那当然也可以包含其他文档啊,数组啊,或者文档数组都是可以的啊,这是mongo的一个基本的一些概念。
08:23
那接下来我们看一下这个所谓的mango的特性,它的特性啊,当然这个稍相对来讲是比较就是比较枯燥的一些东西了啊,我们就简单的说一下上面这个大家首先要要明确就是它的层级关系,它的层级关系是,诶,它的层级关系是最上面是database,也就是我们所说的数据库这一层啊,大家就是这是我们连接到哪个数据库上啊,这是在我们就是大家可以有这样一个概念是它是在我们的数据库服务器上面的一组数据集合,对吧,最大的一个数据集合,这是一个库database,然后database下面一层叫。
09:09
呃,这个是个集合对吧?啊,或者大家可以认为它就是。呃,比较小一点的一组数据的集合,那这个collection的概念是什么样的呢?有点类似于我们平常在MYSQL里边或者其他的关系数据库里边所说的表table,有点像table啊,所以大家可以认为就是collection对应的就是table,然后再往下还有一个叫document文档。那文档是什么概念呢?大家可以简单的认为它是一个table里边的一行记录,所以就可以认为是MYSQL里边的一行,对吧?啊,这是先简单的有一个这个概念,等一下我们看具体的例子啊,好,然后接下来就是说它是灵活的这个类Jason的数据存储,然后它每一条文档,每一条document。
10:01
刚才我们说它是类似于一行数据对吧?一条记录,大家注意在我们CQ里边,就是CQ数据库里边MYCQ里边每一条记录,它的形式肯定都是一样的,对不对?插入到同一个表里边,那它有的列有的这个字段都是一样的,那在mango里边呢,可以完全不一样,你存什么东西都行啊,所以就这个就非常非常灵活了,对吧?呃,然后它下面还有一些特性,就是方便的及时查询,这个叫ad ho queries啊,当然这个我们可能不去详细的给大家做展开介绍啊,大家知道有这些概念就行了,因为我们只是,呃,就到时候也只是用一下嘛,对吧?所以mango这一块我们只是一个简介,所以呃,大家知道概念就可以啊,就还有,所以我们可以很方便的创建索引,另外就是还有一个叫实时聚合。Aggregation啊,这个就是相当于我们可以像做求和阿啊做做这样的一些计算,Aggregation这样的一些聚合计算网,Go里边也是非常方便的,呃,另外还有就是在mango里边呢,它有一个命令叫update update这个命令它是非常方便的,可以实现替换啊,这里是完整的文档,这个应该写错了啊,我打错字了,完整的文档就是整个的文档,我们可以把它就是完整的替换掉,或者我们指定哪一部分要替换,也可以这样去替换啊,那这个其实比这个呃,CQ里边的update这个命令就还是会灵活很多,就方便很多,对吧?之后大家看例子,再再看具体的这个过程啊。另外就是芒GODB允许在服务端执行脚本,那它支持的这个脚本语言类型是非常多的啊,就是Python啊,JS啊,C加加Java。
11:55
啊,其实都是执行,都是就是他提供这样对应的驱动的,所以大家如果想去深入了解mango的话,也可以去看看相关的一些教材,就是怎么样去写这服务端脚本对吧?好,那我们我们这一堂课其实就主要还是一个简单介绍,所以说我们最关键的就是大家先能装起来,先能玩起来,那它怎么装呢?呃,其实下载很很容易啊,这里给了一个官网的这个链接,大家到时候看看能不能打开应该是可以的啊,呃,就是打开之后我们我们这里就点一下试试啊。
12:37
我们退出来,然后看看这个能不能打开啊。啊,看起来可以,所以大家可以看到这是mongo DB的这个官方文档,其实里边就有各种各样的教程,各种各样的资源,对吧,这里有document,然后whatsmgo DB大家都可以看到,那我给的这一个链接呢,打开之后就直接就是这一个下载页,所以大家可以看到现在的这个最新的这个版本已经是4.0.4了,对吧?啊,那这里它会直接的根据你当前的操作系统去判断你应该下载哪个版本,那我这里是Windows的64位,那大家可以下载Linux上,也可以装在Windows上,这个都可以,因为对于我们来说,Mango其实只是一个工具,就像IPFS一样,对吧,你你启动它这个服务,或者说有一个那个,呃,就是命令行的这样一个shell,一个界面进去可以敲命令就可以了,所以在哪个系统上去装,其实无所谓,大家选择自己对应的这个系统就可以了,好呃,另外就是这里也也多介绍一下就是。
13:49
是我当时是是用这个客命令可以去装的啊,就是我在Linux上面装的时候是可以直接这么装的,用一个客命令去连接这个GPS这里这个直接去获取这个文件,然后直接把它T安装解压出来就可以用了,那解压出来之后呢,它有一个并目录并目录。
14:13
大家如果想要去方便使用,应该把它要加到环境变量pass里边,就可以直接调用mango命令了,对吧,就可以直接调mango就可以启动它的客户端,帮狗D就可以呃,启动一个它的服务端,那那这里给大家要说的就是解压完成之后先。敲这个点杠,Mango d。然后启动mango的服务,那默认它的这个data pass是什么呢?是data下边的DB这个这个目录,那有时候可能大家如果要是没有这个目录的话,呃,他可能还会报错,所以大家可能就需要先把这个目录创建出来,呃,我不知道大家具体的情况是什么样的啊,呃,当然就是我现在这个linus系统,这个mongo是卸掉了,我在这个Windows上面装了装了mongo,所以大家可以看到我这边的这个状况是什么样子呢?
15:08
我的C盘下面就会有一个data,大家看到对吧,Data DB,所以大家会看到这个下面的内容,其实就是我现在mongo DB写进来,大家看到mongo dilo对吧?啊,这就是mango DB写写入数据的地方,大家看到collection,这很多个collection对不对啊,所以大家可以找到它的数据存储的地方,当然就是当有些同学可能说我不想放在它这个默认的数据存储目录,那怎么办呢?大家就加这个DB pass这个参数。就是启动的时候点杠mango d,然后杠杠DB pass,指定到自己想要的那个目录去,那就相当于在指定的目录启动了一个芒果服务端,数据要存储在这里感这就很像我们那个guest get DR对吧,所以这都是一样的东西,好,那么我这里可以给大家看一下啊,我这里我这里是Windows版本,所以。
16:04
我已经把它加到了那个,呃,就是pass里边,所以我直接可以敲mango d啊,这样大家就看到。可以启动一个mango服务啊,那么大家可以看到下边。别的我们可能都不管它一些系统方面的配置信息,对吧?我这里的版本是3.4.9,这还是比较早的时候装的啊,那最后来会看到waiting for connections on port 27017对吧?所以这是mongo的服务端启动的时候默认的一个端口配置,27017,呃,大家如果想改的话,也可以启动的时候加参数,呃,Port去去改对吧?所以这个都是一些常规的一些东西,大家了解一下就可以了。继续往后看,我们已经启动这样一个网果服务之后,那接下来我们其实就可以连接上这个,呃,就是创立mango连接,然后连接上之后就可以操作数据库了,对吧?那在操作数据库之前呢,我们先把之前提到的一些概念给大家先来核实一下,再来确认一下。
17:13
大家会看到这里边我们提到的主要的概念有哪几个呢?哎,首先是,呃,这里边mongo里边有database,然后有collection document,这是我们前面提到的对吧?那后面还有几个就是field index primary key,这看起来这个跟别的好像大家也都见过,对不对?这三个其实并不陌生,对吧?所以我们一个一个来看吧,Database这个跟CQ就是关系数据库里边的database概念一样。就指数据库啊,所以大家这个还是传统熟悉的概念,没有什么区别,C呢,对应到CQ这边就是table,所以大家可以认为它就是数据库里边的一张表,或者是一个集合,在mon里面就叫集合好,接下来还有就是document document放在。
18:06
CQ型的这个呃,类型的数据库里边呢,对应的其实就是它的一行。所以就是它的一行记录,一条记录,所以大家可以认为这就是数据记录行,或者是一个文档,在mango里边,这就是一个文档,所谓的一个文档其实就是一条记录啊,大家这个可能稍微感觉上好像有点不一样,对吧?感觉一个文档应该是比较大的一个东西,但事实上就是一个记录,这也是mango非常方便的一个地方,就是它这一条记录其实就可以是一篇文档都放进去。那在MYSQL里面,那你这个存储,你一开始设置它这个,呃,就是这个列的这个数据类型的时候,那你就得设置那个很大的一个BA对吧,这个就比较麻烦,Mango里边就因为它本身就是文本存储的,就非常方便,好那接下来对于。MYSQL里边,或者说这个关系型数据库里边,它的它有一个列的概念,对吧,有一个column,我们定义一个表的时候,它的每一列数据类型都要定义清楚,列的名字都要定义清楚,那mongo里边呢?呃,Mongo里边也有对应的一个概念,它叫field,就是字段。
19:15
或者叫域对吧?呃,这样的概念大家平常也都能够见到,它为什么叫字段呢?因为它的一个文档document这一条记录里边具体的存储方式就是一个K一个value,一个K一个value就是这样的,所以我们就把它叫字段的,对吧?所以这里边的。对应我们表格里边的列column,这里边叫字段,其实也就是那一条记录里边的键值对不对键对吧?好,那接下来还有就是index index,那就是索引了这个。传统的关系数据库里面有,Mango里面也有啊,几乎就是一样的,大家就就知道它就是方便查询吧,对吧,创建一个索引,针对某一个字段去创建索引,方便查询,好,那最后还有一个是primary key,这个就是主键,对吧,我们所谓的主键在mongo里边也有primary的概概念,主键的概念,但是呢,跟别的。
20:13
就是关系数据库不一样,关系数据库大家知道是可以自己任意去设置主件的,对吧,甚至还可以设置这个联合主件之类的东西,网购里面没有那么复杂的东西,因为它是文档型的,它是会自动为我们的每一条记录生成一个叫做下划线ID的一个字段,这个字段默认就是它的主键。啊,所以这是它自动做的,我们不需要去添加这个字段,而且我们也不要不需要去专门设置主键啊,这是mango里面的主件方面的一个设置。好吧,又说了这么多,这个大家看一下实际的这个样子啊,这就是猫GODB和MYSQL里边存着数据的一个对比,上面这就是一个表格,这是MYSQL的一个数据存储状态对吧?比方说大家看到啊,这里边它定义了几个什么数据类型的,有一个ID,然后有一个username,有一个email,然后他的这个年龄和城市,大家会看到MYSQ里面怎么存的,定义了这么几个列对吧?定义出这个表来之后,定义了这么几个列,然后它的数据数据类型肯定都是预先定义好的,对吧?然后这里ID就是一二对吧,一条记录我们看到。
21:25
一对应这个ID是一,然后username是mark has,然后email,然后H是25,然后他在洛杉矶,这是一条记录对吧,这是一行,然后下面啊,爱历12又是一条记录,这个理查德皮特对吧?呃。所以大家看到在MYSQL里面,它的数据组织呢,就是我们平常所习惯的表格这样的一个结构。那如果把这样一个数据放在mango里边,它是什么样子呢?大家看下面。这是不是真是就是Jason啊,对吧?大家应该很熟悉这样的样子对吧?呃,只不过大家注意它的主见变了,不是这里的ID12这样的状态了,大家看到它这里有一个下划线ID对吧?然后它的数据类型是什么呢?是一个object ID,这一个特殊的数据类型,就专门为了mango里边的主键设置的一个数据类型,那它是后面长长的这么一串东西,对吧?
22:23
啊,那这串东西它是有一个规则的,比如说它的前几位是时间戳。然后中间的几位是机器码啊,然后后边还有一些就是涉及到最后是这个随机码。所以大家会发现你要是前后脚这个创插进来的记录,它后面的就是随机码差一位对吧,别的其实都一样,所以这个大家可以认为它就是一个可以唯一指定它ID的一个字段啊,这是默认这个不用大家自己插,直接就是MANGO1条记录插进去的时候,Mon mongo自己就会生成,那下面呢,就会看到还是对应的这些字段,对吧?H city email username都是作为。
23:09
一个看起来就像一个Jason对象里边的一个一个属性,一个字段填进去就可以了,对吧,一个K一个value,所以大家直观感受一下,大家觉得呃,其实是不是芒果这个数据存储很简单啊,看起来很简单对吧?呃,而且大家看到这个就除了这种呃数字的这个类型,剩下这个就是键和值全是字符串,对不对啊,这个很简单啊。
我来说两句