Elasticsearch数据写入、检索流程及底层原理全方位解析

news2024/11/15 7:13:21

在这里插入图片描述

码到三十五 : 个人主页

心中有诗画,指尖舞代码,目光览世界,步履越千山,人间尽值得 !


目录

    • ✍🏻序言✍🏻
    • 1️⃣✍🏻es的架构简介
      • 1. 分布式架构
      • 2. 索引与搜索
      • 3. 数据写入与持久化
      • 4. 缓存与性能优化
    • 2️⃣✍🏻es的数据写入流程与原理
      • 1. 客户端请求与协调节点
      • 2. 路由与主分片处理
      • 3. 数据同步与副本分片
      • 4. 写入确认与响应
      • 5. 底层写入机制
        • 5.1. 缓冲区(Buffer)和事务日志(Translog)
        • 5.2. 刷新(Refresh)操作
        • 5.3. Flush操作
    • 3️⃣✍🏻es读取数据流程
      • 1. 客户端发送请求
      • 2. 请求到达协调节点
      • 3. 解析查询并确定目标分片
      • 4. 将请求转发给数据节点
      • 5. 在数据节点上执行查询
      • 6.聚合和排序结果
      • 7.返回结果给客户端
      • 缓存和优化策略
    • 4️⃣✍🏻总结

✍🏻序言✍🏻

在当今数据驱动的时代,能够快速、准确地存储和检索信息是企业成功的关键。Elasticsearch,作为一个分布式的、RESTful风格的搜索和分析引擎,以其强大的索引、搜索和聚合功能,成为众多企业和开发者的首选。其背后的读写流程,融合了高效的数据结构与先进的分布式系统原理,确保数据既能被可靠地存储,又能被迅速检索。

1️⃣✍🏻es的架构简介

首先,从架构的角度来看,Elasticsearch是一个分布式的搜索和分析引擎,它能够存储、搜索和分析大量数据。为了实现这些功能,Elasticsearch采用了分片和副本的机制,使得数据可以分布在多个节点上,并且具有容错性和可扩展性。简要介绍Elasticsearch的架构:

1. 分布式架构

  • 节点与集群:Elasticsearch由多个节点(Node)组成,这些节点可以组成一个集群(Cluster)。每个节点都可以处理读写请求,并且数据在集群中的节点之间进行分布和复制,以实现高可用性和扩展性。

  • 分片与副本:为了支持大规模数据,Elasticsearch将索引划分为多个分片(Shard),每个分片可以独立存储和处理数据。此外,每个分片可以有多个副本(Replica),用于提供数据冗余、故障恢复和读取负载均衡。

在这里插入图片描述

2. 索引与搜索

  • 倒排索引:Elasticsearch使用Lucene作为其底层的搜索库。Lucene构建倒排索引(Inverted Index)来加速搜索过程。倒排索引将文档中的单词映射到包含这些单词的文档列表,从而实现快速查找和检索。

  • 查询执行:当客户端发送搜索请求时,请求首先到达一个协调节点。协调节点解析查询语句,确定需要访问的分片,并将请求转发给相应的数据节点。数据节点在本地执行查询,并将结果返回给协调节点。协调节点聚合来自各个数据节点的结果,并进行排序、分页等处理,最终将结果返回给客户端。

3. 数据写入与持久化

  • 写入流程:当文档被写入Elasticsearch时,它们首先被放置在内存中的一个缓冲区中,并同时记录到事务日志(Translog)中以确保数据的持久性。随着时间的推移或达到一定的条件,缓冲区中的数据会被刷新(Refresh)到Lucene的索引中,形成新的段(Segment)。这些段是不可变的,一旦被写入就不能被修改。最终,通过flush操作将内存中的数据以及Translog中的更改持久化到磁盘上。

  • 段合并:为了优化存储和搜索性能,Lucene会定期进行段合并(Segment Merging)操作。合并过程中会将多个小的段合并成更大的段,并删除重复和已删除的文档以释放存储空间。

