重生之我们在ES顶端相遇第16 章 - Lucene 写入流程

news2024/11/16 1:48:01

文章目录

      • 前言
      • 写入流程图
      • refresh
        • Refresh 触发时机
        • Translog
      • Flush
      • Merge

前言

上一章我们介绍了倒排索引的数据结构。
本章我们将深入介绍 Lucene 写入流程。
该知识点在面试中比较常问,也是理解 ES 必须掌握的知识点。

写入流程图

在第 14 章,我在介绍 coordinating node 时,画了 coordinating node 的工作流图,但是只画到了 data node
那么当数据到达 data node 后,ES 是如何将数据写入的呢?

我们来看一个 ES 比较完整的写入流程图
在这里插入图片描述

图中标红的地方,就是我们要详细讲解的内容。

从图中,我们可以知道:

  • 1 个 Data Node 可以有非常多的 Lucene 实例
  • 1 个分片就是一个 Lucene 实例(ES 是基于 Apache Lucene 开发的)
  • 1 个 Segement 就是一个倒排索引

refresh

数据写入时,先写入到内存,此时这部分数据无法被检索。Refresh 后, 数据就能被检索。这也是为什么 ES 被称为 近实时查询 的原因。

当发生 Refresh 时,数据会被写入操作系统 file cache,并清空 Memory buffer

这里,我们不禁要产生疑问了:

  1. 什么时候触发 Refresh
  2. Refresh 只是将数据写入 file cache,但 file cache 在操作系统掉电或崩溃后,数据会丢失的,这怎么办?
Refresh 触发时机
  1. Memory Buffer
  2. refresh_interval(创建索引时可以指定) 时间到
Translog

为了避免 file cache 掉电或崩溃后数据丢失。ES 在触发 Refresh 时,同时还会写入 translog,用于恢复未落盘的数据。

translog 具有以下几个特点:

  1. 顺序写入,写入速度快
  2. 每个分片都有对应的 translog
  3. translog 默认每次索引写入时落盘
  4. 触发 flush 后,translog 会被清空(segment 都落盘了,旧的 translog 肯定没用了)

Flush

Flush 阶段的作用是执行 fsync, 将 segment 落盘。

ES 默认每隔 30 分钟执行 1 次 Flush 操作,执行内容如下:

  1. 执行 Refresh
  2. 清空 translog

Merge

你可能也注意到了,每次写入都不会去修改旧的 segment,而是生成新的 segment(segment 不可变)。也因此,segment 是一个不断增多的过程。
segment 增多的时候,ES 查询性能会下降,因此需要定时的合并 segment

Merge 是 ES 内部自动处理的。当然我们可以强制让 ES 执行 Merge,也可以控制 Merge 时的并发线程。

  • 强制 Merge
    POST /{your-index}/_forcemerge

  • 控制并发线程
    index.merge.scheduler.max_thread_count。该配置默认值为:Math.max(1, Math.min(4, <<node.processors>> / 2))

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

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

相关文章

web基础—dvwa靶场(七)SQL Injection

SQL Injection&#xff08;SQL注入&#xff09; SQL Injection&#xff08;SQL注入&#xff09;&#xff0c;是指攻击者通过注入恶意的SQL命令&#xff0c;破坏SQL查询语句的结构&#xff0c;从而达到执行恶意SQL语句的目的。SQL注入漏洞的危害是巨大的&#xff0c;常常会导致…

有毒有害气体检测仪的应用和性能_鼎跃安全

随着现代工业的不断发展和扩张&#xff0c;越来越多的企业涉及到有毒有害气体的生产、使用和处理。工业规模的扩大导致有毒有害气体的排放量增加&#xff0c;同时也增加了气体泄漏的风险。在发生火灾、爆炸或危险化学品泄漏等紧急事件时&#xff0c;救援人员需要迅速了解现场的…

自动化立体仓库与堆垛机单元的技术参数

导语 大家好&#xff0c;我是社长&#xff0c;老K。专注分享智能制造和智能仓储物流等内容。 新书《智能物流系统构成与技术实践》人俱乐部 完整版文件和更多学习资料&#xff0c;请球友到知识星球【智能仓储物流技术研习社】自行下载。 这份文件是一份自动化立体仓库与堆垛机单…

Java内存泄漏排查

内存泄漏排查 1. 堆内存快照导出2. 导入内存分析工具 1. 堆内存快照导出 获取 Java 进程 ID Windows&#xff1a;执行 jps 命令&#xff0c;或任务管理器查看&#xff0c;又或者执行 tasklist 命令。 注意&#xff1a;当有多个 Java 进程时&#xff0c;任务管理器或 tasklist |…

SpringSecurity6.x整合手机短信登录授权

前言&#xff1a;如果没有看过我的这篇文章的Springboot3.x.x使用SpringSecurity6(一文包搞定)_springboot3整合springsecurity6-CSDN博客需要看下&#xff0c;大部分多是基于这篇文章的基础上实现的。 明确点我们的业务流程&#xff1a; 需要有一个发送短信的接口&#xff0…

springboot小区物业报修管理系统-计算机毕业设计源码03418

摘 要 本课题的研究对象是小区物业报修管理系统app的设计与实现&#xff0c;该系统实现了用户管理、业主信息管理、报修信息管理、维修记录管理、通知公告管理等功能。本系统在设计上&#xff0c;考虑到系统内容以及系统的受众群体&#xff0c;在系统的美工方面采用了比较正规的…

Automated Construction of Theme-specific Knowledge Graphs

