当前位置: 首页 > news >正文

分布式全文检索引擎ElasticSearch-数据的写入存储底层原理

一、数据写入的核心流程

当向 ES 索引写入数据时,整体流程如下:

1、客户端发送写入请求

客户端向 ES 集群的任意节点(称为协调节点,Coordinating Node)发送一个写入请求,比如 index(插入或更新)或 delete(删除)请求。

2、协调节点处理请求

  • 协调节点接收到请求后,确定数据应该存储在哪个索引和分片上。
  • 通过路由计算确定目标分片,默认的路由规则是通过文档的 _id 取哈希值,再对分片数取模来定位分片。
shard = hash(_id) % number_of_primary_shards

3、请求转发给主分片

协调节点将请求转发给对应的 主分片(Primary Shard)所在的节点,主分片负责执行写入操作。

4、主分片写入阶段

主分片接收到写入请求后,执行以下操作:

  • 写入内存缓冲区(Buffer):首先将数据写入到内存中的写入缓冲区,这是一块内存区域,用于快速接收新数据。
  • 写入事务日志(Translog):同时,将数据写入事务日志(Translog)。Translog 是一个顺序写入的日志文件,用于在节点宕机时进行数据恢复,确保数据不会丢失。

5、数据刷新到段(Segment)

  • 定期刷新(Flush):每隔一定时间(默认是 1 秒)或当缓冲区达到一定大小时,ES 会将内存缓冲区中的数据刷新到段(Segment)中。段是倒排索引的基本存储单元。
  • 生成新的段文件:数据被写入段后,段文件会被写入磁盘,段文件一旦生成便是不可更改的(只读的)。
  • 清空缓冲区:刷新后,内存缓冲区被清空,但 Translog 依然保留,直到执行 flush 操作。

6、同步到副本分片

  • 主分片写入成功后,将请求转发给对应的 副本分片(Replica Shard) 所在的节点。
  • 副本分片执行与主分片相同的写入操作,确保主副本数据一致。
  • 当所有副本分片写入成功后,主分片向协调节点返回写入成功的确认。

7、返回写入结果给客户端

协调节点收到主分片和副本分片的成功确认后,向客户端返回写入成功的响应。

二、核心组件介绍

1、内存缓冲区(Buffer)

  • 作用:用于临时存储写入的数据,提高写入性能。
  • 刷新机制:每隔一段时间(默认 1 秒)或当缓冲区满时,数据会被刷新到段(Segment)。

2、事务日志(Translog)

  • 作用:用于记录所有未持久化到段的数据,防止数据丢失。
  • 持久化:写入操作在返回成功之前,必须确保数据被写入 Translog。
  • Flush 操作:定期将数据从缓冲区刷新到段,并清空 Translog,生成新的空的 Translog。

3、段(Segment)

下一节将详细讲

4、主分片与副本分片

  • 主分片(Primary Shard):负责处理写入和查询请求。
  • 副本分片(Replica Shard):主分片的冗余副本,用于提高数据可用性和查询性能。
  • 一致性:写入时,主分片和副本分片保持数据一致,确保容错能力。

三、段的深度剖析

什么是段

段(Segment) 是倒排索引的基本存储单元。每当数据被写入或更新时,ES 并不会立即将其合并到现有的数据结构中,而是将数据写入新的段。段存储在磁盘上,并以不可变的形式存在。这种设计有助于提升写入和查询的性能,同时简化了数据管理。

段 是一种包含索引数据的小型文件集合,每个段都包含:

  • 倒排索引(Inverted Index):用于快速搜索文档的内容。
  • 文档元数据(如 _id、分数等)。
  • 存储字段(Stored Fields):用于存储完整的文档内容或字段值。
  • 删除标记(Deletion Markers):标记哪些文档被逻辑删除。

什么时候生成段?

当 ES 将数据从内存缓冲区刷新(Refresh)到磁盘时,就会创建新的段。这些段会持续累积,直到 ES 触发合并(Merge)操作,将多个小段合并成更大的段。

为什么使用段

  • 高效写入

    • ES 将数据先写入内存缓冲区,然后批量刷新到新的段,而不是直接修改现有的段。
    • 这种批量写入减少了频繁的磁盘操作,提高了写入性能。
  • 并发查询与写入

    • 由于段是只读的,多个查询可以并发访问这些段,而不会影响写入操作。
    • 新数据写入时,不会影响正在查询的旧段,保证了数据的可用性。
  • 快速删除与更新

    • ES 的删除和更新操作不直接修改段内的数据,而是通过逻辑标记(标记文档为删除)来实现。
    • 这种方式避免了频繁的磁盘重写操作,提高了性能。
  • 增量合并

    • ES 通过定期将多个小段合并成大段,减少段的数量,优化查询性能。
    • 合并过程是在后台异步进行的,不影响前台查询和写入。