4. 缓存与性能优化

  • 查询缓存:Elasticsearch会对某些查询结果进行缓存以加速重复查询的响应速度。此外,还有分片请求缓存等机制用于减少不必要的计算和I/O操作。

  • 优化策略:为了提高性能,Elasticsearch还提供了多种优化策略,如使用合适的分析器(Analyzer)和查询语句、合理配置索引设置、利用聚合和过滤操作等。这些优化可以减少查询的复杂性和计算开销,提高查询速度和响应时间。

所以,Elasticsearch的架构结合了分布式处理、索引与搜索技术、数据写入与持久化机制以及缓存与性能优化策略等多个方面来实现高效、可靠的数据存储和检索功能。

2️⃣✍🏻es的数据写入流程与原理

在写入数据时,Elasticsearch遵循以下原理和步骤:

在这里插入图片描述

1. 客户端请求与协调节点

  • 客户端向Elasticsearch集群发送一个写入请求,这个请求可以发送到集群中的任何一个节点。
  • 接收到请求的节点会充当协调节点的角色。协调节点负责处理客户端的请求,并将请求路由到正确的数据节点。

2. 路由与主分片处理

  • 协调节点会根据文档的_id和索引的设置(如分片数量)来确定文档应该写入到哪个主分片。这是通过一个哈希函数和模运算来实现的,确保同一个_id的文档总是路由到同一个主分片。
  • 确定目标主分片后,协调节点将请求转发给该主分片所在的数据节点。
  • 数据节点上的主分片接收到请求后,会先将文档写入到内存中的Lucene索引结构里。这个过程包括将文档转换成倒排索引的形式,以便后续的搜索和分析。

3. 数据同步与副本分片

  • 一旦文档被写入到主分片,主分片会开始将数据同步到其对应的副本分片上。这是为了保证数据的冗余和可用性。
  • 副本分片是主分片的完整拷贝,它们可以处理搜索请求并提供数据恢复的能力。当主分片不可用时,副本分片可以被提升为新的主分片。
  • 数据同步是异步进行的,这意味着写入请求在主分片处理完毕后就可以返回给客户端,而不需要等待所有副本分片都完成同步。

4. 写入确认与响应

  • 当主分片和足够数量的副本分片(根据配置可能是全部或大多数)都成功写入了文档后,协调节点会收到这些分片的确认信息。
  • 一旦收到足够的确认信息,协调节点就会向客户端发送一个成功的响应,表示文档已经被成功写入。

5. 底层写入机制

在Elasticsearch中,底层写入机制是确保数据可靠、持久化并可以被高效搜索的关键部分:

在这里插入图片描述

5.1. 缓冲区(Buffer)和事务日志(Translog)
  • 当文档被写入Elasticsearch时,它们首先被放置在内存中的一个缓冲区中。这个缓冲区是临时的,用于快速接收并处理写入请求。
  • 同时,为了确保数据的持久性和可靠性,每一个写入操作也会被记录到事务日志(Translog)中。Translog是一个追加写入的日志文件,它记录了所有对索引的更改。这种机制类似于数据库中的写前日志(WAL)或重做日志(redo log),用于在系统崩溃后恢复数据。
5.2. 刷新(Refresh)操作
  • 随着时间的推移,缓冲区中的数据会积累到一定量,此时需要将这些数据刷新(refresh)到Lucene的索引中。刷新操作会创建一个新的Lucene段(segment),并将缓冲区中的数据写入这个段中。
  • Lucene段是不可变的,一旦被写入就不能被修改,这保证了数据的一致性和搜索的高效性。新的段会被添加到索引中,使得新写入的数据可以被搜索到。
  • 刷新操作是周期性的,可以通过配置来控制刷新的频率。频繁的刷新会提高数据的实时性,但也会增加I/O负担和CPU使用率;而较少的刷新则会减少I/O操作,但可能会降低数据的实时性。
