【面试题】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将最终的搜索结果集(包含匹配的文档数据)返回给客户端。


在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/771869.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android 系统应用 pk8签名文件转jks或keystore教程

一、介绍 签名文件对于我们在做应用开发中,经常遇到,且签名文件不仅仅是保护应用安全,还会涉及到应用与底层之间的数据共享和API文件等问题。 在Android中,签名文件同样也存在这个问题。但是android中又区分系统应用和普通应用。系…

C语言 青蛙跳台阶问题

目录 ​编辑 1.问题描述 2.问题分析 3.全部代码 4.结语 1.问题描述 一只青蛙可以一次跳一级台阶,也可以一次跳两级台阶,如果青蛙要跳上n级台阶有多少种跳法? 2.问题分析 当台阶只有一级时,只能跳一级,所以只有一…

用 C++ 编码架构图的最佳用例

统一建模语言(UML),作为一种实际应用的语言标准,借助一系列架构图呈现建模软件系统。UML 的出现鼓励了自动化软件工具的开发,有助于自动代码生成。UML 图面向对象系统和软件工具,将静态结构和动态行为以可视…

注册、配置中心-微服务小白入门(2)

Nacos 已经下载安装并且使用了,那么看如何使用: Nacos 注册及配置,以下是一个服务启动后注册到nacos,同时,把该服务的相关配置,写到nacos之中 1、nacos设置 命名空间中,添加对应的服务命名空间…

Jenkins中支持maven构建遇到仓库报错问题

目的 Jenkins中支持maven构建(Jenkins使用docker安装) 问题 1.构建一个maven项目 2.执行报错 /var/lib/jenkins/local_maven_repo/com/sx/root/1.0.4/root-1.0.4.pom.part.lock (No such file or directory) Failed to transfer Could not transfer artifact co…

【Flask】Flask项目部署上线

Flask 项目部署上线 1.Gunicorn Gunicorn 是一个纯 Python WSGI 服务器,配置简单,多工作者实现,方便 性能调优。 它倾向于与主机平台轻松集成。 它不支持 Windows (但可以在 WSL 上运行)。 它很容易安装&#xff0…

论文阅读之PeriodicLoRA: Breaking the Low-Rank Bottleneck in LoRA Optimization(2024)

文章目录 论文地址主要内容主要贡献模型图技术细节实验结果 论文地址 PeriodicLoRA: Breaking the Low-Rank Bottleneck in LoRA Optimization 主要内容 这篇文章的主要内容是介绍了一种名为PeriodicLoRA(PLoRA)的参数高效微调(Parameter-…

TypeScript在学习(0)

1.什么是TypeScript? 答:TypeScript 是一种由微软开发的自由和开源的编程语言。它是 JavaScript 的一个超集,而且本质上向这个语言添加了可选的静态类型和基于类的面向对象编程。 个人浅见,我一直把ts简单理解成,其实就是javascript上多了…

DY-36电压继电器 额定电压100V 整定范围40-160V 板前带座 JOSEF约瑟

系列型号: DY-32电压继电器; DY-36电压继电器; DY-33电压继电器; DY-37电压继电器; DY-34电压继电器; DY-38电压继电器; DY-31电压继电器; DY-35电压继电器; DY-32/60C电…

YOLO算法改进Backbone系列之:Conformer

CNN难以捕捉全局表征,这通常对高级计算机视觉任务至关重要。一个直观的解决方案是扩大感受野,但这可能需要更密集但具有破坏性的池化操作。由于自注意力机制和多层感知器(MLP)结构,transformer反映了复杂的空间变换和长…

Vue3 + vite + Ts 组件间通信

Vue3 vite Ts 组件间通信 1、props2、自定义事件3、mitt4、$attrs 1、props 概述:props 是使用频率最高的一种通信方式,常用与:父 和 子 互相传递 若 父传子 :属性值是非函数。若 子传父 :属性值是函数。 简单例子&…

网红电商主播培养体系招聘管理制度孵化方案

【干货资料持续更新,以防走丢】 网红电商主播培养体系招聘管理制度孵化方案 部分资料预览 资料部分是网络整理,仅供学习参考。 共120页可编辑(完整资料包含以下内容) 目录 主播团队组建方案 让好主播主动留下 1. 好主播选拔标准…

【Flink】Flink 处理函数之基本处理函数(一)

1. 处理函数介绍 流处理API,无论是基本的转换、聚合、还是复杂的窗口操作,都是基于DataStream进行转换的,所以统称为DataStreamAPI,这是Flink编程的核心。 但其实Flink为了更强大的表现力和易用性,Flink本身提供了多…

学习SpringBoot笔记--知识点(2)

目录 数据访问 基础特性 自定义banner Profiles Profiles组件 Profiles配置文件 外部化配置 单元测试 数据访问 整合SSM场景 SpringBoot 整合 Spring&#xff0c;SpringMVC&#xff0c;MyBatis 进行数据访问场景开发 需要的依赖&#xff1a; <!-- web启动…

如何从其他平台复制商品上传到自己店铺?官方授权接口,一键复制爆款同款

很多做一件代发的卖家在上新时会从其他平台选品铺货&#xff0c;看到某个商品卖得不错&#xff0c;直接复制到自己店铺去卖&#xff0c;可以节省测款成本。 现在平台严查无货源&#xff0c;直接从别人店铺搬运商品属于违规违规行为&#xff0c;想要复制这个爆款的话&#xff0…

鸿蒙HarmonyOS应用开发—AbilityStage组件容器

AbilityStage是一个Module级别的组件容器&#xff0c;应用的HAP在首次加载时会创建一个AbilityStage实例&#xff0c;可以对该Module进行初始化等操作。 AbilityStage与Module一一对应&#xff0c;即一个Module拥有一个AbilityStage。 DevEco Studio默认工程中未自动生成Abil…

ArcGIS二次开发(一)——搭建开发环境以及第一个简单的ArcGIS Engine 程序

Arcgis10.2、Arcgis Engine10.2与Microsoft Visual Studio 2012的版本进行安装 1、推荐教程与安装包2、安装顺序3、安装成功测试VS新建项目可以创建ArcGIS项目&#xff0c;并且在VS中拖拽ArcGIS工具 4、搭建第一个简单的ArcGIS Engine 程序 ArcEngine和VS版本是有对应的&#x…

【Python】enumerate函数的使用方法,小白一看就懂

enumerate函数的使用方法&#xff1a; season[‘a’,‘b’,‘c’,‘d’] for i in enumerate(season): print(i) season[‘a’,‘b’,‘c’,‘d’] for i,eliment in enumerate(season): print(i,eliment) 输出结果为&#xff1a; 练习题&#xff1a; 2.给出10个学生姓名…

从0到1:校园生活圈小程序开发笔记(一)

可行性研究 校园生活圈小程序是一种面向大学或学院校园的社交平台&#xff0c;旨在为校园内的师生提供交流、分享、互助和信息发布等功能。 为校园内的师生提供一个便捷的平台&#xff0c;帮助他们更好地了解校园生活、参与校园活动、交流学习和共享资源。 功能分解 公告资讯…

力扣HOT100 - 42. 接雨水

解题思路&#xff1a; 动态规划 感觉不是很好想 class Solution {public int trap(int[] height) {int n height.length;if (n 0) return 0;int[] leftMax new int[n];leftMax[0] height[0];for (int i 1; i < n; i) {leftMax[i] Math.max(leftMax[i - 1], height[i…