ES底层读写工作原理

面试题

es 写入数据的工作原理是什么啊?es 查询数据的工作原理是什么啊?底层的 lucene 介绍一下呗?倒排索引了解吗?

面试官心理分析

问这个,其实面试官就是要看看你了解不了解 es 的一些基本原理,因为用 es 无非就是写入数据,搜索数据。你要是不明白你发起一个写入和搜索请求的时候,es 在干什么,那你真的是…

对 es 基本就是个黑盒,你还能干啥?你唯一能干的就是用 es 的 api 读写数据了。要是出点什么问题,你啥都不知道,那还能指望你什么呢?

面试题剖析

es 搜索数据过程

es 最强大的是做全文检索,就是比如你有三条数据:

java真好玩儿啊
java好难学啊
j2ee特别牛

复制

你根据 java 关键词来搜索,将包含 java的 document 给搜索出来。es 就会给你返回:java真好玩儿啊,java好难学啊。

  • 客户端发送请求到一个 coordinate node。
  • 协调节点将搜索请求转发到所有的 shard 对应的 primary shard 或 replica shard,都可以。
  • query phase:每个 shard 将自己的搜索结果(其实就是一些 doc id)返回给协调节点,由协调节点进行数据的合并、排序、分页等操作,产出最终结果。
  • fetch phase:接着由协调节点根据 doc id 去各个节点上拉取实际的 document 数据,最终返回给客户端。
写数据底层原理

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

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

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

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

操作系统里面,磁盘文件其实都有一个东西,叫做 os cache,即操作系统缓存,就是说数据写入磁盘文件之前,会先进入 os cache,先进入操作系统级别的一个内存缓存中去。只要 buffer 中的数据被 refresh 操作刷入 os cache中,这个数据就可以被搜索到了。

为什么叫 es 是准实时的?NRT,全称 near real-time。默认是每隔 1 秒 refresh 一次的,所以 es 是准实时的,因为写入的数据 1 秒之后才能被看到。可以通过 es 的 restful api 或者 java api,手动执行一次 refresh 操作,就是手动将 buffer 中的数据刷入 os cache中,让数据立马就可以被搜索到。只要数据被输入 os cache 中,buffer 就会被清空了,因为不需要保留 buffer 了,数据在 translog 里面已经持久化到磁盘去一份了。

重复上面的步骤,新的数据不断进入 buffer 和 translog,不断将 buffer 数据写入一个又一个新的 segment file 中去,每次 refresh 完 buffer 清空,translog保留。随着这个过程推进,translog 会变得越来越大。当 translog 达到一定长度的时候,就会触发 commit 操作。

commit 操作发生第一步,就是将 buffer 中现有数据 refresh 到 os cache 中去,清空 buffer。然后,将一个 commit point 写入磁盘文件,里面标识着这个 commit point 对应的所有 segment file,同时强行将 os cache 中目前所有的数据都 fsync 到磁盘文件中去。最后清空 现有 translog 日志文件,重启一个 translog,此时 commit 操作完成。

这个 commit 操作叫做 flush。默认 30 分钟自动执行一次 flush,但如果 translog 过大,也会触发 flush。flush 操作就对应着 commit 的全过程,我们可以通过 es api,手动执行 flush 操作,手动将 os cache 中的数据 fsync 强刷到磁盘上去。

translog 日志文件的作用是什么?你执行 commit 操作之前,数据要么是停留在 buffer 中,要么是停留在 os cache 中,无论是 buffer 还是 os cache 都是内存,一旦这台机器死了,内存中的数据就全丢了。所以需要将数据对应的操作写入一个专门的日志文件 translog 中,一旦此时机器宕机,再次重启的时候,es 会自动读取 translog 日志文件中的数据,恢复到内存 buffer 和 os cache 中去。

translog 其实也是先写入 os cache 的,默认每隔 5 秒刷一次到磁盘中去,所以默认情况下,可能有 5 秒的数据会仅仅停留在 buffer 或者 translog 文件的 os cache 中,如果此时机器挂了,会丢失 5 秒钟的数据。但是这样性能比较好,最多丢 5 秒的数据。也可以将 translog 设置成每次写操作必须是直接 fsync 到磁盘,但是性能会差很多。

