Elasticsearch 集群时的内部结构是怎样的?

news2024/11/23 4:18:05

Apache Lucene : Flush, Commit

Elasticsearch 是一个基于 Apache Lucene 构建的搜索引擎。 它利用 Lucene 的倒排索引、查询处理和返回搜索结果等功能来执行搜索。 它还扩展了 Lucene 的功能,添加分布式处理功能以支持大型数据集的搜索。 让我们看一下 Apache Lucene 的功能,这些功能使 Elasticsearch 能够执行这些角色。

Apache Lucene: Flush

Apache Lucene: Flush

当收到文档索引请求时,Lucene 会为文档创建一个倒排索引并将其存储在内存缓冲区中。 当执行索引、更新或删除文档等操作时,Lucene 将这些更改保存在内存缓冲区中,并定期将它们刷新(flush)到磁盘。

刷新(flush)是指将索引文档从易失性内存缓冲区(例如 RAM)移动到物理段的过程。 执行刷新有以下好处:

  • 改进的性能:如果索引文档存储在内存中,则每次执行搜索时都必须从内存中读取它们。 将文档刷新到磁盘可以提高搜索性能。
  • 数据丢失预防:如果发生内存丢失,索引文档可能会丢失。 将文档刷新到磁盘可以防止数据丢失。
private ExternalReaderManager createReaderManager(RefreshWarmerListener externalRefreshListener) throws EngineException {
        boolean success = false;
        ElasticsearchReaderManager internalReaderManager = null;
        try {
            try {
                final ElasticsearchDirectoryReader directoryReader = ElasticsearchDirectoryReader.wrap(
                    // DirectoryReader.open() !
                    DirectoryReader.open(indexWriter),
                    shardId
                );
                internalReaderManager = new ElasticsearchReaderManager(directoryReader);
                // lastCommittedSegmentInfos 
                lastCommittedSegmentInfos = store.readLastCommittedSegmentsInfo();
                ExternalReaderManager externalReaderManager = new ExternalReaderManager(internalReaderManager, externalRefreshListener);
                success = true;
                return externalReaderManager;
            } catch (IOException e) {
                maybeFailEngine("start", e);
                try {
                    indexWriter.rollback();
                } catch (IOException inner) { // iw is closed below
                    e.addSuppressed(inner);
                }
                throw new EngineCreationFailureException(shardId, "failed to open reader on writer", e);
            }
        } finally {
            if (success == false) { // release everything we created on a failure
                IOUtils.closeWhileHandlingException(internalReaderManager, indexWriter);
            }
        }
    }
  • DirectoryReader.open() 方法打开 DirectoryReader 来读取索引文档。 此方法检查需要刷新的段,并在必要时刷新它们。
  • 代码 lastCommitedSegmentInfos = store.readLastCommissedSegmentsInfo(); 读取最后提交的段信息。 该信息用于确定哪些段需要刷新。

Apache Lucene: Commit

Lucene 的 flush 操作只能保证数据传输到系统的页缓存(page cache)中,但不能保证文件真正安全地写入磁盘。

因此,Lucene 会定期执行同步操作,通过 fsync 系统调用将内核系统页缓存的内容与当前写入磁盘的内容进行同步。 这个操作称为 Lucene 提交 (commit)。

什么是系统的页面缓存?

系统的页缓存是操作系统存储在内存中的数据缓存。 操作系统使用页面缓存,以便程序可以从硬盘读取数据,而不必直接访问内存。 在页面缓存中存储数据有以下好处:

  • 它提高了程序性能,因为程序可以从硬盘读取数据,而无需直接访问内存。
  • 它减少了磁盘读取次数,从而可以延长硬盘的使用寿命。

fsync系统调用是什么?

fsync 系统调用是用于将文件内容永久写入磁盘的系统调用。 它将文件的内容从操作系统的页面缓存复制到磁盘,然后更新磁盘上的标头(有关文件的大小、内容、格式、创建、修改日期和权限的信息)。

通过执行这些操作,Apache Lucene 确保索引文档不仅存储在操作系统的页面缓存中,而且永久存储在磁盘上,从而防止数据丢失。

更多阅读:Elasticsearch:Elasticsearch 中的 refresh 和 flush 操作指南

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

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

相关文章

网络通信(套接字通信)(C/C++)

