es是如何处理索引数据的变动的?

1 概述

es是如何处理索引数据的变动的?

或者说索引数据变动时,es会执行哪些操作?

refresh、fsync、merge 和 flush 操作有何作用?

es是如何确保即使es发生宕机数据也不丢失的?

在回答上述问题前,可以先了解一下es处理索引数据变动的主要流程,其示意图如下所示。

2 处理索引数据变动的过程

由示意图可知,es处理索引数据变动的主要过程如下所述:

(1)将数据写入内存缓冲区;

(2)生成新的segment,使数据可见-即可被搜索到;

(3)将数据存储到磁盘。

2.1 将数据写入内存缓冲区

当索引数据变动(插入、更新或删除索引数据)时,首先会将变动的索引数据写入到内存中的“索引缓冲区”,然后将索引数据变动命令写入到内存中的“translog缓冲区”。

  • translog的作用是当es服务宕机后需要进行数据恢复时,通过translog可以恢复尚未存储到磁盘中的es索引数据。
  • 通过每次索引变动请求完成时(默认)执行fsync操作,或者定时执行(设为异步执行时,默认为5s)fsync操作,将“translog缓冲区”中的数据添加到磁盘中的translog文件中。

New documents are added to the in-memory buffer and appended to the transaction log

2.2 使数据可见

通过定时执行refresh操作,将“索引缓冲区”的文档生成一个新的segment(段),此时新增和修改的数据能被搜索到。

  • 默认每秒执行一次refresh操作
  • 每次refresh操作都会生成一个新的segment,随着时间的增长segmengt会越来越多。因为每次search操作都会扫描所有的segment,因此segmengt过多将导致查询效率变慢。为了避免该问题的发生,es会定期将segment进行merge合并操作。
  • 执行refresh操作时,磁盘中的translog文件不会被清除。

 After a refresh, the buffer is cleared but the transaction log is not

2.3 将数据存储到磁盘

(3)通过执行flush操作(刷盘),将内存中的segment存储到磁盘,同时删除磁盘中的translog文件。

  • 默认每隔30min执行一次或者在磁盘中的translog文件过大时(index.translog.flush_threshold_size,默认512mb)执行一次。

After a flush, the segments are fully commited and the transaction log is cleared

3 refresh、merge 和 flush

3.1 refresh

3.1.1 定义

将“索引缓冲区”的文档生成一个新segment(段)并清空该“索引缓冲区”,使新增或修改后的数据能被ES的api接口查询到。

refresh_interval 控制索引refresh频率 ,默认为1s。

3.1.2 修改执行频率

可以通过修改 refresh_interval 来修改执行频率

PUT /test_index/_settings
{"settings": {"refresh_interval": "2s"           }
}

3.1.3 api

refresh全部索引

POST /_refresh 

refresh指定索引

POST /test_index/_refresh

3.2 merge

将多个小segment合并成一个大segment,并删除旧的segment。

3.3 flush

3.3.1 定义

通过执行flush操作(刷盘),将内存中的segment存储到磁盘,同时删除磁盘中的translog文件。

3.3.2 api

刷盘指定索引

POST /test_index/_flush

刷盘所有索引,且等刷盘结束才返回结果

POST /_flush?wait_for_ongoing

4 参考文献

(1)理解ES的refresh、flush、merge

(2)Making Changes Persistent | Elasticsearch: The Definitive Guide [2.x] | Elastic

(3)Translog | Elasticsearch Guide [7.10] | Elastic

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

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

相关文章

在vue3中,手写父子关联,勾选子级父级关联,取消只取消当前子级,父节点不动

树形控件选择子级勾选父级,以及所有子级, 取消勾选仅取消子级 在项目中,可能会遇到这种场景,比如权限配置的时候,页面权限和菜单权限以tree的形式来配置,而且不用半选,菜单在页面的下面&#xf…

Mosh|初学者 SQL 教程

sql文件链接:链接: https://pan.baidu.com/s/1okjsgssdxMkfKf8FEos7DA?pwdf9a9 提取码: f9a9 在mysql workbench 导入 create_databases.sql 文件,下面是运行成功的界面 快捷方式:全部运行可以同时按下controlcommandenter ,或者…

WindowsMac共享文件夹设置

共享文件夹设置 共享文件夹设置Windows系统设置步骤一:设置共享文件夹步骤二: 访问共享文件夹 Mac系统中设置共享文件夹步骤一:设置共享文件夹步骤二:访问共享文件夹 小贴士结论 共享文件夹设置 有时需要在多台电脑之间共享文件夹&#xff0…

如何切换手机的ip地址

在数字时代的浪潮中,智能手机已成为我们日常生活中不可或缺的一部分。然而,随着网络安全问题的日益凸显,保护个人隐私和数据安全变得尤为重要。其中,IP地址作为网络身份的重要标识,其安全性与隐私性备受关注。本文将详…

【深度学习(42)】通过vscode使用anaconda的python环境

按ctrlshiftp,选择Python:Select Interpreter 选择anaconda下的python虚拟环境

物联网实战:STM32+ESP8266温湿度数据采集上传Linux服务器与数据库可视化(附代码示例)