5.3. Flush操作
  • 与刷新不同,flush操作会将内存中的数据以及Translog中的更改持久化到磁盘上。这意味着数据被真正写入到了物理存储中,而不仅仅是保存在操作系统的文件系统缓存中。
  • Flush操作会调用操作系统的fsync函数来确保数据被写入磁盘,并且会清空相关的缓存和文件(如Translog)。这样做可以释放内存空间,并为后续的写入操作做好准备。
  • Flush操作的频率通常比刷新操作要低得多,因为它涉及到磁盘I/O操作,相对较慢。但是,在Elasticsearch中,flush操作是自动管理的,会根据索引的大小、写入速率和磁盘I/O能力等因素来动态调整。

通过这个底层写入机制,Elasticsearch能够在保证数据可靠性的同时提供高效的搜索和分析功能。缓冲区、事务日志、刷新和flush操作共同协作,确保数据被正确、快速地写入到索引中,并可以被用户查询到。

基于以上这些原理和步骤,Elasticsearch能够实现高效、可靠和可扩展的数据写入功能。

3️⃣✍🏻es读取数据流程

下面来解释Elasticsearch读取数据的流程,包括其中的关键步骤和涉及的组件。

在这里插入图片描述

1. 客户端发送请求

  • 当用户想要从Elasticsearch中检索数据时,他们会通过Elasticsearch的客户端API发送一个搜索请求。这个请求包含了查询的详细信息,如要搜索的索引、查询类型(如匹配查询、范围查询等)、过滤条件等。

2. 请求到达协调节点

  • 请求首先到达Elasticsearch集群中的一个节点,这个节点被称为协调节点(Coordinating Node)。协调节点负责接收客户端的请求,处理请求的路由逻辑,并与数据节点(Data Node)进行通信以获取实际的数据。

3. 解析查询并确定目标分片

  • 协调节点接收到请求后,会解析查询语句,并根据索引的映射(Mapping)和设置(Settings)信息来确定需要查询哪些分片(Shard)。Elasticsearch中的每个索引都被分割成多个分片,并且这些分片可以分布在集群的多个节点上以提高可扩展性和性能。

4. 将请求转发给数据节点

  • 协调节点根据分片的位置信息将查询请求转发给包含目标分片的数据节点。每个数据节点上都存储着一部分索引的数据,并负责处理与这些数据相关的查询请求。

5. 在数据节点上执行查询

  • 数据节点接收到查询请求后,会使用Lucene库来执行实际的搜索操作。Lucene是一个高性能、全功能的文本搜索引擎库,它提供了强大的索引和搜索功能。数据节点会根据查询条件在Lucene索引中检索匹配的文档,并生成一个结果集。

6.聚合和排序结果

  • 数据节点将查询结果返回给协调节点。如果查询涉及多个分片,协调节点需要聚合来自不同分片的结果,并根据需要对结果进行排序、分页等处理。这个过程可能需要消耗一定的计算资源,特别是当结果集很大时。

7.返回结果给客户端

  • 一旦结果准备好,协调节点会将它们封装成一个统一的响应格式,并返回给客户端。响应中包含了查询的结果、匹配的文档数量、聚合数据(如果有的话)等信息。客户端可以解析这个响应来获取所需的数据。

缓存和优化策略

  • 查询缓存:Elasticsearch会对某些查询结果进行缓存,以便快速响应相同的查询请求。这可以减少对Lucene索引的重复访问,提高查询性能。然而,由于缓存空间有限,只有部分查询结果会被缓存。

  • 分片请求缓存:数据节点上的分片请求缓存可以存储查询请求的结果。当相同的查询再次到达时,可以直接从缓存中获取结果,而无需再次访问Lucene索引。这有助于减少对磁盘I/O的依赖,提高查询速度。

  • 优化查询语句:为了提高查询性能,用户应该编写高效的查询语句。避免使用高开销的查询操作(如通配符查询、正则表达式查询等),合理使用过滤器和聚合操作,以及优化索引结构都可以帮助提高查询速度。

