ES读写数据的工作原理

【面试题】ES文档写入和读取流程详解 在Elasticsearch中,文档(Document)是最基本的信息单元,用于表示和存储数据。文档是以JSON格式表示的结构化数据对象,类似于关系型数据库中的行。索引(Index):文档必须属于一个索引,索引是用于组织和存储文档的逻辑容器。索引是Elasticsearch中数据的顶层概念,它类似于关系型数据库中的数据库。类型(Type):在较早的版本中,文档可以在索引中定义不同的类型。但是从Elasticsearch 7.0版本开始,类型的概念已经被弃用,一个索引只能包含一个文档类型。 阅读详情

一、es写数据过程

1、客户端选择一个node发送请求过去,这个node就是coordinating node(协调节点)

2、coordinating node 对document进行路由(_routing机制),将请求转发给对应的node(有primary shard)

3、实际的node上的primary shard 处理请求,,选择一个主分片写入数据,然后将数据同步到replica node。

4、coordinating node如果发现 primary node和所有replica node都搞定之后,就返回响应结果给客户端。

有那么一个印象就是,客户端的请求如果是http,应该是轮询请求,如果是tcp的话,就是随机发送请求到nodes上。

二、es读数据过程

可以通过doc id 来查询,会根据doc id进行hash,判断出来当时把doc id分配到了哪个shard上面去,从那个shard去查询。

1、客户端发送请求到任意一个node,成为coordinate node。

2、coordinate node 对doc id进行哈希路由,将请求转发到对应node,此时会使用round-robin随机轮询算法,在primary shard 以及其所有replica中随机选择一个,让读请求负载均衡。

3、接收请求的node返回document给coordinate node。

4、coordinate node返回document给客户端。

ES读数据,是先走os cache,os cache没有,就会去查磁盘。如果os cache满了,放不下更多数据,意味着大量的查询会去磁盘

三、es搜索数据过程

es最强大的是做全文检索

1、客户端发送请求到一个coordinate node。协调节点会创建一个大小为 from + size 的空优先队列。

2、协调节点将搜索请求转发到所有的shard对应的primary shard 或 replica shard ,都可以。每个分片在本地执行查询并添加结果到大小为 from + size 的本地有序优先队列中。

3、query phase:每个shard将自己的搜索结果(所有文档的 ID和排序值)返回给协调节点,由协调节点进行数据的合并、排序、分页等操作。

4、fetch phase:接着由协调节点根据doc id去各个节点上拉取实际的document数据,它合并这些值到自己的优先队列中来产生一个全局排序后的结果列表,最终返回给客户端。

写请求是写入primary shard,然后同步给所有的replica shard

读请求可以从primary shard 或者 replica shard 读取,采用的是随机轮询算法。

例如:查询sise:30000

先从数据节点提取前30000条数据,然后每个节点都返回给协调节点30000条数据,比如三个数据节点,就返回90000条数据,最后协调节点取90000条中的30000条数据返回。

四、写数据底层原理

1、先写入内存buffer,在buffer里的时候数据是搜索不到的;同时将数据写入translog日志文件。

如果buffer快满了,或者到一定时间,就会将内存buffer数据refresh 到一个新的segment file中,但是此时数据不是直接进入segment file磁盘文件,而是先进入

os cache。这个过程就是 refresh。

每隔1秒钟,es将buffer中的数据写入一个新的segment file,每秒钟会写入一个新的segment file,这个segment file中就存储最近1秒内 buffer中写入的数据。

2、但是如果buffer里面此时没有数据,那当然不会执行refresh操作,如果buffer里面有数据,默认1秒钟执行一次refresh操作,刷入一个新的segment file中。

操作系统里面,磁盘文件其实都有一个东西,叫做os  cache,即操作系统缓存,就是说数据写入磁盘文件之前,会先进入os  cache,先进入操作系统级别的

一个内存缓存中去。只要buffer中的数据被refresh 操作刷入os cache中,这个数据就可以被搜索到了。

3、为什么叫es是准实时的?NRT,全称 near real-time。默认是每隔1秒refresh一次的,所以es是准实时的,因为写入的数据1s之后才能被看到。

可以通过es的restful api或者 java api,手动执行一次 refresh操作,就是手动将buffer中的数据刷入os cache中,让数据立马就可以被搜索到。只要

数据被输入os cache中,buffer 就会被清空了,因为不需要保留buffer了,数据在translog里面已经持久化到磁盘去一份了。

