00:01
好,我们来接着往后学啊呃,接下来要讲的东西啊,是对这个数据的操作。啊,也是我们这个DSL啊,对这个数据的操作啊,呃,那这个对数据的操作这个就比较关键了啊,就比较重要了啊,大家是必须要把它这个学会啊,而且呢,要把它这个写的很熟啊,就知道这个怎么去写,那将来比如说希望你去做数据的操作,让你去查数据也好,让你去呃添加数据也好,删除也好,修改也好。你都知道怎么去写啊,那么更多的应该还是这个插入和这个查询啊,这两个比较多啊,就是插入数据和这个查询数据啊,这两个事比较多啊,一般像这个什么修改或者这个删除啊,这个事其实呃比较少啊,比较少好吧,但是我们也会讲啊。行呃,那我们讲这个数据的操作之前呢,我们先得去明白一下这个ES中,它是怎么去帮我们存这个数据的。啊,它保存的这个数据结构是什么样子的。
01:03
能听懂吧,现在把这个了解一下啊,来吧,那我们给大家去举了一个例子,嗯,我把这折起来啊。好,什么例子呢,看一下。就假如说啊,就假如说现在我们有这么一个数据。啊,在这个Java中啊,我们现在呢,呃,有这样的两个对象啊,一个是这个movie对象,一个是这个actor对象。OK吧,你看这个movie对象啊,呃,它里面有这个电影的名字,有有有有电影的ID,有电影的名字,然后有什么,有这个豆瓣的评分啊,还有一个就是维护了一个什么这个演员的列表啊,就是你这个演你这这部这部电影呢,有哪些演员这个参演的。好,然后下面这个对象呢,就是我们的这个actor,就是一个演员啊,然后有演员的ID,有演员的这个名字。好,那你看一下啊,你从这个对象角度来讲的话呢,他们的关系应该在这个地方,在这个地方去体现的。就是你的一个电影啊,是可以由。
02:00
多个演员。参演的。对吧,这是我们这个对象的一个关系,好,那现在的话,我就要求大家啊,把这个数据啊,比如说我有这个这种数据啊,就是我有这么这种数据。对吧,然后呢,希望你去做一个存储。呃,比如说我们先拿这个关系性数据库来进行存吧。啊,拿关系型数据库进行存啊,那你会怎么设计它。比如这单满so果存啊,我希望你拿满so的把这个数据给我存起来啊,当然不是说让你把这个类给我存起来啊,是他他的什么,他们怎么对应的数据。OK吧,这个数据的关系呢,我已经告诉你了啊,就是我对象关系,现在就是我的电影中呢,会有什么包含什么,很多个这个演员。好,那现在我希望你通过这个买搜狗啊,帮我去维护这种数据,OK,你会怎么设计。
03:00
想一下吧,你会怎么设计啊?那你首先要想的就是我需要有几张表来去存这个数据。你不仅要把这个数据能够存进去,你还得什么呀,能够表达他们的关系啊,你还得什么能够什么支持我们去做这个很方便的查询。啊。先想想吧,需要有几张表来去存啊,同学们,你可以把这个表的这个张数先告诉我一下啊。你告诉我几张表,其实我大概就知道你这个想的对还是不对了啊。来说一下啊,在你这个聊天窗口中说一下啊,几张表。现在告诉你会被拆分成多张表啊,这个应该你们都能够想得到啊,但是具体几张表呢,就得看你们这个对这个东西呢敏感不敏感了啊。呃,这个。王旭说,三张表好。别的同学呢?
04:05
啊,有没有这个别的答案呢。啊,两张表。那肯定最起码得两张表了,对不对,最起码得两张,因为你一个电影一个演员,那最起码得两张表了,对吧。你这加一张是啥意思呀。四张表。还有四张表。这个没有五张表的吧啊。234是吧,也没有一张表的吧。啊,这个肯定不会有啊,想来说一下吧,这个是大家的这个答案啊,这个呃,想到这个两张表,或者想到这个三张表啊,这个都是我觉得大家会想得到的啊,但这个四张表。你是怎么想的呀?啊,永涛你跟我说一下啊,你为什么说说这个四张表啊,你四张表你怎么存呢。
05:05
啊,我看你是怎么想的。还是你在这里瞎闹呢,跟我。行,你可以一会把那个想法啊,发到这个聊天窗口中啊,我看一看好吧,行,那我们来分析一下啊呃,这个正常情况下你要存的话呢,其实要存成什么,存成这个三张表啊,这个两张表的同学你再去想想吧,它是不行的。啊,为什么不行呢?就是这个地方啊。如果说你要拿两张表来存的话,那你最起码第一张表就是一个电影表,第二张表是一个什么act表,就是一个演员表。是这样的吧,啊,一个电影表,一个这个演员表。那你在电影表中的存ID、存名字、存豆瓣评分,这都没问题,在这个演员表中存什么,存ID、名字都没问题,关键是这个东西你怎么去体现呢?我的一个电影有多个演员参演的。
06:00
你这条数据你怎么去体现啊,这个关系你怎么去体现呢。啊,同学们。对吧,他们之间是有个关系的啊,同学们,而且这个关系可不是说这个一对一的关系啊,它是一个一对多的关系。那大家想着说,诶,那一对多不很简单吗?我是不是可以考虑在你的这个actor中。是吧,在你的act中,然后我再去什么自己加个字段啊,那个字段叫叫什么叫movie ID。是不是叫末尾ID,我就什么把我这个演员所参演的这个电影的ID给他维护到这里面。是这个意思吧。但这样你想想合理不合理啊,同学们。如果说你觉得这个数据合理的话,那就得有一个前提,什么前提呢?就是一个演员他只能演一部电影,这样就合理了。
07:03
但我们实际情况的话,你说一个演员我就只能演演一部电影吗?这不是吧?我可以演多部电影。对不对,所以说啊,就这个地方呢,其实我是没有去写那个什么,就是我的每个演员可以什么演多部电影,但是你要去想到这个事情。能听懂吧,你要去想到这个事情啊,所以说呢,其实你仔细分析一下啊,他们两个的关系呢,应该什么呀,应该是双向一对多,就是一部电影可以由多部多个演员来去参演,对吧,那同样我的一个演员呢,可以什么参演多部电影。能明白吗?说他们是吗?你你对我是一对多,我对你也是一对多,说说我们是双向一对多,那说白了我们就是一个多对多的一个关系。理解吧,多对多的关系,我跟你讲,肯定是需要有一个中间表来去维护他们的关系的,要不你这个关系呢,你就体现不了。OK吧,来,把这个事儿我给你掰开来说一说啊,这个好多同学肯定到现在都没有想明白啊。
08:07
来掰开来说一说啊,我们简单去梳理一下你就知道了啊,就这个。第几个呀,这个第七个吧,好吧,第七个嗯,那就是这个MY搜狗L存储啊,MY搜狗这个存储好存储存储我们的这个movie对不对,Movie和这个act啊,好,那比如说啊,现在我有一个这个movie表。啊,我有个末位表,然后假设呢,它里面我们不是有什么有这个ID name对吧,有ID有name,有这个豆瓣,还有一个什么叫做。Act list对吧,这个东西呢,来我先我先不写它吧,好吧,我先不写它啊,就我先不写它,然后呢,再来一个叫做这个act表。啊,这个表里面也有ID,有name。南方看明白同学们有ID有name啊,行,那你现在去想了啊,比如说我现在有一个10001这个演员。
09:08
那行吧,他叫什么呀,他叫,呃,他叫吴京是吧。好,呃什么呀,这个这是电影对吧,这电影哈,那比如说101电影吧,好101这部电影。那行吧,然后呢,叫什么呀,他叫呃。叫什么叫战狼啊,对吧,然后豆瓣评分呢,比如说这个9.0啊9.0。好,那那我再来几个啊,比如说这个102,嗯叫什么呀。叫800是吧,好,然后呢,豆瓣评分呢,比如说这个呃,8.8啊,这我随便随便写的我也不知道啊,然后再来个103啊。再来个什么呀,呃,再来一个。那就红外行动是吧?是不是红外行动啊,然后这个是,呃,叫红海行动,比如说也是8.9吧,啊面写的啊上面写的。
10:05
OK,你看了哈,假设啊,这是我的这个三部电影,然后呢,现在我有这么几个演员啊,我有这么几个演员,呃,演员,比如说这个第一个演员是1001啊叫什么叫这个吴京啊啊1002叫张毅啊啊然后1003啊,然后呃就就就就他们俩得了吧。战狼。吴京演的800。红海。行,就这样吧。OK吧,就这样啊。行,你看了啊嗯。现在啊,我想去体现这个关系了。你比如说啊,这个战狼啊,由谁演的呢?就假设啊,假设这个吴京和张译都演了。那行吧。假设啊,他们两个都演了啊,这我就不再去纠结啊,这个对还是不对啊,行,那你看看啊,我想去维护你的这一部电影,所参演的这个演员的这个名字啊,所参演的这个演员。
11:02
你说你直接在这个地方搞一个什么,比如说叫什么叫actor list,这样能行吗。加不行。因为它是多个数据,比如说我的1001也演了,然后1002也演了,你说你这个你怎么去存这个数据啊,啊,你怎么去体现这个什么1002 1002呀,你怎么存呢。你没法存吧?对吧,你没法存。好吧,所以说啊,这个地方你就会想到这个问题,那我的一部电影呢,是会对应什么多个这个演员的,但是我的电影呢,就这一条数据,你不能说让我的一条数据中,然后存什么存这个多个东西吧。对吧,这肯定是不合适的,从数据库层面来讲啊,这是不合适的啊,这个是不满足你这个什么三番式的啊讲,所以说这个地方你肯定不能这么去做啊,那同样的道理就是。好啦,同学们,同样道理,你这个如果说你能够分析到,那我的一个演员啊,他可以演多部电影对吧,那比如说那我维护一个什么movie的一个什么ID。
12:01
啊,Movie的list对吧,比如说吴京演的什么,吴京演的战狼对吧,演的爸爸演的红网行动,那你说你把这个什么101啊102103放到这。真的行吗?这也不行。能听懂吧,啊,但如果说啊,我我就就刚刚跟你说的啊,如果说我们有一个前提是什么,我的每一个演员,他只能够参演一部电影的情况下,那就好办了呀,比如说吴京啊,你就演了战狼,那我就把101放在这就完事了,你不用考虑别的,因为他不可能演别的了。对吧,张译,比如说你就演了什么,你就演了这个,比如说800对吧,你就把102放在这,但我们实际情况是这样的吗?同学们并不是这样子的。对吧,我们实际情况是我的一个演员是可以演多部电影的。所以说你就不能这么去写,你这么设计就会有问题。啊,那我们应该怎么去体现。一个电影有多个演员去演,一个演员可以演多部电影,这个事情呢,那我们就需要通过中间表来去做啊,中间表就所谓的什么关系表来去做,你看啊,我们学校有这么一个表叫movie。
13:07
然后呢,Act a啊有act表,呃,这个表里面存什么,这个表里面非常简单,存什么存你的movie ID。Movie ID存你的actual ID能看到吧,你比如说啊,假如说我的101这一部电影,我是由什么,由这个这两个人演的好,那我就这么去存啊,你看101这部电影谁演过呢?谁演过呀?1001演过,101这部电影谁还演过呢?1002演过。对吧,同样啊,比如说这个102这部电影啊,假设啊,这个是800是1002演的,对吧。然后呢,103这部电影啊,假设也是1002演的。行,我就把这关系存下来了。好,那这个时候你看啊,你存下来以后呢,你还要去分析一下,就是他能不能把这个关系体现出来,比如说现在我想看一下101这一部电影有哪些演员演的。
14:07
那这个时候你是不只需要来到这个表中去查一下101这部电影有哪些演员演的呢?是不是这两个人?对吧,或者说呢,哎,我想看一下,就是102这个人啊,就这个张译他都演了哪些电影,那你过来以后来1002看到了吧,这个人演了哪些电影呢?演了这么几部电影。这种关系他就能够体现出来了。明白了吧,同学们啊,所以说呢,呃,这个问题其实很简单。那就这种题其实很简单,这个就不用说说,哎哟,那我们这个买搜狗也没有讲这个东西啊,或者说是我们也没有讲的那么细啊,我觉得不用讲那么细。啊,这种关系,只要你是学过买社会的,你就要什么,从这个关系的角度去想明白这个事情,你们绝对讲过什么,一对一,一对多,多对多这个关系。
15:02
对吧,你绝对讲过的啊,讲过以后呢,那这种东西你就应该能够把它分析的出来,这是最基本的了。好吧,同学们,行,那我就把这个给大家去这个分析一下啊,就现在你就知道了吧,我们应该怎么去存啊,就这么去存就OK了啊,怎么去存就OK了,好行,这是我们这个从买搜狗去存啊,大家发现这个其实还是相对比较复杂的,对不对啊,比较复杂这种关系我要什么通通过什么多个表来去维护。好,那接下来我要说大家这个ES怎么吹啊,ES呀,那就非常非常简单了呀。ES怎么纯数据呢?它会把你的数据直接通过一个摘省。来进行存储。就比如说我现在也想去维护这种关系,这种关系怎么维护呢?我直接把你的一条数据。然后呢,处理成一个什么摘省,然后呢,直接什么存到S中就可以了,直接往ES中去存,就所见即所得,比如说我看到诶有个什么电影的名字,有个什么电影的ID,对吧,然后呢,有个什么豆瓣评分,还有个演员列表,行吧,那既然是个列表,那我就是列表来,列表里面我有哪个演员,哪个演员,哪个演员。
16:09
所见即所得,我就什么把它们整体就什么存档存进去了,所以说啊,我们可以这么去看,我将来存到ES中的数据应该长这样子的。首先它是一个摘。这是你的电影的ID,这是你电影的名字,这是你电影的评分。接下来这是你的演员列表,演员列表中,比如说你有多多个演员对不对?那你的每个演员又是具体的一个什么对象?比如说这是你的演员的ID,演员的名字,演员ID,演员名字,演员ID,演员名字。我就不需要做什么拆分还是什么拆分,就多个表,没有这回事儿。对吧,就这种关系,你所有能看到东西,我就整体给你什么处理成一个什么摘,然后呢,直接扔到ES中就帮你存好了。能明白了吧,所以这样的话,你也就能够理解啥玩意叫一个什么document,就是一个文档,你看这东西其实就是一个文档,就是一串一串数字啊,就是一个一,就是一整个什么字符串吧,虽然说它有什么固定的格式啊,它是什么加成格式的,对吧?但是呢,你仔细来看,这玩意不就是一个字符串吗?
17:09
对吧,就是一个文档,我就什么直接给你传进去了。这就是ES。理解吧,啊,它是什么直接去纯一个摘的啊,它不像我们这个传统的这个数据库,因为你的传统的数据库啊,大家注意它的设计呢,是要遵循很多范式的,你们应该都讲过啊,各种范式。对吧,啊,你设计的时候要求考虑到这个这种范式,但是呢,我们这个ES呢,因为它不是关系型的啊,它不是关系型的,所以说呢,它只需要什么呀,然后把你的数据给你存下来。啊,而且呢,能够什么支持你这样去查就完事了啊,他为什么要求你存这个摘的,因为你存摘我是可以什么非常方便去解析它里面的每个字段的。对吧,啊,我是非常方便去解析每个字段的,那最后能够达到的效果呢,其实跟你这个传统的关系数据库也差不多,你想去查某个字段,我可以让让你去查。对吧?你想对某个字段做计算,我可以怎么支持你?
18:00
理解了吧,啊,这是我们存储的一种数据结构啊,你要先把它这个理解。好吧,行,那就说这么多了啊。
我来说两句