摘要: 本文将手把手教你搭建一个完整的物联网数据监控平台,使用STM32采集温湿度数据,通过ESP8266 WiFi模块上传至Linux服务器,并利用Python脚本将数据存储到MySQL数据库,最后实现每日平均值的计算和可视化展示。 关键词: STM32, …

使用Puppeteer进行数据抓取保存为JSON

Puppeteer简介 Puppeteer是由Google Chrome团队开发的一个Node库,它提供了一个高级API来控制Chrome或Chromium的无头版本。Puppeteer能够执行各种任务,包括页面导航、内容抓取、屏幕截图、PDF生成等。 主要特点 无头浏览器控制:无需打开浏…

0010基于免疫遗传算法的配送中心选址

免疫优化算法(Immune Optimization Algorithm, IOA)在物流配送中心选址中的应用是通过模拟免疫系统的进化过程来解决选址优化问题。物流配送中心选址问题涉及到如何在给定区域内选择最优的位置,以最大化服务覆盖并最小化运输成本。 免疫优化…

使用昇腾芯片进行多卡训推时使用hccl_tools.py为npu分配ip报错问题解决办法

目录 问题描述问题产生原因解决办法最终执行并验证参考网站命令扩展 问题描述 昇腾芯片(910b/310p等)进行多卡训练或者推理时需要先获取并配置每张npu的ip信息,因此需要执行类似下面问题: python mindformers/tools/hccl_tools.…

【高等数学】第五章知识点:二重积分

文章目录 一. 二重积分的概念与性质1. 二重积分概念2. 二重积分的性质2.1. 不等式性质2.2. 中值定理 二. 二重积分的计算1. 利用直角坐标计算2. 利用极坐标计算3. 利用函数的奇偶性计算4. 利用变量的轮换对称性计算 一. 二重积分的概念与性质 1. 二重积分概念 几何意义&#x…

Skywork-MoE,1460亿MoE模型,采用MoE Upcycling技术

Skywork-MoE,1460亿MoE模型,采用MoE Upcycling技术 原创 每日发现最新LLM 机器之心SOTA模型 2024年06月04日 18:27 北京 🏆 基座模型 ①项目名称:Skywork-MoE ★Skywork-MoE是一款千亿模型,具有1460亿参数、16个专家…

websockt初始化,创建一个webSocket示例

写文思路: 以下主要从几个方面着手写websocket相关,包括以下:什么是webSocket,webSocket的优点和劣势,webSocket工作原理,webSocket握手示例,如何使用webSocket(使用webSocket的一个示例)&#…

uni-app三部曲之三: 路由拦截

1.引言 路由拦截,个人理解就是在页面跳转的时候,增加一级拦截器,实现一些自定义的功能,其中最重要的就是判断跳转的页面是否需要登录后查看,如果需要登录后查看且此时系统并未登录,就需要跳转到登录页&…

数据结构(初阶2.顺序表)

文章目录 一、线性表 二、顺序表 2.1 概念和结构 2.2 分类 2.2.1 静态顺序表 2.2.2 动态顺序表 2.3动态顺序表的实现 1.SeqList.h 2.SeqList.c 打印顺序表 初始化 销毁 增容 尾插 头插 在指定位置之前插入数据 尾删 头删 在指定位置删除数据 3.test.c 一、线性表 线性表&#…

Linux学习——Linux中无法使用ifconfg命令

Linux学习——Linux中无法使用ifconfg命令? 💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅…

MemFire Cloud: 一种全新定义后端即服务的解决方案

在这个快节奏的互联网时代,开发者们最希望的就是能够省时省力地完成项目,快速上线。然而,搭建服务、开发接口API、处理各种后端问题,往往让人头疼不已。别担心,现在有了MemFire Cloud,一款为懒人开发者量身…

Flutter-实现物理小球碰撞效果

效果 引言 在Flutter应用中实现物理动画效果,可以大大提升用户体验。本文将详细介绍如何在Flutter中创建一个模拟物理碰撞的动画小球界面,主要代码实现基于集成sensors_plus插件来获取设备的加速度传感器数据。 准备工作 在开始之前,请确保在pubspec.yaml文件中添加senso…

Java版Flink使用指南——合流

大纲 新建工程无界流奇数Long型无界流偶数Long型无界流奇数String型无界流 合流UnionConnect 测试工程代码 在《Java版Flink使用指南——分流导出》中,我们通过addSink进行了输出分流。本文我们将介绍几种通过多个无界流输入合并成一个流来进行处理的方案。 新建工…

使用 Hugging Face 的 Transformers 库加载预训练模型遇到的问题

题意: Size mismatch for embed_out.weight: copying a param with shape torch.Size([0]) from checkpoint - Huggingface PyTorch 这个错误信息 "Size mismatch for embed_out.weight: copying a param with shape torch.Size([0]) from checkpoint - Hugg…

悠律凝声环ringbuds pro开放式耳机:音乐世界的新探索

随着技术发展和生活节奏加快,耳机已经成为了人们日常生活中不可或缺的数码设备。在这样的背景下,悠律凝声环开放式耳机,将高端素皮和编织纹理进行混搭,获得了德国红点奖、美国MUSE缪斯奖等多项国际大奖,展现出时尚与质…