00:00
同学们,接下来我们一起学习第四章的内容,在之前的学习中,我们使用客户端工具和Java API对ES软件进行访问,大家对ES软件的基本操作呀,应该比较熟悉了,那接下来呢,我们准备对ES软件呢进行一个深入的学习,掌握其内部的核心进行原理,那首先呢,我们需要先对ES中的一些核心概念呢进行说明。那咱们第一个要说的概念呢,其实就是索引了,说到索引呢,其实大家并不陌生,买SQ中就有索引的概念,那比如组件索引,那可以快速定位和快速查询数据,它类似于新华字典当中的目录,你要想查询某个汉字,你可以根据目录中的声母啊,韵母啊进行查询,也可以通过偏旁部首进行查询,对吧?那都会比较快。所以呢,我们ES当中的索引呢,其实非常重要的啊,所以呢,下面有句话,他说我们的ES当中索引的精髓,它一切的设计都是为了提高搜索的性能,所以你简单的理解为ES中万物皆索引,其实都是可以的。
01:00
他就是为了快速查询,什么都会加索引,这不挺好的嘛,对不对,所以在一个集群当中,它可以定义任意多的索引啊,后面的我们来看看索引到底是什么,对吧?嗯。接下来我们要说的是这个类型,那这个类型呢,对于我们来讲,其实现在可能不重要了,因为早期的时候啊,ES软件为了对应关系数据库,他把那个我们的索引呢当成数据库,把类型呢当成表。把那个文档呢,当成我们的数据行,把我们的那个field当成列,那这样的话有个对应关系,以后我们用起来啊,还有学起来呢,比较容易,但是后来发现不行,不行的原因在于这个类型是没有意义的,因为我们索引呢,它可以关联数据,就意味着在索引和数据之间不应该再去增增加一个概念,这是不不应该的,那所以这个tap呢,在最新的版本当中,其实已经不再支持了。它会有一些别的操作,但是已经不再是表示类型的概念了,好吧,这个咱们需要统一一下啊,接下来就是我们的文档了。
02:01
咱们这里的文档呢,其实就是数据的意思,保存一个数据就是保存了一个文档。这个里面文档的格式呢,其实就是接省格式,这个节省咱们之前说过了,一种特定格式的javascript对象,如果一个字符串它符合接省格式的话,这个字符串就称之为叫节省字符串,我们会有很多的第三方的类库来解析这样格式的什么接省字符串,把那个字符串转变成对象,所以在互联网当中,这种我们的接已经成为了一种事实的数据交互格式,用的还是比较多的啊。然后呢,下面呢,叫那这个field呢,对于我们来讲,其实啊,它表示的就是字段啊,就比方说Jason当中会有很多属性吗?这个属性我们就叫字段,就叫field好吧。下面这个呢,我们叫映射,那什么叫映射呀?诶在我们买时候当中一张表,它里面有哪些字段,这些字段是否为空,什么类型,它的长度是多少,它的默认值是什么,这些它属于我们的表结构信息。
03:05
而对于一个索引来讲的话,它其实也有自己的结构信息,这个结构信息我们就称之为叫做映射,那映射当中,比方说哪些字段可以被查询呢?哪些字段呢,可以进行分词操作呀,诶它都有专门的设定,接下来我们来说一下分片,那这里的分片呢,其实你可以简单的理解为就是我们买SQL数据库当中那个分表。一张表数据太多了啊,你容纳不下了,或者说你的这个访问效率变低了,那我就希望呢,我这张表的数据呢变少一些,可是你变少了以后,你的数据就不完整了,那怎么办?诶把一张表拆分成两张表,比方说用户。我把男的放一张表,把女的放一张表,那这样的话,我访问男的信息,我去男的这张表里面查,我访问女的信息,去你的这张表里面查,那么这样的话,每张表的数据量都不是那么的大,对不对?但是两张表合在一块,不就是一个完整的用户数据吗?所以啊,这里呢,跟这个分片的概念就很像了,一个索引可以存储大量的数据,但是在单节点上它会受到硬件的限制,也就意味着在单节点上不可能数据存的很大啊,比方说磁盘空间它没那么多,对不对。
04:15
所以啊,我们需要把一个完整的索引数据给它拆分成几块,那么每一块儿放在不同的服务器接待上来统一提供服务,他们合在一块就是完整的索引数据,所以每一部分,每一块我们就称之为叫分片。啊,同学们,这个能明白吗?就跟我们切片一样是吧,切成几片合在一块是完整的,是一个意思啊,那么我们这里的分片很重要,为什么呢?它主要有两个方面的原因,第一个它允许我们水平切割,扩展我们的容量,就是因为啊,你在单节点上,你不可能无限大吗?但是你多增加几个分片,每个电脑上有一个分片,那么这样的话,无形当中不就把数据量变得很大嘛,对不对,它可以扩展我们的容量。
05:00
第二个它允许我们在分片上进行分布式的什么查询,大家想一想,刚才我说了一张表,你分成男和女,那么如果我想取男的数据,我就访问男的这张表,如果我想取女的这条数据,我就去女的这张表,那这样的话,你的那个请求不就被给他负载开了嘛,对不对?那这样的话负载均衡之后,我们的请求量就可以得到提升,这样的话就提高了我们的吞吐量,哎,就是这个意思啊,所以我们的分片还是非常重要的啊。呃,下面呢,是一个我们副本的概念,那副本是什么意思啊,说的简单点,我们的分片它保证了我们数据啊,可以放在不同的节点上统一提供服务,这是没问题的,可是那万一某一个分片它突然荡掉了怎么办?你的服务器宕掉了,你的数据没了,那不好吧,诶不安全,对不对,所以我们为了考虑数据不丢失,我们需要给我们的数据干嘛呢?加一个副本,加一个备份,这样的话,一旦我们的某一个分片的数据丢失了,没关系,它的副本还在,那这样的话我依然可以提供服务,这不挺好吗?对不对,所以啊,我们这个,诶副本的概念呢,其实也很重要,那跟那个分片是一样,非常的重要,它也可以干嘛呢?诶我们说在失败的情况下,提供了一种高可用性,而且它也扩展了我们的什么。
06:21
吞吐量。你想想吧,你的副本多了,那我们都去取数据,就不见得从一个节点上取数据,你从副本上取数据是不是也可以啊,哎,所以效果上是一样的啊,没有区别好吧。然后接下来我们再往下下一次分配,那么这个分配呢,它涉及到一个节点的问题,比方说我们的集群有三个节点,那我怎么知道哪个节点它是主要节点,哪几个节点是我们的什么重节点呢?因为我们的节点之间呢,它一定有个管理的功能,比方说你的分片我怎么去调配啊,把它放在哪一个我们节点上面去,这些是有一个master它来完成的,而这个master它来决定你们的这个分片应该如何去分配,所以这个我们后面都会给大家讲解,好吧,这就是一些我们的核心概念。
我来说两句