elasticsearch核心概念

elasticsearch核心概念,第1张

核心概念
  • 索引(Index)
  • 类型(Type)
  • 文档(Document)
  • 字段(Field)
  • 映射(Mapping)
  • 分片(Shards)
  • 副本(Replicas)
  • 分配(Allocation)
  • 系统架构

本文主要参考的尚硅谷课程,自己手敲一遍作为笔记,同时加深印象

索引(Index)

一个索引就是一个拥有几分相似特征的文档的集合。比如说,你可以有一个客户数据的索引,另一个产品目录的索引,还有一个订单数据的索引。一个索引由一个名字来标识(必须全部是小写字母),并且当我们要对这个索引中的文档进行索引、搜索、更新和删除的时候,都要使用到这个名字。在一个集群中可以定义任意多的索引。
能搜索的数据必须索引,这样的好处是可以提高查询速度。
Elasticsearch 索引的精髓:一切设计都是为了提高搜索的性能。

类型(Type)

7.x 版本默认不再支持自定义索引类型(默认类型为:_doc),我这里就不再赘述了。

文档(Document)

一个文档是一个可被索引的基础信息单元,也就是一条数据。
文档以 JSON 格式来表示。在一个 index 里面,你可以存储任意多的文档。

字段(Field)

相当于是数据表的字段,对文档数据根据不同属性进行的分类标识。

映射(Mapping)

mapping 是处理数据的方式和规则方面做一些限制,如:某个字段的数据类型、默认值、分析器、是否被索引等等。这些都是映射里面可以设置的,其它就是处理 ES 里面数据的一些使用规则设置也叫做映射,按着最优规则处理数据对性能提高很大,因此才需要建立映射,并且需要思考如何建立映射才能对性能更好。

分片(Shards)

这个才是今天的主角之一。

一个索引可以存储超出单个节点硬件限制的大量数据。比如,一个具有10亿文档数据的索引占据 1TB 的磁盘空间,而任一节点都可能没有这样大的磁盘空间。或者单个节点处理搜索请求,响应太慢。为了解决这个问题,Elasticsearch 提供了将索引划分成多份的能力,每一份就称之为分片。

当你创建一个索引的时候,你可以指定你想要的分片的数量。每个分片本身也是一个功能完善并且独立的“索引”,这个“索引”可以被放置到集群中的任何节点上。

分片很重要,主要有两个方面的原因:

  • 允许你水平分割/扩展你的内容容量。
  • 允许你在分片之上进行分布式的、并行的 *** 作,进而提高性能/吞吐量。

至于一个分片怎样分布,它的文档怎样聚合和搜索请求,是完全由 Elasticsearch 管理的,对于作为用户的你来说,这些都是透明的,无需过分关心。

被混淆的概念是:一个 Lucene 索引,我们在 Elasticsearch 称作分片。一个 Elasticsearch 索引 是分片的集合。
当 Elasticsearch 在索引中搜索的时候,它发送查询到每一个属于索引的分片(Lucene 索引),然后合并每个分片的结果到一个全局的结果集。

注意:创建索引的分片默认 1 片,在 7.0.0 之前的 Elasticsearch 版本中,默认5片

副本(Replicas)

这是今天的另一个主角。

在一个网络/云的环境里,失败随时都可能发生,在某个分片/节点不知怎么的就处于离线状态,或者由于任何原因消失了,这种情况下,有一个故障转移机制是非常有用并且是强烈推荐的。为此目的,Elasticsearch 允许你创建分片的一份或多份拷贝,这些拷贝叫作复制分片(副本)。

复制分片之所以重要,有两个主要原因:

  • 在分片/节点失败的情况下,提供了高可用性。因此这个原因,注意到复制分片从不与原/主要分片置于同一节点上是非常重要的。
  • 扩展你的搜索量/吞吐量,因为搜索可以在所有的副本上并行运行。

总之,一个索引可以被复制 0 次或多次。一旦复制了,索引就有了主分片和复制分片之别。

分片和复制的数量可以在索引创建的时候指定。在索引创建之后,你可以在任何时候动态地改变复制的数量,但是不能改变分片的数量。默认情况下,Elasticsearch 中的每个索引被分片: 一个主分片和一个复制分片。查看索引可以证明如此:

结果如下:

分配(Allocation)

将分片分配给某个节点的过程,包括分配主分片或者副本分片,以及从主分片复制数据到副本分片的过程,都是由 master 节点完成的。

系统架构


一个运行中的 Elasticsearch 实例称为一个节点,而集群是由一个或者多个拥有相同 cluster.name 配置的节点组成,它们共同承担数据和负载的压力。当有节点加入集群中或者从集群中移除节点时,集群将会重新平均分布所有的数据。

当一个节点被选举为主节点时,它将负责管理集群范围内的所有变更,例如增加、删除索引,或者增加、删除节点等。而主节点并不需要涉及到文档级别的变更和搜索等 *** 作,所以当集群只拥有一个主节点的情况下,即使流量的增加它也不会称为瓶颈。任何节点都可以称为主节点。

作为用户,我们可以将请求发送到集群中的任何节点,包括主节点。每个节点都知道任意文档所处的位置,并且能够将我们的请求直接转发到存储我们所需文档的节点。无论我们将请求发送到哪个节点,它都能负责从各个包含我们所需文档的节点收集回数据,并将最终结果返回给用户。Elasticsearch 对这一切的管理都是透明的。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/742663.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-28
下一篇 2022-04-28

发表评论

登录后才能评论

评论列表(0条)

保存