00:00
好,那我们刚才的话呢,实际上我们计算完了这个have的表级血缘关系对吧?并且我们在这里边的话呢,呃,我们做了一个什么样的事情呢?我们找了一个非常简单的这样的一个CQL语句,对吧?来分析它的输入表和输出表对吧?呃,当然就是说因为我们一条CQ语句呢,它的输入表和输入表呢,可能会比较复杂,呃。那么这样的话呢,实际上就是,呃,我们的这个血缘关系,它最终是一个什么呢?呃,那么它最终应该是一个有向无环图对吧?呃,它最终是一个有向无环,就是我们分析出来的这样的一个血缘关系是吧?呃。它是一个有向图,或者说是一个图数据结构,呃,我们现在呢,其实我们是可以分析出它的,呃,就是说血缘关系的对吧,或者说我们可以得到这个图的结构,但是我们现在要思考的一个问题就是说,如果对于一个大型企业,它可能有很多很多的CQ,对吧,执行过很多很多的CQ,那么像类似于这样的血缘关系图对吧?我们肯定不可能说是每次呃执行程序的时候,我们给他呃去当下去生成对吧,也就是说这儿的话呢,你需要考虑什么呢?呃,那你就是需要考虑一下如何来。
01:27
把这个图数据结构给它持久化到硬盘上,对吧?把图数据结构持久化到硬盘上,呃,当然就是说你持久化到硬盘上的话呢,呃,我们可以选择,比方说你可以选择使用MYSQL对吧?呃,这样的数据库对不对?你可以选择使用MYSQ这样的数据库,呃,当然MYSQ这样数据库呢,它有一个什么样的问题呢?它那它的问题就在于它不太适合存储这种图数据结构,比如说我们在这里面,其实你可以用MYCQ来这样来来存,对吧,比如说这个是,呃,当然这个是ID,我们给它省略掉对吧?那么你可以说这个是原顶点或者说SS字段对吧?那么除了SS字段以外呢,我还可以给他来一个target字段。
02:13
好。Target字段,呃,那么然后呢,我们有这两个字段之后的话呢,我们就来看一下这样的一个血缘关系,对吧,如果他存到买CQ,它可能就会长这样的一个样子。那么S的第一列对吧,T2。呃,那么第二列的话呢,是一个T3对吧。呃,然后呢,Target的话,当然它也有两列对不对,呃呃,或者说它也有两行是吧?啊,我们这个删除掉,呃,它实际上也有两行。呃,那么这两行的话呢,那第一个就是T1。那第二个它也是T1对吧,也就是说你实际上你可以使用MYCQ呢,以这样的一种方式呃来把它,呃就是说持久化下来,或者说把它存到数据库里边,但是这样的一种数据格式对吧,就是每一行它都记录了一条边吧,相当于是也就是说圆顶点到目标顶点的这样的一个边,如果你存在买CQ里边的话呢,实际上我们通过CQ这样的一个查询语法那。
03:25
对吧,然后你写一个CQ呢,然后把它查出来,然后构建这样的一个图呢,实际上呃是很复杂的,对吧,你要用CQ写的话,是非常非常复杂的对吧?呃,所以说呢,业界呢,就专门研发了一种类型的数,叫做呃数据库叫什么呢?叫图数据库,那它就是专门用来保存什么呢?保存这样的一个。图结构的对吧,图数据结构的,呃,那它的图数据库的代表呢?那就是呃,我们的这个new for g对吧?那么图计算的代表是什么呢?比方说Spark的,呃,Graph X或者说flink的该里对吧?那么这个是比较有名的,呃就是说用来做图计算的这样的一些组件对吧?所以说这个实际上业界它是有专门的解决方案的。
04:19
那么。既然我们的数据库我们用的是new for g,它自然也就会有一个对应的查询语言,对吧?那么它的查询语言呢,叫做spher对吧?它并不是说CQ查询语言,它是呃它的查询语言的名字呢,叫做cipher,当然和CQ的这个呃语法的差距呢,也就比较大,差别会很大对吧?呃,当然实际上就是说呃,我这个图数据库的功能,我用买CQ或者说这样的关系数据库对吧?并且用CQ的查询语法来查询它能不能。完成我们的需求呢,实际上也是可以的,因为呃我们都知道CQ它是一个图灵完备的编程语言对吧,就是说呃理论上来讲的话呢,就是说编程语,其他编程语言,任何一门编程语言可以做的事情,我们用CQ,呃都是可以做的,对吧,你比方说你可以使用CQ来呃编写快速排序啊,什么编写呃这个单元最短路径算法对吧,也就是我们的迪克斯特拉算法等等的,实际上你都可以用CQ来写,只不过是呃它写出来从可读性对吧,以及复杂性而言的话呢,呃是其实是很痛苦的一件事情对吧?所以说我们呃对于专门的需求的话呢,我们就会来研发一些专门的工具来做这个事情,对吧,那比方说图数据库,其实就是啊,来做这个的好。
05:44
当然我们在这儿呢,我们的图数据库呢,用的是new forg对吧?呃,因为new forg本身它是也是一个,呃,就是说Java开发的这样的一个东西,然后你点击。这个网址,那么它就可以下载对应的对吧,操作系统的new for社区版对吧,我们来看一下这个下载页面啊,你可以把它复制过来。
06:10
呃,我们复制一下的话呢,我们就来对吧,你就可以,呃,在这里面的话呢,对吧,我们随便找一个页面对吧,随便找一个页面,然后呢,或者我们新开一个页面,CTRLV。对吧,然后呢,我们访问一下。呃,我们来看一下它的这个,呃,就是说下载页面你可以看到这个就是当前的发布,那我们一般来说,我们肯定用的是社区版对吧,因为你要用企业版的话,你还得付费,呃,因为设计版就完全够用了,然后呢,因为我这里边的话呢,我是使用的是Linux系统,对吧?因为我这个系统入班图,所以说我会选择下载这个压缩包。对吧,把这个T压缩包下下来,如果你们是Windows系统的话呢,那么你们需要把这个zip压缩包对吧?对应Windows系统这压缩包呢下来下下来之后呢,就可以进行解压缩了,对吧?那么解压缩完毕以后呢,我就CD到这个new for文件夹里边,然后点斜杠并斜杠new for start。
07:17
就可以启动new for的数据库服务了,对吧?当然你这里面你要注意你系统的Java版本或者JDK版本必须是JAVA17之上对吧,它必须是JAVA17以上的,所以说你要注意,呃,你不管用Windows还是Linux而言,对吧?呃,你要在这个控制,呃,就是说在这个terminal里边对吧,你给他检查一下。你可以看到我这儿的话呢,我已经把它进行了解压缩,对吧,那你需要检查一下你的Java杠窝。对不对,它是不是17以上的版本,当然我这是19,所以说我肯定是,呃没有任何问题的对吧,包括Java c对吧,呃,你也可以相同的把它切换到JAVA19来对吧,JAVA19因为我们这儿就直接使用最新版了,对吧,直接使用最新版了好。
08:07
OK,那么这样的话呢,其实你下载下来解压缩,然后设置好系统的这些版本呢,其实new for这就算是安装完了对吧,其实new forg呢,已经算是安装完了对吧,然后我们执行命令对吧,比如说在这里边,呃,当然因为我这个new for呢,我已经启动了一个,所以说我在这的话点斜杠并。对吧,我们看一下我们LS以下,当然我这个已经进入到了这个B文件夹对吧,所以你也可以不一定是点斜杠bin对吧,你可以CD到B文件夹里面啊,直接点斜望new for j,然后杠H对吧。啊,那这个就是它的。帮助文档对吧,你点c new for start呢,就创建了一个呃服务对吧,创建了一个服务器,那stop的话呢,就停止掉这个服务对吧,Stop就停止掉这个服务,好,那我们在这的话呢,我们点斜杠,你forg对吧,我们先来给他一个stop,把它停掉。
09:05
对不对呢?啊,我们现在呢,我们先把它停掉,因为可能之前我已经起了一个好,然后呢,我们在这儿的话呢,我们就会启动你要for这个服务,把它做一个后台服务来启动对吧?好,那现在就已经启动成功了,那启动成功的话呢,我们在哪里去访问呢?在local host的冒号7474,呃,来操作这个数据库对吧?来操作这个数据库,好我们现在点击这个,然后呢。LOCALHOST7474。然后呢,斜杠。那么我就可以,你就可以看到,诶,我这儿我就登录进来了一个,呃,就是说new for,这这这样的一个,呃,操作数据库的页面对吧?当然它需要你输入用户名和密码,初始的用户名和密码都是ne for j对吧?初始的用户名的密码呢,用户名是ne for g,密码也是new for,所以说你点击connect。
10:06
你在第一次进行连接的时候呢,它会要求你修改密码,当然我在这儿的话呢,我就呃直接修改一个123456对吧,呃修改一个呃就是说六个零这样的密码对吧,然后在这的话呢。我还是六个零对吧,123456,然后点击change password。啊,对吧,当然现在就是说这个密码的话呢,它要求你至少是八个字符对不对,所以说我现在比方说我如果设置八个零呢,我们来看一下。12345678对吧,因为它最新版本呢,它可能需要零,它需要字符的数量的多一些,点击change password。好,那么他就在修改密码对吧,那这样的话呢,我们的呃,密码呢,就已经修改好了,对吧,所以说我在这儿的文档的话呢,我可以更新一下对吧?呃,就是说密码呢是八个零。
11:03
密码是八个零,也就是说我们的new for g的初始用户名和密码都是什么呢?都是new for j对吧,都是new for字符串。啊,那我们把这个呢,给它提交到仓库里边去,把这个文档都是你要发这字符串啊,所以说你你的话呢,它第一步实际上就是要求你来,呃,就是说修改密码对吧,然后我在这儿的话呢,我就修改成了八个零,OK,那现在的话呢,我们就可以正式来呃操作这个数据库了,对吧,我们就可以正式来操作这个数据库了,呃,当然就是spher这样的一个查询语言呢,它本身是比较枯燥的,所以说我们就是举几个简单的例子来用一下它,对吧?当然就是你在公司的时候呢,如果你真的用到了new forg啊,那你可以来呃系统的学习一下这个查询语言对吧?那我们在这儿的话呢,我提供一个链接,就是快速入门教程,快速入门教程,所以说我们在这儿的话呢,你就可以直接使用这个快速入门教程来来学习一下,对吧,来学习一下他的这个ser的一个编程语言哈,那我们就来看一下。
12:14
OK,当然我现在的话呢,我可以操作三分数据库,首先第一步我们先把呃数据库里面的所有的顶点和边呢都给它删除掉,对吧,因为我刚才说了图数据库它是专门用来存储图数据结构的,而图数据结构呢,它是由什么构成的呢?是由顶点和边。对吧?当然这个边的话呢,在我们的new方置里面叫做关系对吧?所以说呢,图数据库实际上它存两个东西,第一个是顶点信息,第二个就是顶点之间的边,对吧,我只需要把顶点和边给它存下来,那么呃,这张图数据结构呢,我们也就持久化完成了,所以说在new for这里面,它其实就是这样的一个思路,那首先第一步的话呢,我们当然是先删除数据库之前的所有的数据,对吧,Match,然后呢,你可以看到match n,这个N是一个变量名,Match n表示什么呢?表示匹配所有的顶点,对吧?然后detach分离,然后delete n。
13:25
对吧,那这样的一个语句的话呢,你就可以看到。我就把这张表就是说我就把图数据库里面所有的数据呢,都给它删除掉了。对吧,都给他删除掉了好。那么删掉以后呢,我们接下来我们可以来,我们要这里面我们刚才还是要注意的就是match呢,是一个匹配操作,小括号代表一个节点对吧,这个N代表一个节点,好,那么括号里的这个N呢,实际上就是变量名对吧?然后德delete呢,就是把所有的匹配到的顶点呢全删掉,然后接下来的话呢,我们创建一个日人物顶点对吧?因为图数据结构呢,它经常用来表示人与人之间的关系,比方说呃。
14:06
我关注了你对吧,A关A关注了B,那么从那么我们就有两个顶点A和B对吧?并且还有一个从A到B之间的一条边对吧。那关注关系,比方说我们这个社交媒体上的关注关系,其实它就是一个图数语结构,A关注了BB,关注了C,对吧,C还关注了A,对不对啊。那这个就是一个图,数据结构好,所以我们接下来我们创建一个人物节点,然后那个创建的,呃,创建顶点的这个,呃,关键字呢是create对吧,然后呢,在这呢,我们的变量名是N。那么这个N的属性,或者说它的标签,或者说它这个呃,它的类型是什么呢?这个节点类型什么呢?是一个person类型好。然后呢,我们现在我们要创建一个新的节点N,它的类型是person,我们还要给他一些属性,什么属性呢?比方说name属性,它是一个正这样的一个属性,对吧?呃,然后呢,我们创建完以后呢,我们返回这个N。
15:19
对吧,看一下创建的顶点,好,我回车你就会发现,呃,当然他在这儿呢,它会把你呃这个数据库里边的所有的顶点和以及边呢都给你可视化出来,那你可以看到通过这个可视化的呃这个网页的工具呢,我们可以看到我们这个账对吧,名名字为账的呃,然后类型为person的顶点呢,我们就已经创建完了,对吧,我们就已经创建完了,呃当然的话呢,你在在这里面你可以呃创建更多的人的顶点,对吧,你比方说你可以在这里面创建create。A person对吧,然后呢,我们的这个name是什么呢?比方说我这个name是一个Sally。
16:09
对吧,Return n,好,诶,我们又创建好了一个顶点。对吧。啊,我们又创建好了一个顶点,OK。然后呢,我们继续创建顶点对吧,我们继续创建顶点,那么在这的话呢,其实创建零点操作差不多,所以我在这里我就直接给它复制过来了,对不对?呃,直接给它复制过来哈,我们复制一行,我们再创建一个STEM。对吧,我们在创建一个Steve。OK,我们在创建一个Mac。我们再创建一个Mac对吧,然后我们再创建一个这个例子,这都是比较常见的英文名,呃,我们在创建一个叫做什么呢?我们在创建一个叫做SHSH对吧?好,那我们现在我们就创建了好几个顶点对吧?我们创建了六个人物,那么六个人物创建成功以后呢,我们就可以来使用一个查询语句match匹配所有的顶点对吧?把所有顶点都给它查出来,我们看一下。
17:18
对吧,那么在这的话呢,那就是match n return n回车你就可以看到。我们创建的六个顶点呢,通过这个查询语句呢,我们就都呃给他查出来了,对吧?可视化出来了,呃,当然在这儿的话呢,你除了说是呃创建这些顶点的话呢,那么我们还可以创建一些关系,对吧,或者说创建一些地区节点啊什么之类的,呃,其实你都是可以的,对吧?其实你都是可以的,好比方我在这边我就可以创建一些地区,什么迈阿密啊,波士顿啊,什么类似于这样的一些,呃,波特兰啊,呃,像什么旧金山之类的,对吧?当然在这儿的话呢,我是直接复制过来的啊。
18:04
OK,回车。我们来看一下,或者你直接点击一下这个运行。哎,当然在这的话呢,呃,看起来似乎我们应该是一条一条的创建,对吧,一条一条的创建。啊。OK,创建了一个对吧,创建了一个它它的这个呃,就是说呃类型的是location对吧,它city的名字Miami,他state名字是FLK,然后我们记,我们接下来的话呢,我们再来一个match return n诶你可以看到。不同类型的,它还用了不同的颜色给我们可视化,对吧?所以在这的话呢,我们,呃,我们可以继续创建对吧,我们可以继续创建,诶又创建好了一个,对吧,我们再创建一个城市对吧?我们再创建一个城市,呃,以及它的州。
19:01
所以说你看它这个属性,其实它可以放很多属性。OK,好。然后呢?继续创建,然后接下来的话呢,当然你在这儿的话呢,你就可以使用我们的这个match return n对吧,你就可以看到,诶,这是我创建的地区的顶点对吧?那这个是我创建的人名对吧?我们现在有这些顶点的话呢,其实我们可以给它添加边对吧?我们可以给它添加边,呃,什么意思呢?那实际上这个边的话呢,在我们的呃,就是说new for这里面呢,它有一个名词叫做什么呢?叫做关系对吧,叫做关系,所以我们接下来的话呢,我们就可以创建一些边了,比方说在这里边的话呢。我首先查询我要连接的顶点,对吧,比方我在这儿的话呢,是match。然后呢,我我要查询的第一个呢,是它的类型是person人们它的属性是什么呢?它的属性是。
20:04
呃,这个例子对吧,这是我要查询的第一个顶点,然后呢,我要查询的。查要查出来第二个顶点是什么呢?我要查出来的第二个顶点是这个AB冒号person对吧,然后呢,Name麦克OK。那这个我查完以后的话呢,我查出来了这两个顶点,我要把这两个顶点连起来,并且我是一个有向边,我要从哪里呢?我要从A顶点就是例子呢,给它指向麦克对吧?所以在这儿的话呢,我们就使用一个merge关键字对吧?这个merge关键字呢,然后接下来的话呢,我要从A往B连接一个顶点,并且呃,往B连接一条边,并且我还可以可以给这个边呢,给它起一个名字叫做什么呢?叫做比如说friends对吧,也就是他俩是好朋友的关系。
21:08
方括号里边呢,就是这条边的名字或者它关系名对吧,这边是有一个呃中横线,然后在这再来一个中横线,然后来个箭头,然后呢,我们给他写一个B回车对吧?当然你可以点击一下wrong。诶,那这样的话呢,我们就创建了一个关系对吧,我们就创建了一个关系啊,然后呢,当然你针对这个关系呢,你也可以增加属性啊,就是说这个的话呢,我们就直接大家就可以看一下教程对吧?呃,然后你就可以获取它的一些知识对吧?比如说在这里边,我如果呃,就是说match。嗯,Return,嗯,我们再把它都查出来,诶,你会发现我这例子和麦克之间是不是给它连了一条边呢?并且我还给它起了一个这条边的名字呢,叫做friends对吧?呃,当然你可以照猫画虎对吧?你可以就是说呃,比如说我在这里边,哎,我查出来我的这个名字叫做什么呢?我的这个名字叫做呃。
22:15
上吧,然后我从上到ma克呢,我也给它连接一条边,对吧?那连接完以后呢,我还是使用ma呢,把这个呃,所有的顶点信息呢,都给它找出来对吧?都给它找出来,当然你在这里你就可以看到上指向麦克,例子也指向ma克,并且他们的编的名字呢,都叫friends对吧,那这个就实际上就有一点呃,人物关系或者说知识图谱的这样的一种感觉了,对吧,知识图谱这样的一种感觉,所以你在这里边的话呢,你可以给它呃连接各种各样的边,对吧,你可以给它连接各种各样的边,好,那实际上我们基本上知道你如何删除啊,就是说new for这里面的所有数据对吧,以及插入顶点还有插入关系,基本上我们就可以使用这个数据库了,对吧?呃,基本上我们就可以使用这个数据库了,比如说我在这里边的话呢,诶,我们再来执行一次这个删除,对吧,Match。
23:15
N,然后呢,Detach delete n回车,好,所有的数据库里边的所有的数据都被我们删除了,为了验证的话呢,我们ma,对吧,我们再来查询一次所有顶点,诶,你会发现没有任何数据了,对吧?没有任何数据了,呃,所以说我们这个new for你知道怎么删除,怎么知道怎么插入顶点,以及建立顶点之间的关系,或者说呃,像这个图的顶点之间呢,添加边基本上我们就可以使用new forg,呃,来做一些事情了,对吧?那比如说我这里边要做的事情是什么呢?那我这里边要做的事情就是把我们的这个血缘关系图对吧?给他持久化到ne for这里边,给他持久化到ne for这里边。
我来说两句