4、重复上面的步骤,新的数据不断进入buffer和translog,不断将buffer数据写入一个又一个新的segment file中去,每次refresh完buffer清空,translog保留。

随着这个过程的推进,translog会变得越来越大。当translog达到一定长度的时候,就会触发commit操作。

5、commit操作发生的第一步,就是将buffer中现有的数据refresh到os  cache中去,清空buffer。然后将一个commit  point写入磁盘文件,里面标识者这个commit

point 对应的所有segment file,同时强行将os cache中目前所有的数据都fsync到磁盘文件中去。最后清空现有 translog日志文件,重启一个translog,此时commit操作完成。

6、这个commit操作叫做flush。默认30分钟自动执行一次flush,但如果translog过大,也会触发flush。flush操作就对应着commit的全过程,我们可以通过es api,手动执行

flush操作,手动将os  cache中数据fsync强刷到磁盘上去。

7、translog日志文件的作用是什么?

执行commit 操作之前,数据要么是停留在buffer中,要么是停留在os cache中,无论是buffer 还是os cache都是内存,一旦这台机器死了,内存中的数据就全丢了。

所以需要将数据对应的操作写入一个专门的日志文件translog中,一旦此时机器宕机了,再次重启的时候,es会自动读取translog日志文件中的数据,恢复到内存buffer

和os cache中去。

8、translog其实也是先写入os  cache的,默认每隔5秒刷一次到磁盘中去,所以默认情况下,可能有5s的数据会仅仅停留在buffer或者translog文件的os cache中,如果

此时机器挂了,会丢失5秒钟的数据。但是这样性能比较好,最多丢5秒的数据。

也可以将translog设置成每次写操作必须是直接fsync到磁盘,但是性能会差很多。

9、es第一是准实时的,数据写入1秒后就可以搜索到:可能会丢失数据的。有5秒的数据,停留在buffer、translog  os  cache 、segment file  os  cache中,而不在磁盘上,

此时如果宕机,会导致5秒的数据丢失。

10、总结::数据先写入内存buffer,然后每隔1s,将数据refresh到 os cache,到了 os cache数据就能被搜索到(所以我们才说es从写入到能被搜索到,中间有1s的延迟)。

每隔5s,将数据写入到translog文件(这样如果机器宕机,内存数据全没,最多会有5s的数据丢失),translog达到一定程度,或者默认每隔30min,会触发commit操作,将缓冲区的

数据都flush到segment file磁盘文件中。

数据写入 segment file之后,同时就建立好了倒排索引。

五、删除/更新数据底层原理

如果是删除操作,commit的时候会生成一个 .del文件,里面将某个doc标识为 deleted状态,那么搜索的时候根据 .del文件就知道这个doc是否被删除了。

如果是更新操作,就是将原来的doc标识为deleted状态,然后重新写入一条数据。

buffer 每refresh一次,就会产生一个segment file,所以默认情况下是1秒钟一个segment file,这样下来segment file会越来越多,此时会定期执行merge。

每次merge的时候,会将多个segment file合并成一个,同时这里会将标识为 deleted的doc给物理删除掉,然后将新的segment file写入磁盘,这里会写一个

commit point,标识所有新的 segment file,然后打开segment file供搜索使用,同时删除旧的segment file。

六、底层lucence

简单来说,lucence就是一个jar包,里面包含了封装好的各种建立倒排索引的算法代码。我们用java 开发的时候,引入 lucene  jar,然后基于lucene的api去开发

就可以了。

通过lucene,我们可以将已有的数据建立索引,lucene会在本地磁盘上面,给我们组织索引的数据结果。

七、分片机制下隐藏的问题

分片机制虽然能有效提高查询速度,但是在执行聚合查询时,会引起聚合结果不准确的问题,需要根据实际业务场景决定如何选择。

解决方法:

    1. 方案1:设置主分片为1
    2. 方案2:调大 shard_size 值,减小误差
    3. 方案3:将size设置为最大值来解决精度问题

八、关于请求的一个理解

作为用户,我们可以访问包括master节点在内的集群中的任一节点。每个节点都知道各个文档的位置,并能够将我们的请求直接转发到拥有我们想要的数据的节点。无论我们访问的是哪个节点,当请求访问到这个节点的时候,它就成为协调节点,它都会控制从拥有数据的节点收集响应的过程,并返回给客户端最终的结果。