1.网络编程必知概念 1.广域网和局域网 广域网:又称外网、公网。是连接不同地区局域网或城域网进行计算机通信的远程公共网络。 局域网:在一定的通信范围内,有很个多计算机组成的私有网络就叫局域网。(这些计算机相互之间是可以通信的,但是不能直接访问外网(可以通过网线…

ElementUI -- Mock.js介绍和使用与首页导航栏左侧菜单搭建

1.1 mockjs介绍 Mock.js是一个用于生成随机数据和模拟接口请求的JavaScript库。它可以帮助开发人员在前端开发过程中模拟后端接口的返回数据,以便进行前端页面的开发和测试。 Mock.js有两个重要的特性风靡前端: 数据类型丰富 Mock.js提供了一套简单易用的API&#x…

FL Studio21编曲软件好不好用?值得下载吗

现在的编曲界,鱼龙混杂,很多垃圾软件都来滥竽充数,能入流的编曲软件真的是屈指可数。而编曲业的缺口却又如此之大,所以各类货色都想入行分一杯羹。然而没有实力注定就没有市场而FL Studio又是一款非常著名,实力超群的编…

CTF_BUUCTF_MIS解题_05大白

题目地址:BUUCTF在线评测 文件下载解压之后发现真是一个大白 但是这个大白越看越不对劲,怎么下半身给整没了呢? 随机考虑到图片高度的隐写,杀手锏winhex上场,高度改高一下看看 flag已出现:flag{He1l0_d4_…

面试打底稿③ 专业技能的第三部分

简历原文 抽查部分 基本了解RabbitMQ、Elasticsearch等微服务技术,对分布式事务、分布式缓存等有所学习;熟悉数据库的基本操作,写过C#与数据库交互的项目; 模拟问答 1.你是如何保障消息可靠性的 从消息生产者到交换机&#x…

C语言 数据类型

变量声明 格式(变量类型变量名称) 变量类型:整数类型(int),浮点数类型(float) float类型可以存储带小数的数字。 用printf()打印变量,使用%d来处理整数值&#xff0c…

AI指令百科全书:1000条AI指令,一次性全给你!

这是一位,国外博主哈桑 整理的,1000条ChatGPT实用指令,涵盖目前几乎所有的,主流提示需求。 全文超过40000字。 我把它们翻译成更适合大家理解的「中文版Prompt」,并根据具体的内容,拆解成一二级目录&…

【C++STL基础入门】list交换、翻转,排序、合并和拼接操作

文章目录 前言一、交换list二、翻转list三、排序list四、合并list五、拼接list总结 前言 在C的标准模板库(STL)中,list是一个双向链表容器,提供了丰富的功能和操作。本文将介绍list容器在交换、翻转、排序、合并和拼接等方面的基…

Sip多按键对讲分机,洁净室专用对讲终端

Sip多按键对讲分机,洁净室专用对讲终端 嵌入式洁净室电话机广泛应用于手术室,实验室,制药厂车间,无尘车间等 环境要求高的场所,整机是SUS304不锈钢工艺,喇叭,按键,麦克风无间隙&…

三维模型3DTile格式轻量化顶点压缩主要技术方法分析

三维模型3DTile格式轻量化顶点压缩主要技术方法分析 三维模型顶点压缩是3DTile格式轻量化压缩的重要组成部分,能有效减小数据大小,提高数据处理效率。下面将详细分析几种主要的顶点压缩技术方法: 预测性编码:预测性编码也被称为差…

串口电平信号分析--一下看懂不同的串口通信信号

串口电平信号分析–一下看懂不同的串口通信信号

C#,数值计算——Primpolytest的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { public class Primpolytest { private int N { get; set; } 32; private int nfactors { get; set; } 5; private ulong[] factors { get; set; } private int[] t { get…

九日集训 LCR.190 加密运算

计算机安全专家正在开发一款高度安全的加密通信软件,需要在进行数据传输时对数据进行加密和解密操作。假定 dataA 和 dataB 分别为随机抽样的两次通信的数据量: 正数为发送量负数为接受量0 为数据遗失 请不使用四则运算符的情况下实现一个函数计算两次…

MySQL索引看这篇就够了

能简单说一下索引的分类吗? 例如从基本使用使用的角度来讲: 主键索引: InnoDB 主键是默认的索引,数据列不允许重复,不允许为 NULL,一个表只能有一个主键。唯一索引: 数据列不允许重复,允许为 NULL 值&…

Vue.js2+Cesium1.103.0 十二、绑定多个 DOM 弹窗,并跟随视角实时更新位置

Vue.js2Cesium1.103.0 十二、绑定多个 DOM 弹窗&#xff0c;并跟随视角实时更新位置 Demo 基于 element-ui 的 Message 封装一个自定义弹窗&#xff0c;添加到页面中&#xff0c;并实时更新位置。 <template><divid"cesium-container"style"width: 1…

【RocketMQ】浅谈消息发送机制

【RocketMQ】浅谈消息发送机制 参考资料&#xff1a; 消息发送核心参数与工作原理详解 RocketMQ消息发送流程 RocketMQ 消息发送 原理详解 源码剖析 结合实际应用场景谈消息发送 《RocketMQ技术内幕》 文章目录 【RocketMQ】浅谈消息发送机制一、认识RocketMQ消息——Message二…

java语言对异常处理运行的初步探索(try-catch-finally)

​​​​​​异常处理机制 java中的异常处理机制使得即使程序出现异常&#xff0c;代码也能够继续执行下去而不是直接退出程序。下面我们先来简单的了解一下异常处理是怎么使用。 在引用异常处理之前&#xff0c;代码运行中存在异常会导致JVM直接中断该程序并输出异常信息&am…

stack的使用以及模拟实现

&#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ &#x1f43b;强烈推荐优质专栏: &#x1f354;&#x1f35f;&#x1f32f;C的世界(持续更新中) &#x1f43b;推荐专栏1: &#x1f354;&#x1f35f;&#x1f32f;C语言初阶 &#x1f43b;推荐专栏2: &#x1f354;…

活动预告|Dragonfly 与你相约 2023 KubeCon Shanghai!

KubeCon CloudNativeCon Open Source Summit China 2023&#xff0c;由 Linux 基金会、CNCF 主办&#xff0c;将在 9 月 26-28 日于上海跨国采购会展中心盛大开幕。本次峰会将聚集全球社区&#xff0c;共同探讨云原生和开源领域的前沿洞察、核心技术与最佳实践&#xff0c;会…

Java基于SpringBoot的藏区特产销售系统的研究与实现

今天为大家带来的是基于 Java SpringBootVue 的藏区特产销售系统&#xff0c;大家有兴趣的可以看一下 博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W,Csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 文章目…