实际上你在这里,如果面试官没有问你 es 丢数据的问题,你可以在这里给面试官炫一把,你说,其实 es 第一是准实时的,数据写入 1 秒后可以搜索到;可能会丢失数据的。有 5 秒的数据,停留在 buffer、translog os cache、segment file os cache 中,而不在磁盘上,此时如果宕机,会导致 5 秒的数据丢失。

数据写入 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。

底层 lucene

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

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

倒排索引

在搜索引擎中,每个文档都有一个对应的文档 ID,文档内容被表示为一系列关键词的集合。例如,文档 1 经过分词,提取了 20 个关键词,每个关键词都会记录它在文档中出现的次数和出现位置。

那么,倒排索引就是关键词到文档 ID 的映射,每个关键词都对应着一系列的文件,这些文件中都出现了关键词。

举个栗子。

有以下文档:

对文档进行分词之后,得到以下倒排索引。

另外,实用的倒排索引还可以记录更多的信息,比如文档频率信息,表示在文档集合中有多少个文档包含某个单词。

那么,有了倒排索引,搜索引擎可以很方便地响应用户的查询。比如用户输入查询 Facebook,搜索系统查找倒排索引,从中读出包含这个单词的文档,这些文档就是提供给用户的搜索结果。

本文为ES系列的收集文章,原文见链接:https://cloud.tencent.com/developer/article/1739481