个人认为如果master节点不是被设置为单一的角色,被选举出来的master,同时承担datanode的角色。“访问包括master节点在内的集群中的任一节点”就符合这句话的场景。如果master仅仅承担master角色则无需参与文档层面的变更和搜索。如果集群中设置独立的协调节点的话,是否客户端所有文档层面的变更和搜索都有协调节点处理请求?是否可以选择协调节点和数据节点区分不同的请求?答案应该是否的,这部分请求区分应该由客户端来区分。

文章转载来自:https://www.cnblogs.com/yuxiang1/p/10601253.html

ElasticSearch原理+实战知识点 今天为大家带来流计算领域经常使用的组件 ElasticSearch,本文通过原理+实战操 教程带领大家快速学会 ElasticSearch 搜索引擎,以下内容全部经过实战操作,可 以根据文档进行学习~ 大纲如下: 1 ElasticSearch 概述 1.1 全文搜索引擎 小伙伴们经常使用 google 或者百度进行搜索内容,在输入框中输入关键字,这个时候,网站会将包含 关键字 的所有网页返回,大家有没有想过,为什么输入关键字就可以查到结果呢? 同时网站上返回的页面内容大多都是一些 非结构化 的文本数据, 阅读详情

相关推荐

【ES专题】ElasticSearch功能详解与原理剖析

使用:搜索和聚合操作语法,理解分词,倒排索引,相关性算分(文档匹配度)优化: 数据预处理,文档建模,集群架构优化,读写性能优化学习了ES的预处理器弄明白了ES的读写流程,以及ES写原理。

qq_32681589的博客 1448

ElasticSearch 面试 4 连问,你顶得住么?

来源:https://github.com/doocs/advanced-java 面试题 ES 写入数据的工作原理是什么啊?ES 查询数据的工作原理是什么啊?底层的 Lucene 介绍一下呗?倒排索引了解吗? 面试官心理分析 问这个,其实面试官就是要看看你了解不了解 es 的一些基本原理,因为用 es 无非就是写入数据,搜索数据。你要是不明白你发起一个写入和搜索请求的时候,es 在干什么,那你真的是… 对 es 基本就是个黑盒,你还能干啥?你唯一能干的就是用 es 的 api 读写数据了。要是出点什么.

架构文摘 589

ES底层读写工作原理,看这一篇就够了

谈到面试,其实说白了就是刷题刷题刷题,天天作死的刷。。。。。为了准备这个“金三银四”的春招,狂刷一个月的题,狂补超多的漏洞知识,像这次美团面试问的算法、数据库、Redis、设计模式等这些题目都是我刷到过的并且我也将自己刷的题全部整理成了PDF或者Word文档(含详细答案解析)66个Java面试知识点架构专题(MySQL,Java,Redis,线程,并发,设计模式,Nginx,Linux,框架,微服务等)+大厂面试题详解(百度,阿里,腾讯,华为,迅雷,网易,中兴,北京中软等)算法刷题(PDF)

2401_84049061的博客 1029

【elasticsearch】elasticsearch es读写原理

今天来学习下 es 的写入原理。

Mrerlou的博客 3999

【Elasticsearch】 es coordinating 节点

1.概述 2.ES的写入流程 ES的任意节点都可以作为协调节点(coordinating node)接受请求,当协调节点接受到请求后进行一系列处理,然后通过_routing字段找到对应的primary shard,并将请求转发给primary shard, primary shard完成写入后,将写入并发发送给各replica, raplica执行写入操作后返回给primary shard, primary shard再将请求返回给协调节点。大致流程如下图: 3. coordinating节点 ES中接.

九师兄 2336

数据标注的下一代SOP,可能不是Word,而是一段Prompt

再给几个反例:“这个只是正常纹理,不算。真正用于数据生产的Prompt,可能至少包含:任务定义、正例、反例、边界案例、优先级、输出格式、验收逻辑。一个项目100个人,如果100个人对这句话有100种理解,最后返工的就不是一个框,而可能是几十万帧数据。一个项目启动以后,项目经理先研究SOP,培训组长,组长再培训标注员,最后几百个人按照同一套规则干活。实际上一个成熟的项目经理,最重要的能力之一,就是:把客户的业务语言翻译成生产规则。真正让项目难交付的,从来不是80%的普通数据,而是那20%的长尾数据。

AI数据标注猿 295

ES读写数据的工作原理以及文档读写模型实现原理

es写入数据的工作原理是什么啊?es查询数据的工作原理是什么?底层的lucence介绍一下呗?倒排索引了解吗? 一、es写数据过程 1、客户端选择一个node发送请求过去,这个node就是coordinating node(协调节点) 2、coordinating node 对document进行路由,将请求转发给对应的node(有primary shard) 3、实际的node上的primary...