为什么段是不可变的

  • 简化并发控制

    • 因为段是不可变的,多个查询可以安全地并发读取相同的段,而无需担心数据被修改或锁定。
    • 不需要复杂的并发控制机制,简化了系统设计。
  • 提高查询性能

    • 由于段不变,ES 可以预先构建和优化倒排索引,确保查询时能够快速检索数据。
    • 不可变的段使得查询操作可以直接访问磁盘数据,无需等待写入操作完成。
  • 高效的删除和更新

    • 删除和更新不会直接修改段内的数据,而是通过生成新的段和标记旧段来完成。
    • 这种方式避免了频繁的随机写入,提高了磁盘写入性能。
  • 崩溃恢复与数据安全

    • 不可变的段一旦写入磁盘,就不会被更改。这意味着即使 ES 崩溃,已写入的段不会丢失或损坏。
    • 恢复时,只需要重新应用事务日志(Translog)中尚未刷新的数据。

四、为什么说ES的检索是近实时的

如果ES像MySQL一样,等到数据真正落盘完毕,才返回写入成功,这叫直接写入方式,这能达到实时搜索。但是这会有什么样的问题呢?

直接写入存在的问题

提交一个新的段到磁盘需要 fsync操作,确保段被物理地写入磁盘,即时电源失效也不会丢失数据。

但是 fsync 是昂贵的,严重影响性能,当写数据量大的时候会造成ES 停顿卡死,查询也无法做到快速响应新文档在几分钟之内即可被检索,并且这样还是不够快,磁盘在这里成为了瓶颈。

延时写策略

所以 fsync不能在每个文档被索引的时就触发,需要一种更轻量级的方式使新的文档可以被搜索,所以为了提升写的性能,ES没有每新增一条数据就增加一个段到磁盘上而是采用延时写的策略。

具体做法如下:

每当有新增的数据时,就将其先写入到内存中

在内存和磁盘之间是文件系统缓存,当达到默认的时间(1秒钟)或者内存的数据达到一定量时,会触发一次刷新(Refresh),将内存中的数据生成到一个新的段上并缓存到文件缓存系统上,稍后再被刷新到磁盘中并生成提交点。

相关文章:

分布式全文检索引擎ElasticSearch-数据的写入存储底层原理