书虫罢了
关注 关注
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ES底层读写工作原理,看这一篇就够了
weixin_64314555的博客
11-24 1329
前言 es 就像是个黑盒,如果你不了解其中的内部原理,你还能干啥?你唯一能干的就是用 es 的 api去做最基本的读写数据了。要是出点什么问题,你啥都不知道,那还能指望你做什么呢? 所以为了能更深入的去了解es内部构造及解决使用过程中出现的问题,知道es底层工作原理就显得尤为重要了,那么接下来我将展开说说其底层工作原理是怎样的。 es 写数据过程 客户端选择一个 node 发送请求过去,这个 node 就是 coordinating node (协调节点)。 coordinating nod
Elasticsearch底层读写原理分析
机器熊的技术大杂烩
05-22 566
Lucene读写原理 要真正掌握Elasticsearch读写原理,首先要了解其底层Lucene的读写原理,推荐以下系列文章: Lucene学习总结之一:全文检索的基本原理 Lucene学习总结之二:Lucene的总体架构 Lucene学习总结之三:Lucene的索引文件格式(1) Lucene学习总结之三:Lucene的索引文件格式(2) Lucene学习总结之三:Lucene的索引文件格式(...
ElasticSearch写入原理及优化.docx
09-01
ElasticSearch写入原理及优化案例,此文章深入刨析了ElasticSearch在put和get时的原理。并且对于批量数据写入时进行优化给出最佳的方案和示例
ElasticSearch之插入原理分析
热门推荐
在此立一个IT职业上的flag:https://github.com/Zeb-D/my-review
01-18 1万+
本文章来源于:https://github.com/Zeb-D/my-review ,请star 强力支持,你的支持,就是我的动力。 [TOC] 提问 为什么es在查询的时候,流程是这么相对简单些,因为查询的时候这数据基本是按照某种顺序存放的,所以在插入的时候会相对复杂些; es 写入数据的工作原理是什么? es 查询数据的工作原理是什么?见上片文章 底层的 lucene 是什么? 倒排索引了...
ES读写原理
忽如一夜听春雨的博客
10-10 1801
ES读写原理总结
ES工作原理
weixin_43111776的博客
05-24 5826
文章目录一、架构设计二、工作流程1.ES写数据过程2.ES搜索数据过程3.ES读数据过程三、写数据底层原理四、倒排索引五、ES为什么查询效率很高1.倒排索引2.单词词典3.单词索引4.位图BitMap 一、架构设计 ElasticSearch 设计的理念就是分布式搜索引擎,底层其实还是基于 lucene 的。核心思想就是在多台机器上启动多个 ES 进程实例,组成了一个 ES 集群。ES 中存储数据的基本单位是索引index,其次还包含一些其他的概念mapping、document、field。 类比一下My
ElasticSearch 面试 4 连问,你顶得住么?
架构文摘
02-18 482
来源:https://github.com/doocs/advanced-java 面试ES 写入数据的工作原理是什么啊?ES 查询数据的工作原理是什么啊?底层的 Lucene 介绍一下呗?倒排索引了解吗? 面试官心理分析 问这个,其实面试官就是要看看你了解不了解 es 的一些基本原理,因为用 es 无非就是写入数据,搜索数据。你要是不明白你发起一个写入和搜索请求的时候,es 在干什么,那你真的是… 对 es 基本就是个黑盒,你还能干啥?你唯一能干的就是用 es 的 api 读写数据了。要是出点什么.
java 读写es_Elasticsearch基础与读写原理
weixin_34891592的博客
02-24 1050
ES应用场景:海量数据检索,数据分析ES分布式架构原理:es存储的基本单位是索引index,index就相当与mysql中的一张表,index中可以有一个或多个type,当存放多个type时尽量使每个type中的各部分字段是一样的,一般来说一个index中只存放一个type。mapping是type的结构定义,document是type中的具体的记录,field表示document中的具体的某一个...
elasticsearchelasticsearch es读写原理
Mrerlou的博客
02-20 3292
今天来学习下 es 的写入原理。
es 写入数据的工作原理是什么啊?es 查询数据的工作原理是什么啊?底层的 lucene 介绍一下呗?倒排索引了解吗?
change的博客
02-02 1378
面试es 写入数据的工作原理是什么啊?es 查询数据的工作原理是什么啊?底层的 lucene 介绍一下呗?倒排索引了解吗? 面试官心理分析 问这个,其实面试官就是要看看你了解不了解 es 的一些基本原理,因为用 es 无非就是写入数据,搜索数据。你要是不明白你发起一个写入和搜索请求的时候,es 在干什么,那你真的是...... 对 es 基本就是个黑盒,你还能干啥?你唯一能干的就是用 ...
Elasticsearch 34道面试题和答案.docx
最新发布
06-14
Elasticsearch 34道面试题和答案.docx
ES读写数据的工作原理
iris_csdn的博客
05-11 2048
一、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都搞定之后,就返回响应
Elasticsearch教程(14) 图解ES文档的读写原理
Java Spring Elasticsearch
06-22 949
ES Document DSL & Java API简介单文档API多文档API 简介 ES的Document API分单文档API和多文档API,它们的作用是对文档进行CRUD操作。 注意:所有的CRUD API都单index API,它们只接收一个index name或alias。 单文档API Index Get Delete Update 多文档API Multi Get Bulk Delete By Query Update By Query Reindex ...
ES 基本原理
much efforts, much luck
04-03 1万+
ElasticSearch原理 一、ES的适用场景 1、ES的主要应用分为两大类: 搜索类(带上聚合),考虑事务性,频繁更新,与现有数据库进行同步,通过ES进行查询聚合。 日志类,包括日志收集,指标性收集,通过beats等工具收集到kafka等Q中,通过logstash进行转换,输送到ES中,然后通过Kibana进行展示。 MySQL作为开源关系型数据库,应用范围非常广泛,非常适合于结构化数据存储和查询。在数据查询场景下,默认返回所有满足匹配条件的记录;如果业务数据为结构化数据,同时不需要特别关注排名和
【数据库学习】ElasticsearchES)原理
午后阳光
10-01 6128
Elasticsearch索引的精髓:一切设计都是为了提高搜索的性能 1,正向索引和反向索引 1)正向索引(正排索引) 从文档中查找字符串。关系型数据库使用的是正向索引。 2)反向索引(倒排索引) 从字符串查找文档。搜索引擎lucene使用的是反向索引。 假设有这么几条数据: ID Name Age Sex 1 Kate 24 Female 2 John 24 Male ...
ES原理解读
软件界的鼬神
08-16 2578
ES原理解读 摘要:本篇文章仅仅是谈谈个人对ES原理的理解,可能理解不对的地方,欢迎大家指出。 概念 ES就是elasticsearch,专门做文本搜索,其重要组件是Lucence。 Lucence就是一个jar包,它的主要功能就是提供封装好的各种索引算法、生成倒排索引等。 ES是基于Lucene的搜索服务器,它提供了一个分布式多用户能力的全问搜索引擎,且ES支持RestFulweb风格的url访问。ES是基于Java开发的开源搜索引擎,设计用于云计算,能够达到实时搜索,稳定、可靠、快速。此外,ES
ES核心原理及概念简介
一尘在心的博客
10-20 4468
1:ES简介 ES是一个分布式,可扩展,近实时的高性能都多与数据分析引擎,提供了收集,分析,存储数据三大功能,主要特性 分布式,零配置,亦庄亦用,自动发现,索引自动分片,索引副本机制,RestFul风格接口,多数据源和自动搜索负载,ES基于java编写,内部使用Lucene做索引及搜索,通过进一步封装Lucene解决了Lucene内部的复杂性,对外提供一个rest形式的API,对开发人员很友好,让全文搜索更简单。 2:倒排索引 中文信息检索领域,有正排索引,倒排索引两种,下面分别介绍下索引, 上
es的分布式架构原理
u013164612的专栏
02-12 311
待分析
Elasticsearch 查询数据的工作原理是什么?
勇往直前的专栏
08-20 986
面试ES 写入数据的工作原理是什么啊?ES 查询数据的工作原理是什么啊?底层的 Lucene 介绍一下呗?倒排索引了解吗? 面试官心理分析 问这个,其实面试官就是要看看你了解不了解 es 的一些基本原理,因为用 es 无非就是写入数据,搜索数据。你要是不明白你发起一个写入和搜索请求的时候,es 在干什么,那你真的是...... 对 es 基本就是个黑盒,你还能干啥?你唯一能干的就是用 es 的 api 读写数据了。要是出点什么问题,你啥都不知道,那还能指望你什么呢? 面试题剖析 es 写数据
es读写分离底层原理
06-01
ES读写分离底层原理主要是通过将数据分片存储和使用不同的节点来实现的。具体来说,ES将数据分为多个分片,每个分片被存储在不同的节点上,这些节点可以是主节点或副本节点。写操作只能在主节点上进行,主节点将写...
写文章