zhutianrong520的博客 1034

国密系列算法简介

众所周知,为了保障商用密码的安全性,国家商用密码管理办公室制定了一系列密码标准,包括SM1(SCB2)、SM2、SM3、SM4、SM7、SM9、祖冲之密码算法(ZUC)那等等。其中SM1、SM4、SM7、祖冲之密码(ZUC)是对称算法;SM2、SM9是非对称算法;SM3是哈希算法。目前,这些算法已广泛应用于各个领域中,期待有一天会有采用国密算法的区块链应用出现。其中SM1、SM7算法不公开,调用该...

HardessGod的博客 5775

Elasticsearch读写数据工作原理与Mysql的重复数据插入处理

es写数据过程: 客户端向Node(协调节点-coordinating node)发送索引文档请求。 Node对document 进行路由,根据文档ID(_id字段)计算出该文档所属的shard,然后请求路由到对应的 node(有 primary shard)。 实际的 node 上的primary shard处理请求,然后再将数据同步到replica node,当所有的Replicas报告成功后,node向请求的Node发送成功报告,Node发现primary node和所有replica

yxd179的博客 5786

开关电源EMC整改案例-辐射骚扰

2.4.1 获得原始数据。同样的分析可以应用在差模电流的情况, 唯一不同的是, 两根导线的磁场分布是相反的, 磁 场互相抵消, 由于导线中的电流大小相等, 产生的磁场 H 大小相同, 在互相靠近的情况下, 在磁 环内的两个感应磁场大小相同、方向相反, 因此合成之后的感应磁场 B 几乎为 0,对任意一根导 线而言,相当于是一段“无感导线”,对差模电流不会产生任何抑制作用。众所周知, 共模电感的匝数越多, 感量越大, 按道 理来说对共模干扰电流的抑制也会越强烈,对抗辐射 也越有利,然而事实真的如此吗?

经营范围: CTA、SRRC、CCC、移动、电信、联通入库 3496

三维重建之条纹投影结构光(一)

该系列为条纹投影结构光学习笔记,一共分为四篇。第一篇记录文献阅读的笔记,对重要知识点进行摘录介绍。 本篇以理论知识推导为主,主要从以下三个方面进行介绍,首先介绍条纹投影的三角测量原理;然后介绍相位主值的求解和相位展开;最后介绍相位和高度的模型,即相高模型。本篇博文不涉及具体的代码实现。 条纹投影结构光测量原理 ...

beyond951的博客 3万+

分布式搜索引擎-ES查询和读写数据的工作原理是什么?

ES查询和读取数据的工作原理是什么? (1)es写数据过程 1)客户端选择一个node发送请求过去,这个node就是coordinating node(协调节点) 2)coordinating node,对document进行路由,将请求转发给对应的node(有primary shard) 3)实际的node上的primary shard处理请求,然后将数据同步到replica node 4)coordinating node,如果发现primary node和所有replica node都搞

qq_38261137的博客 420

树莓派4B+红外传感器:手把手教你DIY一个能走黑线的智能小车(Python代码全解析)

本文详细介绍了如何使用树莓派4B和红外传感器DIY一个智能循迹小车,包括硬件配置、GPIO连接、Python代码实现及优化算法。通过动态PWM调速、状态机设计和赛道记忆算法,提升小车的循迹性能和稳定性。适合初学者和电子爱好者动手实践。

weixin_29188043的博客 269

ElasticSearch-集群读写

【代码】ElasticSearch-集群读写。

姜希成的博客 1348

Windows 11下WSL2安装CUDA避坑指南:从驱动版本匹配到环境变量配置

本文详细解析了在Windows 11的WSL2中搭建CUDA开发环境的完整流程与核心避坑要点。关键在于理解“驱动在Windows,工具链在Linux”的独特架构,并确保显卡驱动与CUDA Toolkit版本严格匹配。指南涵盖了从驱动验证、WSL-Ubuntu专用仓库安装、环境变量配置到GCC版本冲突、GPU算力不匹配等常见问题的解决方案,帮助开发者高效构建稳定的深度学习与高性能计算环境。

smartcontract5的博客 466

QT/C++实现健壮HTTP POST客户端:从基础到异常处理与性能优化

