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

news2024/12/25 2:31:55

在这里插入图片描述

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

一、什么是文档?

在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.coloradmin.cn/o/1547385.html

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

相关文章

[CSS]中块级格式化上下文(BFC)

块级格式化上下文 (BFC) 1. 什么是BFC BFC(Block Formatting Context)是一个独立的渲染区域,在这个区域内的布局不会影响到这个区域之外的元素。换句话说,它就像一个隔离的空间,里面的元素布局…

Django(二)-搭建第一个应用(1)

一、项目环境和结构 1、项目环境 2、项目结构 二、编写项目 1、创建模型 代码示例: import datetimefrom django.db import models from django.utils import timezone# Create your models here.class Question(models.Model):question_text models.CharField(max_length2…

Jmeter脚本优化——随机函数

线程组下有 2 个请求的参数中均使用到相同的参数,在进行参数化时,想 要每个请求使用不同的取值。 ( 1 ) 线程组设置如下 ( 2 ) 线程组下添加加购物车请求,请求传参包含商品 id (…

app自动化-Appium学习笔记

使用Appium,优点: 1、支持语言比较多,例如:Java、Python、Javascript、PHP、C#等语言 2、支持跨应用(windows、mac、linux) 3、适用平台Android、iOS 4、支持Native App(原生app)、Web App、Hybird App…

Go语言学习Day2:注释与变量

名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪) 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 1、注释①为什么要写注释?②单行注释…

Android卡顿掉帧问题分析之工具篇

“工欲善其事,必先利其器”,在开始着手分析卡顿问题之前,我们还必须要掌握一些分析性能问题的工具与手段,也就是掌握分析问题所使用的“器”,才能帮助我们更好的观测系统运行的状态,找到性能问题的原因。Sy…

AI助力智慧农田作物病虫害监测,基于YOLOv5全系列【n/s/m/l/x】参数模型开发构建花田作物种植场景下棉花作物常见病虫害检测识别系统

智慧农业是一个很大的应用市场,将当下如火如荼的AI模型技术与现实的农业生产场景相结合能够有效提升生产效率,农作物在整个种植周期中有很多工作需要进行,如:浇水、施肥、除草除虫等等,本文的主要目的是想要以棉花作物…

基于SpringBoot和Vue的车辆管理系统的设计与实现

今天要和大家聊的是一款基于SpringBoot和Vue的车辆管理系统的设计与实现 !!! 有需要的小伙伴可以通过文章末尾名片咨询我哦!!! 💕💕作者:李同学 💕&#x1f…

吴恩达深度学习笔记:浅层神经网络(Shallow neural networks)3.6-3.8

目录 第一门课:神经网络和深度学习 (Neural Networks and Deep Learning)第三周:浅层神经网络(Shallow neural networks)3.6 激活函数(Activation functions)3.7 为什么需要非线性激活函数?(why need a non…

Databend 开源周报第 137 期

Databend 是一款现代云数仓。专为弹性和高效设计,为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务:https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展,遇到更贴近你心意的 Databend 。 支持查询匹配倒…

区块链安全之DDoS防护的重要性及其实施策略

随着区块链技术的不断发展和广泛应用,其安全问题也日益凸显。其中,分布式拒绝服务(DDoS)攻击是对区块链网络稳定性和效率构成潜在威胁的重要因素之一。本文旨在深入探讨区块链为何需要采取DDoS高防措施,并提出相应的防护策略。 一、区块链面…

Spark RDD、DataFrame和DataSet的区别

Spark RDD、DataFrame和DataSet的区别 在比较这三者的区别之前,先看看他们各自的定义是什么。 Spark RDD RDD是一种弹性分布式数据集,是一种只读分区数据。它是spark的基础数据结构,具有内存计算能力、数据容错性以及数据不可修改特性。 S…

教程3_图像的轮廓

目录 目标 1. 特征矩 2、轮廓质心 3. 轮廓面积 4. 轮廓周长 5. 轮廓近似 6. 轮廓凸包 7. 边界矩形 7.1.直角矩形 7.2. 旋转矩形 8. 最小闭合圈 9. 拟合一个椭圆 10. 拟合直线 目标 在本文中,我们将学习 - 如何找到轮廓的不同特征,例如面积&…

API网关-Apisix路由配置教程(数据编辑器方式)

文章目录 前言一、端口修改1. apisix 端口修改2. dashboard 端口修改3. 登录密码修改 二、常用插件介绍1. 常用转换插件1.1 proxy-rewrite插件1.1.1 属性字段1.1.2 配置示例 2. 常用认证插件2.1 key-auth插件2.1.1 消费者端字段2.1.2 路由端字段2.1.3 配置示例 2.2 basic-auth插…

工作多年,如何从 CRUD Boy 转型为分布式系统架构师?解锁分布式系统的艺术:从零开始理解分布式系统架构与设计原理!...

编程是一门艺术,它的魅力在于创造。 65 哥已经工作5年了,一直做着简单重复的编程工作,活活熬成了一个只会 CRUD 的打工 boy。 65 哥:总是听大佬讲分布式分布式,什么才是分布式系统呢? 分布式系统是一个硬件…

PyCharm Pro 2023 for Mac/Win:打造极致Python开发体验

在数字化浪潮席卷全球的今天,Python已成为众多开发者手中的利器。无论是数据分析、机器学习还是Web开发,Python都以其简洁易懂的语法和强大的功能库赢得了广泛好评。而在这个高效编程的时代,一款出色的Python开发工具,无疑能让开发…

基于word2vec+LSTM模型实现百度贴吧恶意评论预测

大家好,我是带我去滑雪! Word2Vec模型能够将词语映射到高维空间中的向量表示,同时保留了词语之间的语义信息和上下文关系。这使得模型能够更好地理解评论中的语境和含义。LSTM模型是一种适用于处理序列数据的深度学习模型,能够有效…

鸡兔同笼问题:利用Scratch C/C++ Python解决

文章目录: 一:问题 二:解决办法 1.通过Scratch解决 2.通过C/C解决 3.通过Python解决 一:问题 该问题大约在1500年前的《孙子算经》中就有记载:“今有雉兔同笼,上有三十五头,下有九十四足&…

【数字图像处理】改变图像灰度级别

改变图像灰度级别 首先,对原始图像 O O O进行灰度级量化: q int ⁡ ( O 2 i ) 2 i , q\operatorname{int}\left(\frac{O}{2^{i}}\right) \times 2^{i}, qint(2iO​)2i, 灰度级别256,128,64,32,16,8&…

百度蜘蛛池,权重蜘蛛池,泛站蜘蛛池,shell蜘蛛池-权重蜘蛛池

蜘蛛池的作用及其类型 蜘蛛池的主要作用是加速搜索引擎蜘蛛对网站链接的爬取,从而实现快速收录。使用权重蜘蛛池可以提高搜索引擎蜘蛛对网站链接的权重评价,实现秒收效果和发布外链的目的。常见的蜘蛛池有百度蜘蛛池、搜狗蜘蛛池和谷歌蜘蛛池等。 本文…