基于这些详细的步骤和优化策略,Elasticsearch能够高效地处理读取数据的请求,并提供快速、准确的结果给用户。

4️⃣✍🏻总结

Elasticsearch的读写流程是一个精心设计的、分布式的处理过程。在写入数据时,它通过缓冲区、事务日志、刷新和flush操作等机制,确保了数据的可靠性与持久性。
同时,借助Lucene的强大索引能力,将文档快速转换成可被搜索的形式。在读取数据时,Elasticsearch利用协调节点将请求路由到正确的数据节点,利用Lucene进行高效检索,并聚合、排序结果,最终返回给客户端。这一流程结合了缓存、优化查询语句和分布式处理等技术,确保了查询的高性能与低延迟。通过这些设计,Elasticsearch为企业和开发者提供了强大而灵活的数据存储与检索解决方案。

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

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

相关文章

酷开科技以内容技术服务和数字营销服务为核心,自主研发酷开系统

家庭场景的需求,才是大屏电视的目的。屏幕越大得到的画幕越大,消费者也就看的越清楚,从而获得更好的观看体验,尤其是家里有老人孩子的,为了得到更好的视觉效果,使得消费者对于大屏的需求也在增加。酷开系统…

动脉自旋标记(ASL):临床应用及解读

导读 动脉自旋标记(Arterial spin labeling,ASL)是一种磁共振灌注成像技术,可以在不使用静脉钆造影剂的情况下量化脑血流量(CBF)。了解ASL的技术基础和灌注的生理变化对于识别正常变异和伪影很重要。灌注的病理变化见于多种疾病,包括急慢性缺…

【漏洞复现】云时空ERP Public接口处RCE漏洞

免责声明:文章来源互联网收集整理,请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该…

Altman专访自曝全新GPT-5细节:性能跃升超想象,算力足可达AGI!

😀前言 在人工智能领域,OpenAI的最新一代模型GPT-5备受期待。其性能提升被认为将创造历史,并有潜力成为推动文明发展的核心动力。Altman作为OpenAI的领导人之一,在一系列访谈中透露了关于GPT-5和人工智能未来的深刻见解&#xff0…

低代码无法取代程序员,但为什么很多程序员却反感低代码?

引言 在当今快节奏的软件开发领域,低代码开发平台正日益受到关注并广泛应用。低代码开发通过可视化建模和自动化工具,使得非专业开发者和业务人员能够更快速地创建应用程序,从而大大加快了软件交付的速度。这种新兴的开发方式已经在许多行业…

Linux下QT界面小程序开发

背景:需要在linux不同环境下可以测试我们的读卡器设备 搭建本地linux开发环境(本来想VS里开发然后通过SSH的方式在linux下编译,但是工具链一直没搞起来,所以我是在ubuntu里安装的QT Creator工具直接开发的)&#xff1b…

基于Java中的SSM框架实现高校毕业设计管理系统项目【项目源码+论文说明】

基于Java中的SSM框架实现高校毕业设计管理系统演示 摘要 现代学校的教学规模逐渐增加,需要处理的信息量也在增加。每年毕业,将会有大量的毕业设计要处理。传统的毕业设计管理方法已不能满足师生的需求。教师和学生需要一个简单方便的系统来取代传统的机…

WebGIS管线在线编辑器(电力、水力、燃气、热力、热能管线)

随着GIS等信息技术的发展,地下管线管理也从二维平面向三维立体管理迈进。传统管线信息管理系统将管线及其附属设施抽象成二维平面内的点、要素,并使用各类点符号、不同颜色线段进行表达。虽能一定程度上满足城市智慧运行的需要,但不能很直观的…

FMEA助力新能源汽车行业腾飞:安全、效率双提升

随着新能源汽车市场的迅猛发展,各大车企纷纷加大研发力度,力求在激烈的市场竞争中脱颖而出。其中,FMEA(故障模式与影响分析)作为一种先进的质量管理工具,正被越来越多地应用于新能源汽车的研发和生产过程中…