HTTP协议作为客户端与服务器通信的基石,其POST方法在数据提交、API交互等场景中扮演着核心角色。其工作原理基于请求-响应模型,通过封装TCP连接与协议细节,为应用层提供了简洁的数据传输接口。在C++桌面与嵌入式开发中,直接使用底层Socket实现HTTP不仅复杂且易出错,而利用框架进行高级封装能显著提升开发效率与代码健壮性。QT框架的`QNetworkAccessManager`等组件正是为此设计,它通过信号槽机制提供异步网络编程模型,有效管理连接与协议解析。一个健壮的HTTP客户端需要妥善处理网络波

weixin_29176179的博客 384

elasticsearch7实战(一)——ES读写模型

前言 在学ES之前先学习的hadoop、hbase、kafka这些分布式存储框架。再学ES的时候有很多可以类比的地方,但是也有很多跟其他框架不太一样的地方,感觉有些别扭。比如副本概念的些许偏差。 在hadoop、HBASE、kafka中,副本是没有主从区别的,因此再说有几个副本的时候基本就是在说同一份数据有几份。比如我们说hadoop有三个副本,意思就是同一份数据有三份,他们之间互为备份。 但是在ES中,感觉副本约定俗称的概念跟上面并不一致。因为ES是有主从副本之分的。如果说某个数据有两个副本,那么大概率是

Aspirin's Nest 804

小黄鸭机器人技术全解-第 07 章 关节自由度与行程参数

—鸭子歪着头转头时,转的平面是斜的,这正是它"灵动"感的来源。仿真里这是自动的(轴定义在父刚体系),复刻时不需要做任何事——

yolo模型训练找我,AI游戏合作找我 65

ElasticSearch

首先什么是ES? Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。 为什么使用ES? elasticsearch不是什么全新的技术,它是将全文检索、数据分析以及分布式技术合并在了一起,其中全文检索指的是Apache lucene,数据分析指的是商用的数据分析软件,分布式技术主要指的就是分布式数

zphdgqs的博客 488

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Elasticsearch介绍

Elasticsearch 介绍 概要 Elasticsearch 是一个分布式搜索引擎,底层基于 Lucene 实现。Elasticsearch 屏蔽了 Lucene 的底层细节,提供了分布式特性,同时对外提供了 Restful API。Elasticsearch 以其易用性迅速赢得了许多用户,被用在网站搜索、日志分析等诸多方面。由于 ES 强大的横向扩展能力,甚至很多人也会直接把 ES 当做 NoSQL 来用。 基本概念 全文搜索(Full-text Search)   全文检索是指计算机索引程序通过扫

HAG_blank的博客 403

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Elasticsearch常见面试题

3.1相关度搜索:有明确的查询边界检讲究相关度,无明确的查询条件边界3.2图解全文检索ES中数据存储是以倒排索引去存储:倒排索引:词项到词项表之间的映射关系主要有4步切词:核心是分词器来对其文本内容来划分单独的小块,一个个都词项规范化:大小写统一没有词缀等去重字典序:按照字典字母的顺序 映射到词项字典中当用户搜索的时候,会按照搜索的关键词进行分词:与词项表中的都词项进行匹配,拿到的对应的映射id,匹配度越高,相关度也就越高;那么也将优先在用户的查询列表中展示。

weixin_44880611的博客 2501

ElasticSearch相关知识,大数据开发高级面试题

外链图片转存中…(img-N8bp36Va-1712516579919)]

2401_84160325的博客 681

ES读写的底层原理过程

es读写数据的工作原理 (1)es写数据过程 1)客户端选择一个node发送请求过去,这个node就是coordinating node(协调节点) 2)coordinating node,对document进行路由(根据documentID路由),将请求转发给对应的node(有primary shard) 3)实际的node上的primary shard处理请求,然后将数据同步到r...

yinni11的博客 5936

elasticsearch 分片_ElasticSearch常见经典面试题

来源:https://www.cnblogs.com/heqiyoujing/p/11146178.html1.为什么要使用Elasticsearch?因为在我们商城中的数据,将来会非常多,所以采用以往的模糊查询,模糊查询前置配置,会放弃索引,导致商品查询是全表扫面,在百万级别的数据库中,效率非常低下,而我们使用ES做一个全文索引,我们将经常查询的商品的某些字段,比如说商品名,描述、价格...

weixin_39885412的博客 117
上一篇: elasticsearch _cat命令使用详情
下一篇: elasticsearch遇到的问题(一) 底层修改同义词典synonyms.txt未生效,将同义词加到分词器也未生效
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值