热门文章

  • ES 查询用法 25368
  • ES聚合用法 10433
  • Binlog 必知 1537
  • MySQL锁机制和加锁原理 1411
  • 试用c语言编写一高效算法,将一顺序存储的线性表(设元素均为整型)中所有零元素向表尾集中,其它元素则顺序向表头方向集中 1279

分类专栏

  • 设计模式(Go&Java) 2篇
  • 图解HTTP 阅读笔记
  • Netty-从基础到搭建IM通讯Server
  • Go 学习笔记 1篇
  • Go的分布式缓存开发日记

最新评论

  • 试用c语言编写一高效算法,将一顺序存储的线性表(设元素均为整型)中所有零元素向表尾集中,其它元素则顺序向表头方向集中

    CSDN-Ada助手: 多亏了你这篇博客, 解决了问题: https://ask.csdn.net/questions/8029500, 请多输出高质量博客, 帮助更多的人

  • ES 查询用法

    安于 ~ 此生: 哇,写的太好了。另外,可以补充介绍一下filter怎么使用吗?

  • ES 查询用法

    尽囍: 对第一次用es数据库的很很有帮助,赞

  • Binlog 必知

    uos_develop: 配置文件的目录不对,Path '--log-bin' is a directory name, please specify a file name

  • 试用c语言编写一高效算法,将一顺序存储的线性表(设元素均为整型)中所有零元素向表尾集中,其它元素则顺序向表头方向集中

    strive_day: 好好学习,又到了面向博客学习的时间了,文章很棒,谢谢分享

大家在看

  • LabVIEW风机滚动轴承监测系统 211
  • 【机器学习】模型评估与调优——精确提升预测准确性 891
  • 【QT】常用控件(二)
  • python+flask计算机毕业设计在线学习交流平台的设计与实现(程序+开题+论文) 790
  • JVM监控与调优工具

最新文章

  • 设计模式:原型模式
  • 单例模式(Go&Java)
  • Go学习笔记
2022年10篇
2021年21篇
2020年6篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

深圳坪山网站建设公司田寮网站优化推广明城网站优化规划吴川百度网站优化成华网站优化建设优化网站导航的秘密幸运星网站优化怎样优化网站标签保定网站推广优化网网站优化光山网站排名优化公司海口网站优化咨询均安网站优化教程巢湖网站怎么优化旅游网站优化代理网站301对优化影响东莞网站首页关键词优化费用武汉网站搜索优化团队如何申请网站优化工作优化排名网站别错过易速达怎样才能优化好一个网站宁夏网站优化哪家专业企业网站优化哪家好费用学习网站优化知识企业要做网站优化网站主题模型的优化方法深圳公司可以网站优化出名的服装行业网站优化咨询热线网站优化关键词的原则和方法重庆网站seo优化排名昆明网站推广优化代办机构香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

深圳坪山网站建设公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化