文章目录 题目摘要引言相关工作方法实验消融研究结论 题目 自动构建主题特定知识图谱 论文地址&#xff1a;https://arxiv.org/pdf/2404.19146 摘要 尽管知识图谱 (KG) 广泛应用于问答、智能对话系统等各种任务&#xff0c;但现有的 KG 面临两大挑战&#xff1a;信息粒度有限和…

C语言深入理解指针(四)

目录 字符指针变量数组指针变量数组指针变量是什么数组指针变量怎么初始化 二维数组传参的本质函数指针变量函数指针变量的创建函数指针变量的使用代码typedef关键字 函数指针数组转移表 字符指针变量 字符指针在之前我们有提到过&#xff0c;&#xff08;字符&#xff09;&am…

5.MySQL表的约束

目录 表的约束空属性&#xff08;非空约束&#xff09;默认值&#xff08;default约束&#xff09;列描述&#xff08;comment&#xff09;zerofill主键&#xff08;primary key约束&#xff09;自增长唯一键&#xff08;unique约束&#xff09;外键 表的约束 如果我自由自在的…

MySQL(日志)

日志 日志分为三种&#xff1a; undo log &#xff08;回滚日志&#xff09;&#xff1a;用于事务回滚和MVCC redo log &#xff08;重做日志&#xff09;&#xff1a;用于故障恢复 binlog &#xff08;归档日志&#xff09;&#xff1a;用于数据备份和主从复制 undo log undo…

qt-C++笔记之作用等同的宏和关键字

qt-C笔记之作用等同的宏和关键字 code review! Q_SLOT 和 slots&#xff1a; Q_SLOT是slots的替代宏&#xff0c;用于声明槽函数。 Q_SIGNAL 和 signals&#xff1a; Q_SIGNAL类似于signals&#xff0c;用于声明信号。 Q_EMIT 和 emit&#xff1a; Q_EMIT 是 Qt 中用于发射…

Tomcat 靶场攻略

CVE-2017-12615 步骤一&#xff1a;环境搭建 cd vulhub/tomcat/CVE-2017-12615 docker-compose up -d docker ps 步骤二&#xff1a;漏洞复现 http://192.168.10.190:8080/ 步骤二&#xff1a;首页进行抓包 Tomcat允许适⽤put⽅法上传任意⽂件类型&#xff0c;但不允许js…

安卓13去掉下拉菜单的Dump SysUI 堆的选项 android13删除Dump SysUI 堆

总纲 android13 rom 开发总纲说明 文章目录 1.前言2.问题分析3.代码分析3.1 位置13.2 位置24.代码修改5.编译6.彩蛋1.前言 客户需要去掉下拉菜单里面的Dump SysUI 堆图标,不让使用这个功能。 2.问题分析 android的下拉菜单在systemui里面,这里我们只需要定位到对应的添加代…

【优选算法之二分查找】No.5--- 经典二分查找算法

文章目录 前言一、二分查找模板&#xff1a;1.1 朴素二分查找模板1.2 查找区间左端点模板1.3 查找区间右端点模板 二、二分查找示例&#xff1a;2.1 ⼆分查找2.2 在排序数组中查找元素的第⼀个和最后⼀个位置2.3 搜索插⼊位置2.4 x 的平⽅根2.5 ⼭脉数组的峰顶索引2.6 寻找峰值…

Linux自主学习篇

用户及权限管理 sudo 是 "superuser do" 的缩写&#xff0c;是一个在类 Unix 操作系统&#xff08;如 Linux 和 macOS&#xff09;中使用的命令。它允许普通用户以超级用户&#xff08;root 用户&#xff09;的身份执行命令&#xff0c;从而获得更高的权限。 useradd…

多模态交互才是人机交互的未来

交互方式 在探讨文字交流、语音交流和界面交流的效率时&#xff0c;我们可以看到每种方式都有其独特的优势和局限性。文字交流便于记录和回溯&#xff0c;语音交流则在表达情绪和非语言信息方面更为高效&#xff0c;而界面交流则依赖于图形用户界面&#xff08;GUI&#xff09…

<<编码>> 第 16 章 存储器组织(4)--内存 示例电路

内存内部结构 info::操作说明 译码器用于写入, 操作同上 选择器用于输出, 操作同上 地址信号同时控制译码器和选择器, 注意地址的高位在右(比如 001 实际是 100, 选择的是 Q6 和 I6) 缺省情况下, 内部数据全是 0. 读者可先通过译码器写入, 再通过选择器输出 primary::在线交…

初学者的鸿蒙多线程并发之 TaskPool 踩坑之旅

1. 背景 目标群体&#xff1a;鸿蒙初学者 版本&#xff1a;HarmonyOS 3.1/4.0 背景&#xff1a;鸿蒙 App 的全局路由管理功能&#xff0c;需要在 App 启动时初始化对 raw 下的相关配置文件进行读取、解析并缓存。App 启动时涉及到了大量模块的初始化&#xff0c;好多模块都涉…

【machine learning-15-如何判定梯度下降是否在收敛】

我们在运行梯度下降的时候&#xff0c;如何判定梯度下降是否在收敛呢&#xff1f; 梯度下降的时候&#xff0c;权重和偏置根据如下的公式同时更新&#xff1a; 程序要做的就是更新w 和 b&#xff0c;让梯度下降尽快的收敛&#xff0c;但是如何判定正在收敛呢&#xff1f; 方法…

关于神经网络的一个介绍

这篇文章中&#xff0c;我将简单介绍下与神经网络有关的东西&#xff0c;包括它的基本模型&#xff0c;典型的算法以及与深度学习的联系等内容。 一、神经元 神经网络是由许多个神经元组成的&#xff0c;在生物的神经网络中&#xff0c;就是神经元间相互连接&#xff0c;传递…