【面试题】ES文档写入和读取流程详解

在这里插入图片描述

前言:在回答这个问题之前我们先要搞清楚一个问题那就是什么是文档,避免不知所云!
在这里插入图片描述

一、什么是文档?

在Elasticsearch中,文档(Document)是最基本的信息单元,用于表示和存储数据。文档是以JSON格式表示的结构化数据对象,类似于关系型数据库中的行。

补充:在Elasticsearch中,文档由以下几个关键部分组成:
索引(Index):文档必须属于一个索引,索引是用于组织和存储文档的逻辑容器。索引是Elasticsearch中数据的顶层概念,它类似于关系型数据库中的数据库。
类型(Type):在较早的版本中,文档可以在索引中定义不同的类型。但是从Elasticsearch 7.0版本开始,类型的概念已经被弃用,一个索引只能包含一个文档类型。文档类型主要用于逻辑上对文档进行分类。
ID:每个文档都有一个唯一标识符,称为文档ID。文档ID可以由用户指定,也可以由Elasticsearch自动生成。通过文档ID,可以唯一标识和检索特定的文档。
字段(Fields):文档包含多个字段,字段是文档中存储的实际数据。字段可以是不同的数据类型,如文本、数字、日期等。每个字段在文档中都有一个名称和对应的值。
映射(Mapping):映射定义了索引中文档的字段及其类型和属性。它类似于关系型数据库中的表结构。映射规定了字段的数据类型、分析器、索引选项等,以及字段是否可搜索、可排序等属性。

在这里插入图片描述

二、 ES文档写入流程

在这里插入图片描述

1.单个文档写入流程

先看图:
在这里插入图片描述

解释: 这个是一个ES的集群架构图,node1是主节点,其他为从节点。
P0、P1代表索引的分片
R0、R1代表副本

写单个文档的流程:

  1. 客户端向 Node 1 发送写入请求。

  2. 节点使用文档的 _id 确定文档属于分片 0 。请求会被转发到 Node 3,因为分片 0 的主分片目前被分配在 Node 3 上。

  3. Node 3 在主分片上面执行请求。如果成功了,它将请求并行转发到 Node 1 和 Node 2 的副本分片上。一旦所有的副本分片都报告成功, Node 3 将向协调节点报告成功,协调节点向客户端报告成功。

写多个文档的流程
继续看图:
在这里插入图片描述

  1. 客户端向 Node 1 发送 bulk 请求。
  2. Node 1 为每个节点创建一个批量请求,并将这些请求并行转发到每个包含主分片的节点主机。
  3. 主分片一个接一个按顺序执行每个操作。当每个操作成功时,主分片并行转发新文档(或删除)到副本分片,然后执行下一个操作。 一旦所有的副本分片报告所有操作成功,该节点将向协调节点报告成功,协调节点将这些响应收集整理并返回给客户端

总结:删除文档也是一样的流程,同时还可以得出一个结论,写入和删除请求只能由主节点接受。

在这里插入图片描述

三、文档的查询流程

在这里插入图片描述


在这里插入图片描述

查询单个文档时,可以按照以下步骤进行:

  1. 客户端发送请求:客户端向任意一个节点(coordinate node)发送获取文档的请求。

  2. 路由到对应的分片:coordinate node根据文档的唯一ID(doc id)进行哈希计算,确定该文档所属的分片(primary shard)。根据分片路由表,coordinate node将请求转发到包含该分片的节点上。

  3. 从分片中获取文档:接收请求的节点从对应的分片中获取文档数据。

  4. 返回文档数据:节点将获取到的文档数据返回给coordinate node。

  5. coordinate node返回给客户端:coordinate node将文档数据返回给客户端。

在文档查询中,Elasticsearch使用哈希路由来确定文档所属的分片,并使用轮询算法在主分片和其所有副本之间进行负载均衡。这样做可以分散读取请求的负载,提高系统的读取性能和可扩展性。


在这里插入图片描述

在Elasticsearch中进行数据搜索的过程如下:

  1. 客户端发送搜索请求:客户端向任意一个节点(coordinate node)发送搜索请求,指定搜索条件和相关参数。

  2. 路由到对应的分片:coordinate node将搜索请求转发到所有包含相关索引的分片(primary shard或replica shard)上。每个分片都会独立进行搜索操作。

  3. 查询阶段(query phase):每个分片在接收到搜索请求后,根据指定的搜索条件在本地执行搜索操作,并返回与搜索条件匹配的文档的相关信息(如文档ID)给coordinate node。

  4. 数据合并、排序和分页(query phase):coordinate node收集来自所有分片的搜索结果,并在此阶段进行数据的合并、排序和分页操作。它将根据相关参数(如排序规则、分页偏移量和大小)对搜索结果进行处理,以生成最终的结果集。

  5. 获取阶段(fetch phase):coordinate node根据最终的结果集中的文档ID,向各个包含匹配文档的节点发送获取文档的请求。

  6. 返回搜索结果:各个节点根据文档ID从本地分片中获取相应的文档数据,并将数据返回给coordinate node。

  7. coordinate node返回给客户端:coordinate node将最终的搜索结果集(包含匹配的文档数据)返回给客户端。


在这里插入图片描述

  • 19
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值