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

news2024/10/2 12:29:11

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://www.coloradmin.cn/o/1912627.html

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

相关文章

【Linux】多线程_1

文章目录 九、多线程1. 线程概念2. 线程的控制 未完待续 九、多线程 1. 线程概念 我们知道:进程 内核数据结构 进程代码和数据 。那什么是线程呢?线程是进程内部的一个执行分支。一个进程内部可以有多个执行流(内核数据结构)&…

[高频 SQL 50 题(基础版)]第一千七百五十七题,可回收且低脂产品

题目: 表:Products ---------------------- | Column Name | Type | ---------------------- | product_id | int | | low_fats | enum | | recyclable | enum | ---------------------- product_id 是该表的主键(具有唯…

大数据专业创新人才培养体系的探索与实践

一、引言 随着大数据技术的迅猛发展,其在各行各业中的应用日益广泛,对大数据专业人才的需求也日益增长。我国高度重视大数据产业的发展,将大数据作为国家战略资源,推动大数据与各行业的深度融合。教育部也积极响应国家战略&#…

C语言编程4:复合赋值,递增递减运算符,局部变量与全局变量,本地变量,转义字符

一篇文章带你玩转C语言基础语法4:复合赋值,递增递减运算符,局部变量与全局变量,本地变量,转义字符 一、复合赋值🌿 1.1💠定义 赋值就是给任意一个变量或者常量赋一个值,这个值可以…

在亚马逊云科技AWS上利用SageMaker机器学习模型平台搭建生成式AI应用(附Llama大模型部署和测试代码)

项目简介: 接下来,小李哥将会每天介绍一个基于亚马逊云科技AWS云计算平台的全球前沿AI技术解决方案,帮助大家快速了解国际上最热门的云计算平台亚马逊云科技AWS AI最佳实践,并应用到自己的日常工作里。本次介绍的是如何在Amazon …

Jmeter在信息头中设置Bearer与 token 的拼接值

思路:先获取token,将token设置成全局变量,再与Bearer拼接。 第一步:使用提取器将token值提取出来,使用setProperty函数将提取的token值设置成全局变量,在登录请求后面添加BeanShell取样器 或者 BeanShell后…

嘉立创EDA学习笔记

嘉立创EDA学习笔记 PCB引线一、设计规则间距安全间距其他间距 物理导线网络长度差分对过孔尺寸 平面铺铜 PCB布线 作为一个嵌入式开发潜力工程师,咱们必须得学会如何绘制开发板以满足顾客各种功能的需求,因此小编去学习了一下嘉立创,写这篇文…

配网行波故障预警与定位装置:配电线路安全性与可靠性的保障

配网行波故障预警与定位装置:配电线路安全性与可靠性的保障 一、传统配网故障排查的困境 1. 巡检效率低下:在二十世纪80年代及以前,电力线路故障的排查主要依赖于人工巡检,这种方式效率低下,特别是在故障区间较大的情…

Seata解决分布式事务

我举的例子是:在网上购物时,我们支付后,订单微服务会更新订单状态,同时会远程调用购物车微服务清空购物车,和调用商品微服务完成商品库存减一。 我们曾经说的事务是只能在本微服务完成回滚,意思就是如果过…

PHP全域旅游景区导览系统源码小程序

🌍【探索无界,畅游无忧】全域旅游景区导览系统小程序全攻略 📱【一键启动,智能导览在手】 告别纸质地图的繁琐,迎接全域旅游景区导览系统小程序的便捷时代!只需轻轻一点,手机瞬间变身私人导游…

如何快速将Excel定义的表结构转换为MySQL的建表语句

目录 引言 方法一:使用Python编程 步骤一:安装必要的库 步骤二:读取Excel文件 步骤三:编写函数生成建表语句 注意事项 方法二:使用Excel VBA 步骤一:启用VBA编辑器 步骤二:编写VBA代码…

通过git将文件push到github 远程仓库

1.先git clone 代码地址 git clone htttp://github.com/用户名/test.git 2. 添加文件 例如:touch 1.txt 3.将文件添加到暂存区 git add 1.txt 4.提交 git commit -m "commit 1.txt" 5.与远程仓库建立关联 git remote add 远程仓库名 远程仓库…

文件操作和IO流(Java版)

前言 我们无时无刻不在操作文件。可以说,我们在电脑上能看到的图片、视频、音频、文档都是一个又一个的文件,我们需要从文件中读取我们需要的数据,将数据运算后也需要将结果写入文件中长期保存。可见文件的重要性,今天我们就来简…

泛微E-Cology getFileViewUrl SSRF漏洞复现

0x01 产品简介 泛微协同管理应用平台e-cology是一套兼具企业信息门户、知识文档管理、工作流程管理、人力资源管理、客户关系管理、项目管理、财务管理、资产管理、供应链管理、数据中心功能的企业大型协同管理平台。 0x02 漏洞概述 泛微E-Cology getFileViewUrl 接口处存在…

[安洵杯 2019]easy_serialize_php

源码&#xff1a; <?php$function $_GET[f];function filter($img){$filter_arr array(php,flag,php5,php4,fl1g);$filter /.implode(|,$filter_arr)./i;return preg_replace($filter,,$img); }if($_SESSION){unset($_SESSION); }$_SESSION["user"] guest; …

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

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

神经网络设计过程

1.可根据Iris特征直接判断 2.神经网络方法&#xff0c;采集大量的Iris特征&#xff0c;分类对应标签&#xff0c;构成数据集。 将数据集喂入搭好的神经网络结构&#xff0c;网络通过反向传播优化参数得到模型。 有新的网络送入到模型里&#xff0c;模型会给出识别结果。 3.…

PHP7.4安装使用rabbitMQ教程(windows)

&#xff08;1&#xff09;&#xff0c;安装rabbitMQ客户端erlang语言 一&#xff0c;erlang语言安装 下载地址1—— 下载地址2——https://www.erlang.org/patches/otp-27.0 二&#xff0c;rabbitMQ客户端安装 https://www.rabbitmq.com/docs/install-windows &#xff08…

【JavaEE】 简单认识CPU

&#x1f435;本篇文章将对cpu的相关知识进行讲解 一、认识CPU 下图是简略的冯诺依曼体系结构图 上图中&#xff0c;存储器用来存储数据&#xff0c;注意在存储器中都是以二进制的形式存储数据的&#xff0c;CPU就是中央处理器&#xff0c;其功能主要是进行各种算术运算和各种…

【保姆级教程】CenterNet的目标检测、3D检测、关键点检测使用教程

一、代码下载 仓库地址:https://github.com/xingyizhou/CenterNet?tab=readme-ov-file 二、目标检测 2.1 下载预训练权重 下载预训练权重ctdet_coco_dla_2x.pth放到models文件夹下 下载链接:https://drive.google.com/file/d/18Q3fzzAsha_3Qid6mn4jcIFPeOGUaj1d/edit …