一、数据写入的核心流程 当向 ES 索引写入数据时,整体流程如下: 1、客户端发送写入请求 客户端向 ES 集群的任意节点(称为协调节点,Coordinating Node)发送一个写入请求,比如 index(插入或更…...

react中实现导出excel文件

react中实现导出excel文件 一、安装依赖二、实现导出功能三、自定义列标题四、设置列宽度五、样式优化1、安装扩展库2、设置样式3、扩展样式功能 在 React 项目中实现点击按钮后导出数据为 Excel 文件,可以使用 xlsx 和 file-saver 这两个库。 一、安装依赖 在项目…...

有监督学习 vs 无监督学习:机器学习的两大支柱

有监督学习 vs 无监督学习:机器学习的两大支柱 有监督学习 vs 无监督学习:机器学习的两大支柱一、有无“老师”来指导二、解决的问题类型不同三、模型的输出不同 有监督学习 vs 无监督学习:机器学习的两大支柱 在机器学习的奇妙世界里&#…...

c4d动画怎么导出mp4视频,c4d动画视频格式设置

宝子们,今天来给大家讲讲 C4D 咋导出mp4视频的方法。通过用图文教程的形式给大家展示得明明白白的,让你能轻松理解和掌握,不管是理论基础,还是实际操作和技能技巧,都能学到,快速入门然后提升自己哦。 c4d动…...

差分矩阵(Difference Matrix)与累计和矩阵(Running Sum Matrix)的概念与应用:中英双语

本文是学习这本书的笔记: https://web.stanford.edu/~boyd/vmls/ 差分矩阵(Difference Matrix)与累计和矩阵(Running Sum Matrix)的概念与应用 在线性代数和信号处理等领域中,矩阵运算常被用来表示和计算各种数据变换…...

全面解析 Golang Gin 框架

1. 引言 在现代 Web 开发中,随着需求日益增加,开发者需要选择合适的工具来高效地构建应用程序。对于 Go 语言(Golang)开发者来说,Gin 是一个备受青睐的 Web 框架。它轻量、性能高、易于使用,并且具备丰富的…...

全脐点曲面当且仅当平面或者球面的一部分

S 是全脐点曲面当且仅当 S 是平面或者球面的一部分。 S_\text{ 是全脐点曲面当且仅当 }{S_\text{ 是平面或者球面的一部分。}} S 是全脐点曲面当且仅当 ​S 是平面或者球面的一部分。​ 证: 充分性显然,下证必要性。 若 r ( u , v ) r(u,v) r(u,v)是…...

CSS学习记录18

CSS渐变 CSS渐变您可以显示两种或多种指定颜色之间的平滑过渡。 CSS定义了两种渐变类型: 线性渐变(向下/向上/向左/向右/对角线)径向渐变(由其中心定义) CSS线性渐变 如需创建线性渐变,您必须至少两个色…...

实验13 C语言连接和操作MySQL数据库

一、安装MySQL 1、使用包管理器安装MySQL sudo apt update sudo apt install mysql-server2、启动MySQL服务: sudo systemctl start mysql3、检查MySQL服务状态: sudo systemctl status mysql二、安装MySQL开发库 sudo apt-get install libmysqlcli…...

90度Floating B to B 高速连接器信号完整性仿真

在180度 B to B Connector 信号完整性仿真时,不会碰到端口设置不方便问题,但在做90度B to B Connector信号完整性仿真时就会碰到端口设置问题。如下面的90度B to B Connector。 公座 母座 公母对插后如下: 客户要求改Connector需符合PCI-E3.…...

【踩坑】Pytorch与CUDA版本的关系及安装

Pytorch、CUDA和CUDA Toolkit区分 查看当前环境常用shell命令python脚本 Driver API CUDA(nvidia-smi)Runtime API CUDA(nvcc --version)pytorch选择CUDA版本的顺序安装需要的CUDA,多版本共存和自由切换 本文参考 http…...

信息隐藏 数字图像空域隐写与分析技术的实现

数字图像隐写与分析 摘要 随着信息技术的发展,隐写术作为一种信息隐藏技术,越来越受到关注。本文介绍了一种基于最低有效位(LSB)方法的数字图像隐写技术,并实现了隐写数据的嵌入与提取。通过卡方检验分析隐写图像的统计特性,评估隐写数据对图像的影响。实验结果表明,该…...

halcon单相机+机器人*眼在手外标定心得

目的 得到相机坐标系下的点与机器人底座base的转换关系,camera_in_base 两个不确定的定量 1,相机与机器人底座base之间的相对位置是固定的,既camera_in_base 2,机械手末端与标定物 tool_in_obj是固定的 辅助确定量 工作台与相…...

pytest入门十:配置文件

pytest.ini:pytest的主配置文件,可以改变pytest的默认行为conftest.py:测试用例的一些fixture配置 pytest.ini marks mark 打标的执行 pytest.mark.add add需要些marks配置否则报warning [pytest] markersadd:测试打标 测试用例中添加了 p…...

基于Clinical BERT的医疗知识图谱自动化构建方法,双层对比框架

基于Clinical BERT的医疗知识图谱自动化构建方法,双层对比框架 论文大纲理解1. 确认目标2. 目标-手段分析3. 实现步骤4. 金手指分析 全流程核心模式核心模式提取压缩后的系统描述核心创新点 数据分析第一步:数据收集第二步:规律挖掘第三步&am…...

介绍 Html 和 Html 5 的关系与区别

HTML(HyperText Markup Language)是构建网页的标准标记语言,而 HTML5 是 HTML 的最新版本,包含了一些新的功能、元素、API 和属性。HTML5 相对于早期版本的 HTML(比如 HTML4)有许多重要的改进和变化。以下是…...

C05S13-MySQL数据库备份与恢复

一、MySQL数据备份 1. 数据备份概述 数据备份的主要目的是灾难恢复,也就是当数据库等出现故障导致数据丢失,能够通过备份恢复数据。 数据备份可以分为物理备份和逻辑备份。物理备份,又称为冷备份,需要关闭数据库进行备份&#…...

【MySQL — 数据库基础】深入理解数据库服务与数据库关系、MySQL连接创建、客户端工具及架构解析

目录 1. 数据库服务&数据库&表之间的关系 1.1 复习 my.ini 1.2 MYSQL服务基于mysqld启动而启动 1.3 数据库服务的具体含义 1.4 数据库服务&数据库&表之间的关系 2. 客户端工具 2.1 客户端连接MySQL服务器 2.2 客…...

Three.js相机Camera控件知识梳理

原文:https://juejin.cn/post/7231089453695238204?searchId20241217193043D32C9115C2057FE3AD64 1. 相机类型 Three.js 主要提供了两种类型的相机:正交相机(OrthographicCamera)和透视相机(PerspectiveCamera&…...

Unity 开发Apple Vision Pro空间锚点应用Spatial Anchor

空间锚点具有多方面的作用 虚拟物体定位与固定: 位置保持:可以把虚拟物体固定在现实世界中的特定区域或位置。即使使用者退出程序后再次打开,之前锚定过的虚拟物体仍然能够出现在之前所锚定的位置,为用户提供连贯的体验。比如在一…...

C++ Move 构造函数性能影响

C Move构造函数性能影响探析 在现代C编程中,Move构造函数是提升性能的重要工具之一。它通过“窃取”临时对象的资源而非深拷贝,显著减少了不必要的内存分配和数据复制。Move构造函数的性能影响并非总是显而易见,其实际效果取决于多种因素。本…...

translategemma-12b-it部署案例:基于Ollama的轻量级多模态翻译服务搭建

translategemma-12b-it部署案例:基于Ollama的轻量级多模态翻译服务搭建 想象一下,你正在处理一份满是英文的产品说明书,或者收到了一张包含外文菜单的图片。传统方法可能需要你手动打字、复制粘贴,或者使用多个工具来回切换。现在…...

化工模拟老司机的原油蒸馏骚操作

Aspen 化工过程模拟虚拟组分蒸馏原油 本可模型 在本模型中,将使用pseudocomponents进行原油蒸馏。 将创建一个由常压蒸馏塔和真空蒸馏塔组成的模型。 常压蒸馏塔将使用 Chao-Seader 热力学模型建模,而真空蒸馏塔将使用 Braun K10 模型建模。在Aspen里折腾…...

LLVM Pass快速入门(四):代码插桩

代码插桩项目需求&#xff1a;在函数运行时打印出运行的函数名项目目录如下/MyProject ├── CMakeLists.txt # CMake 配置文件 ├── build/ #构建目录 │ └── test.c #测试编译代码 └── mypass3.cpp # pass 项目代码一&#xff0c;测试代码示例test.c#include <…...

实时手机检测-通用部署成本分析:A10/A100/T4显卡性价比实测对比

实时手机检测-通用部署成本分析&#xff1a;A10/A100/T4显卡性价比实测对比 1. 项目背景与需求场景 在现代计算机视觉应用中&#xff0c;实时手机检测是一个具有广泛实用价值的技术方向。从智能监控系统中的打电话行为识别&#xff0c;到零售行业的商品展示分析&#xff0c;再…...

麒麟系统openkylin性能调优实战:Unixbench跑分从100到900的完整指南

麒麟系统OpenKylin性能调优实战&#xff1a;UnixBench跑分从100到900的完整指南 在国产操作系统逐渐成熟的今天&#xff0c;OpenKylin作为麒麟家族的重要成员&#xff0c;其性能表现越来越受到开发者和系统管理员的关注。UnixBench作为经典的Unix-like系统性能测试工具&#xf…...

OpenClaw配置备份指南:Qwen3.5-9B环境快速迁移与恢复方法

OpenClaw配置备份指南&#xff1a;Qwen3.5-9B环境快速迁移与恢复方法 1. 为什么需要备份OpenClaw配置&#xff1f; 上周我的主力开发机突然硬盘故障&#xff0c;导致辛苦配置了两个月的OpenClaw环境全部丢失。最痛苦的不是重装软件&#xff0c;而是那些精心调试的模型参数、技…...

用ESP32和VS1053模块DIY网络收音机:从硬件接线到Arduino代码调试全流程

用ESP32和VS1053打造智能网络收音机&#xff1a;从元器件选型到音频流调试实战 在物联网和智能硬件蓬勃发展的今天&#xff0c;ESP32凭借其出色的无线连接能力和丰富的外设接口&#xff0c;成为DIY音频项目的理想选择。本文将手把手带你完成一个功能完整的网络收音机项目&#…...

OpenClaw跨平台对比:nanobot在Mac/Win/Linux的表现差异

OpenClaw跨平台对比&#xff1a;nanobot在Mac/Win/Linux的表现差异 1. 测试背景与实验设计 去年夏天我开始尝试用OpenClaw搭建个人自动化工作流时&#xff0c;发现不同操作系统下的表现差异远超预期。这次我选择了基于Qwen3-4B模型的nanobot镜像&#xff0c;在MacBook Pro M1…...

2026论文写作工具红黑榜:AI论文平台怎么选?一篇看懂

2026年论文写作工具红黑榜出炉&#xff0c;红榜优先选千笔AI、ThouPen、豆包&#xff0c;适配国内学术规范&#xff0c;提升写作效率与合规性&#xff1b;黑榜需避开低质免费工具、无真实引用平台及过度依赖全文生成的工具。选择时建议按需求匹配度 - 数据可信度 - 成本承受力三…...