【Django框架学习笔记】超详细的Python后端开发Django框架学习笔记

十二,Django框架 可以以下链接获取Django框架学习笔记,md文档和pdf文档 Django框架超详细的学习笔记,点击我获取 12.1 命令行操作 # 创建django项目 django-admin startproject aini# 启动项目 cd /mysite python3 manage.py runserver## 创建应用 …

深度学习-2.8模型拟合概念和欠拟合模型、过拟合调整策略

模型拟合概念和欠拟合模型、过拟合调整策略 文章目录 模型拟合概念和欠拟合模型、过拟合调整策略一、模型拟合度概念介绍1.测试集的“不可知悖论”2.模型拟合度概念与实验 二、过拟合、欠拟合问题解决方案1. 欠拟合解决方案2.过拟合解决方案 三、神经网络结果选择策略1. 参数和…

mybatis plus 修改sql

原始需求 在SQL语句前面加上一个request-id 问题描述 今天收到业务同学反馈,说接入某个SDK后,request-id本地debug发现sql已经修改了,但打印的sql中却没有request-id信息 看了下代码,发现用户的代码其实就是下方 方案一代码&am…

【机器学习】机器学习实验方法与原则(评价指标全面解析)

评价指标 在 不同任务 下衡量模型的性能,有 不同的评价指标 ,例如: • 回归任务 • 平均绝对误差( MAE )、均方误差( MSE )、均方根误差( RMSE )等 • 分类任务 •…

QT学习之设置QLineEdit背景透明且无边框

设置styleSheet:background:transparent;border-width:0;border-style:outset;

挑战迎刃而解!化工行业CRM案例揭示企业扩张成功之道!

化工行业一直面临着激烈的行业竞争,新时代化工企业如何面对扩张挑战,是许多企业管理者深思的问题,Zoho CRM客户管理系统为化工行业的用户提供了优秀的解决方案。一起来看看Zoho CRM的实力如何吧~ 一、客户背景 Zoho CRM的这家化工行业客户&a…

绝地求生:哪把枪的机瞄让你觉得最舒服或者最“抽象”呢?

大,好,我,闲游盒! 这题我会,我先来! 今天本来在训练场玩呢,突然想到了Famas这把枪的机瞄我真的是驾驭不来.... 我灵机一动,想问问大家平时如果落地没捡到镜又碰到敌人的情况下&…

【创建进程】fork函数与写时拷贝

文章目录 fork函数fork如何返回两个值&#xff08;fork的工作原理&#xff09;如何解释父子进程相互输出printf 写时拷贝 fork函数 #include <unistd.h> pid_t fork(void); 返回值&#xff1a;自进程中返回0&#xff0c;父进程返回子进程id&#xff0c;出错返回-1 fork函…

网络编程:学生管理系统

一、实现功能 1.添加学生信息 2.删除学生信息 3.修改学生信息 4.查找学生信息 二、添加 int do_add(sqlite3 *ppDb) {// 准备sql语句int add_num 0;char add_name[20] "";double add_score 0;// 提示并输入数据printf("请输入学号:");scanf("%d&q…

芯片公司SAP管理架构:科技与管理的完美融合

在当今日新月异的科技时代&#xff0c;芯片公司作为信息技术领域的核心力量&#xff0c;其运营管理的复杂性日益凸显。SAP管理架构作为一种高效的企业资源规划系统&#xff0c;为芯片公司提供了强大的管理支持。本文将为您科普芯片公司SAP管理架构的相关知识。 SAP管理架构是一…

使用倒模耳机壳UV树脂胶液制作舞台监听耳返入耳式耳机壳有哪些优点?

使用倒模耳机壳UV树脂胶液制作舞台监听耳返入耳式耳机壳有很多优点&#xff0c;具体如下&#xff1a; 高音质表现&#xff1a;通过倒模工艺制作的耳机壳能够更好地贴合耳朵&#xff0c;减少声音散射和反射&#xff0c;提高声音的清晰度和质感。这对于舞台监听来说非常重要&…