0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一文轻松图解搞懂Elasticsearch原理!

jf_ro2CN3Fa 来源:芋道源码 作者:芋道源码 2022-12-19 11:26 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

  • 认识倒排索引
  • 分布式架构原理
  • 写入数据的工作原理
  • 写数据底层原理
  • 读取数据的工作原理
  • 搜索工作原理
  • 删除/更新数据底层原理

ES 的集群模式和 kafka 很像,kafka 又和 redis 的集群模式很像。总之就是相互借鉴!

不管你用没用过 ES,今天我们一起聊聊它。就当扩展大家的知识广度了!

ac599d8c-7f43-11ed-8abf-dac502259ad0.jpg

认识倒排索引

「正排索引 VS 倒排索引:」

ac706026-7f43-11ed-8abf-dac502259ad0.jpg正排索引 VS 倒排索引

「倒排索引包括两个部分:」

  • 单词词典(Term Dictionary):记录所有文档的单词,记录单词到倒排列表的关联关系

    单词词典一般比较大,可以通过 B+ 树 或 哈希拉链法实现,以满足高性能的插入与查询

  • 倒排列表(Posting List):记录了单词对应的文档结合,由倒排索引项(Posting)组成:

    • 文档 ID
  • 词频 TF:该单词在文档中出现的次数,用于相关性评分

  • 位置(Position):单词在文档中分词的位置。用于语句搜索(Phrase Query

  • 偏移(Offset):记录单词的开始结束位置,实现高亮显示

ac7faee6-7f43-11ed-8abf-dac502259ad0.jpg倒排索引

ElasticSearch 的倒排索引:」

  • ElasticSearchJSON 文档中的每个字段,都有自己的倒排索引

  • 可以针对某些字段不做索引

    • 优点:节省存储空间
    • 缺点:字段无法被搜索

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/ruoyi-vue-pro
  • 视频教程:https://doc.iocoder.cn/video/

分布式架构原理

「分片 shard:一个索引可以拆分成多个 shard 分片。」

  • 主分片 primary shard:每个分片都有一个主分片。
  • 备份分片 replica shard:主分片写入数据后,会将数据同步给其他备份分片。

ES 集群部署在 3个 机器上(esnode1esnode2esnode3):

「创建个索引,分片为 3 个,副本数设置为 1:」

PUT/sku_index/_settings
{
"settings":{
"number_of_shards":3,
"number_of_replicas":1
}
}

响应:
{
"acknowledged":true
}
ac97105e-7f43-11ed-8abf-dac502259ad0.jpg分布式架构原理

ES 集群中有多个节点,会自动选举一个节点为 master 节点,如上图的 esnode2节点:」

  • 主节点(master):管理工作,维护索引元数据、负责切换主分片和备份分片身份等。
  • 从节点(node):数据存储。

「集群中某节点宕机:」

  • 主节点宕机:会重新选举一个节点为 主节点。
  • 从节点宕机:由 主节点,将宕机节点上的 主分片身份转移到其他机器上的 备份分片上。

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/yudao-cloud
  • 视频教程:https://doc.iocoder.cn/video/

写入数据的工作原理

「写单个文档所需的步骤:」

  1. 客户端选择一个 Node 发送请求,那么这个 Node 就称为 「协调节点(Coorinating Node)」

  2. Node 使用文档 ID 来确定文档属于分片 0,通过集群状态中的内容路由表信息获知分片0 的主分片在 Node1 上,因此将请求转发到 Node1 上。

  3. Node1 上的主分片执行写操作。如果写入成功,则将请求并行转发到 Node3 的副分片上,等待返回结果。

    当所有的副分片都报告成功,Node1 将向 Node (协调节点)报告成功。

acac3790-7f43-11ed-8abf-dac502259ad0.jpg写入数据的工作原理

Tips:客户端收到成功响应时,意味着写操作已经在主分片和所有副分片都执行完成。」

写数据底层原理

ac599d8c-7f43-11ed-8abf-dac502259ad0.jpg写数据底层原理

「写操作可分为 3 个主要操作:」

  1. 写入新文档: 这时候搜索,是搜索不到。

  • 将数据写入内存
  • 将这操作写入 translog 文件中
  1. refresh 操作: 默认每隔 1s ,将内存中的文档写入文件系统缓存(filesystem cache)构成一个 segment

    这时候搜索,可以搜索到数据。

  • 1s 时间:ES 是近实时搜索,即数据写入 1s后可以搜索到。」
  • flush 操作: 默认每隔 30 分钟 或者 translog 文件 512MB ,将文件系统缓存中的 segment 写入磁盘,并将 translog 删除。

translog 文件:」 来记录两次 flush(fsync) 之间所有的操作,当机器从故障中恢复或者重启,可以根据此还原

  • translog 是文件,存在于内存中,如果掉电一样会丢失。
  • 「默认每隔 5s 刷一次到磁盘中」

读取数据的工作原理

「读取文档所需的步骤:」

  1. 客户端选择一个 Node 发送请求,那么这个 Node 就称为 「协调节点(Coorinating Node)」
  2. Node 使用文档 ID 来确定文档属于分片 0,通过集群状态中的内容路由表信息获知分片0 有 2 个副本数据(一主一副),会使用随机轮询算法选择出一个分片,这里将请求转发到 Node1
  3. Node1 将文档返回给 NodeNode 将文档返回给客户端。
ad016b34-7f43-11ed-8abf-dac502259ad0.jpg读取数据的工作原理

「在读取时,文档可能已经存在于主分片上,但还没有复制到副分片,这种情况下:」

  • 读请求命中副分片时,可能会报告文档不存在。
  • 读请求命中主分片时,可能成功返回文档。

搜索工作原理

「搜索数据过程:」

  1. 客户端选择一个 Node 发送请求,那么这个 Node 就称为 「协调节点(Coorinating Node)」
  2. Node 协调节点将搜索请求转发到所有的 分片(shard):主分片 或 副分片,都可以。
  3. query 阶段」 :每个分片 shard 将自己的搜索结果(文档 ID)返回给协调节点,由协调节点进行数据的合并、排序、分页等操作,产出最终结果。
  4. fetch 阶段」 :由协调节点根据 文档 ID 去各个节点上拉取实际的文档数据。
ad107872-7f43-11ed-8abf-dac502259ad0.jpg搜索工作原理

举个栗子: 有 3 个分片,查询返回前 10 个匹配度最高的文档

  1. 每个分片都查询出当前分片的 TOP 10 数据
  2. 「协调节点」3 * 10 = 30 的结果再次排序,返回最终 TOP 10 的结果。

删除/更新数据底层原理

  • 「删除操作」commit 的时候会生成一个 .del 文件,里面将某个 doc 标识为 deleted 状态,那么搜索的时候根据 .del 文件就知道这个 doc 是否被删除了。
  • 「更新操作」 :就是将原来的 doc 标识为 deleted 状态,然后新写入一条数据。

「底层逻辑是:」

  • Index Buffer 每次 refresh 操作,就会产生一个 segment file。(默认情况:1秒1次)
  • 定制执行 merge 操作:将多个 segment file 合并成一个,同时将标识为 deleteddoc 「物理删除」 ,将新的 segment file 写入磁盘,最后打上 commit point 标识所有新的 segment file


审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据
    +关注

    关注

    8

    文章

    7315

    浏览量

    93985
  • spring
    +关注

    关注

    0

    文章

    341

    浏览量

    15776

原文标题:一文轻松图解搞懂Elasticsearch原理!

文章出处:【微信号:芋道源码,微信公众号:芋道源码】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Jtti.ccVPS和IP的关系是什么?讲清服务器背后的网络逻辑

    最基础的网络逻辑说起,带你把 VPS 和 IP 的关系捋清楚,看完你也能轻松搞懂、VPS和IP是什么关系? 简单来说,VPS是房子,IP是门牌号。 每台 VPS(虚拟专用服务器)都是通过虚拟技术从
    的头像 发表于 07-07 17:41 539次阅读

    图解单片机功能与应用(完整版)

    从基础知识的介绍出发,图文并茂,直观、系统地介绍了单片机的内部结构、工作原理和应用技巧。全书分为10章,内容包括51单片机编程资源图解、51单片机指令系统图解、汇编语言程序设计图解、输入/输出
    发表于 06-16 16:52

    单节点Elasticsearch+Filebeat+Kibana安装指南

    单节点Elasticsearch+Filebeat+Kibana安装指南
    的头像 发表于 05-21 11:06 983次阅读
    单节点<b class='flag-5'>Elasticsearch</b>+Filebeat+Kibana安装指南

    升压电路搞懂 升压电路技术文档合集

    升压电路图集合,升压电路设计方案,电路设计技巧,升压电路搞懂;给大家分享 升压电路技术文档合集
    的头像 发表于 05-15 15:58 1.7w次阅读
    升压电路<b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>搞懂</b> 升压电路技术文档合集

    漫画图解 电感器 抗干扰元器件指南(全彩PDF版)

    漫画图解电感基础知识(高清PDF) 内容:很形象的漫画和语言图解关于电感器的入门基础知识,让电子初学者也能轻松的看懂电子电路。 纯分享贴,有需要可以直接下载附件获取完整资料! (如果内容有帮助可以关注、点赞、评论支持
    发表于 05-13 15:49

    PCB封装图解

    PCB封装图解——详细介绍了各种封装的具体参数,并介绍了如何进行封装制作 纯分享贴,有需要可以直接下载附件获取文档! (如果内容有帮助可以关注、点赞、评论支持下哦~)
    发表于 04-22 13:44

    搞懂波峰焊工艺及缺陷预防

    波峰焊接是种复杂的工艺过程,涉及到金属表面、熔融焊料、空气等多种因素。焊接质量受到多种因素的影响,如印制板、元器件、焊料、焊剂、焊接温度、时间等工艺参数以及设备条件等。 因此,要获得个优良的焊接
    的头像 发表于 04-09 14:46 3070次阅读
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>搞懂</b>波峰焊工艺及缺陷预防

    搞懂波峰焊工艺及缺陷预防

    波峰焊接是种复杂的工艺过程,涉及到金属表面、熔融焊料、空气等多种因素。焊接质量受到多种因素的影响,如印制板、元器件、焊料、焊剂、焊接温度、时间等工艺参数以及设备条件等。 因此,要获得个优良的焊接
    发表于 04-09 14:44

    无刷电机的绕制和接线方法及实物图解

    下方附件可打开*附件:无刷电机的绕制和接线方法及实物图解.doc
    发表于 03-17 20:00

    搞懂POL全光网络

    在数字经济的浪潮中,企业积极拥抱人工智能、云计算、物联网(IoT)等前沿科技,促使业务云端化、连接多元化以及信息接入普及化,加速推动企业数智化进程。伴随转型的持续深入,企业园区网络遭遇前所未有的挑战:带宽需求激增,流量模式由东西向为主转向南北向为主,要求园区网络介质与架构革新,以匹配数智化发展的新需求。
    的头像 发表于 02-27 13:51 5733次阅读
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>搞懂</b>POL全光网络

    搞懂先进存储技术

    高性能计算(High Performance Computing, HPC)以超高的计算性能广泛应用于国民经济的各个领域,不仅用于气候模拟、石油勘探等传统产业,在生命科学、大数据等领域成为研究和解决挑战性问题的重要工具。高性能计算需要配备超强储存能力,本文对先进的存储技术做了简单介绍。
    的头像 发表于 02-26 17:42 1696次阅读
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>搞懂</b>先进存储技术

    如何在Linux环境下高效安装部署和配置Elasticsearch

    /CentOS-7-x86_64-DVD-2009.iso elasticsearch-7.10.0-linux-x86_64.tar.gz https://www.elastic.co/cn/downloads/past-releases
    的头像 发表于 01-16 11:49 1829次阅读

    在华为云上通过 Docker 容器部署 Elasticsearch 并进行性能评测

      2.2 安装 Docker   2.3 启动 Docker   3. 使用Docker部署Elasticsearch   3.1 拉取Elasticsearch镜像   3.2 启动
    的头像 发表于 01-13 13:36 890次阅读
    在华为云上通过 Docker 容器部署 <b class='flag-5'>Elasticsearch</b> 并进行性能评测

    搞懂汽车电控IGBT模块

    想要从零了解汽车电控IGBT模块看这篇就够了!根据乘联会数据,2022年6月新能源车国内零售渗透率27.4%,并且2022年6月29日欧盟对外宣布,欧盟27个成员国已经初步达成致,欧洲将于
    的头像 发表于 01-07 17:08 2413次阅读
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>搞懂</b>汽车电控IGBT模块

    构建高效搜索解决方案,Elasticsearch &amp; Kibana 的完美结合

    前言 构建高效搜索解决方案,FlexusX 服务器与 Elasticsearch & Kibana 的完美结合,为企业带来云端搜索新体验。FlexusX 实例以其卓越性能与灵活扩展性,确保高并发搜索
    的头像 发表于 12-27 13:48 640次阅读
    构建高效搜索解决方案,<b class='flag-5'>Elasticsearch</b> &amp; Kibana 的完美结合