ElasticSearch 简介

一、什么是 ElastcSearch?

ElasticSearch 是基于 Lucene 的 Restful 的分布式实时全文搜索引擎。

1.1 ElasticSearh 的基本术语概念

  • index 索引
    索引类似与 mysql 中的数据库,ES 中的索引是存储数据的地方,包含了一堆有相似结构的文档数据。
  • type 类型
    类型是用来定义数据结构的,可以认为是 mysql 中的一张表,type 是 index 中的一个逻辑数据分类。
  • mapping 映射
    对字段的定义称为 mapping,可以认为是 mysql 中的表结构。
  • document 文档
    类似于 mysql 中的一行,不同之处在于 ES 中的每个文档可以用不同的字段,但是对于通用的字段应该具有相同的数据类型,文档是 ES 中的最小数据单元,可以认为一个文档就是一条记录。
  • field 字段
    field 是 ES 的最小单位,一个 document 里面有多个 field 。
mysqlES
数据库索引
类型
文档
字段
表结构映射
  • shard 分片
    单台机器无法存储大量数据,ES 可以将一个索引中的数据切分为多个 shard,分布在多台服务器上存储。有了 shard 就可以横向扩展,存储更多数据,让搜索和分析等操作分布到多台服务器上去执行,提升吞吐量和性能。
  • replica 副本
    任何一个服务器随时都可能故障或宕机,此时 shard 可能会丢失,因此可以为每个 shard 创建多个 replica 副本。replica 可以在 shard 故障时提供备用服务,保证数据不丢失,多个 replica 还可以提升搜索操作的吞吐量和性能。
  • 倒排索引
    在搜索引擎中,每个文档都有一个对应的文档 ID,文档内容被表示为一系列关键词的集合。例如,某个文档经过分词,提取20个关键词,每个关键词都会记录它在文档中出现的次数和出现位置。那么,倒排索引就是关键词到文档 ID 的映射,每个关键词都对应着一系列的文件,这些文件都出现了该关键词。有了倒排索引,搜索引擎可以很方便地响应用户的查询。
  • text 和 keyword类型的区别
    两个的区别主要分词的区别:keyword 类型是不会分词的,直接根据字符串内容建立倒排索引,keyword类型的字段只能通过精确值搜索到;Text 类型在存入 Elasticsearch 的时候,会先分词,然后根据分词后的内容建立倒排索引。
  • DocValues
    倒排索引也是有缺陷的,假如我们需要对数据做一些聚合操作,比如排序/分组时,lucene内部会遍历提取所有出现在文档集合的排序字段,然后再次构建一个最终的排好序的文档集合list,这个步骤的过程全部维持在内存中操作,而且如果排序数据量巨大的话,非常容易就造成solr内存溢出和性能缓慢。

DocValues 就是 es 在构建倒排索引的同时,构建了正排索引,保存了docId到各个字段值的映射,可以看作是以文档为维度,从而实现根据指定字段进行排序和聚合的功能。另外doc Values 保存在操作系统的磁盘中,当docValues大于节点的可用内存,ES可以从操作系统页缓存中加载或弹出,从而避免发生内存溢出的异常,docValues远小于节点的可用内存,操作系统自然将所有Doc Values存于内存中(堆外内存),有助于快速访问。

二、ES 写数据流程及原理

2.1 写数据流程

在这里插入图片描述

  1. 客户端选择一个节点发送请求过去,这个节点就是协调节点(coordinating node);
  2. 协调节点对 document 进行路由,将请求转发给对应的有 primary shard 的节点;
  3. 实际的节点上的 primary shard 处理请求,然后将数据同步到 replica node;
  4. 协调节点等到 primary node 和所有 replica node 都执行成功之后,就返回响应结果给客户端;

2.2 写数据底层实现原理

  1. 数据先写入内存缓存(Memory Buffer),然后定时(默认每隔1s)将内存缓存中的数据写入一个新的 segment 文件中,并写入文件缓存(Filesystem Cache)(同时清空内存缓存),这个过程就叫 refresh;
  2. 由于内存缓存和文件系统缓存都是基于内存的,如果服务器宕机,那么数据就会丢失,所以 ES 通过 translog 日志文件来保证数据可靠性,在数据写入内存缓存的同时,将数据写入 translog 文件中,在机器宕机重启时,ES 会自动读取 translog 日志文件中的数据,恢复到内存缓存和文件系统缓存中去。
  3. flush 操作:不断重复上面的步骤,translog 会变得越来越大,当 translog 文件默认每 30 分钟或者阈值超过 512M 时,就会触发 commit 操作,这个过程称为 flush 操作。

commit 操作

  • 1.将 Buffer 中的数据 refush 到 Filesysytem Cache 中,清空 Buffer;
  • 2.创建一个新的 commit point,同时强行将 Filesystem Cache 中目前所有的数据都 fsync 到磁盘文件中;
  • 3.删除旧的 translog 日志文件并创建一个新的 translog 日志文件,此时 commit 操作完成;

三、ES 搜索的过程

搜索过程被分为 Query then Fetch 两个阶段执行:

  • Query 阶段
    客户端发送请求到协调节点,协调节点将搜索请求广播到所有的 primary shard 或 replica shard。每个分片在本地执行搜索并构建一个匹配文档的大小为 from+size 的优先队列。每个分片返回各自优先队列中所有文档的 ID 和排序值给协调节点,由协调节点及执行数据的合并、排序、分页等操作,产生最终结果;
  • Fetch 阶段
    协调节点根据 doc Id 去各个节点上查询实际的 document 数据,由协调节点返回结果给客户端。
    原理
    1、协调节点对 doc Id 进行哈希路由,将请求转发到对应的节点,此时会使用 round-robin 随机轮询算法,在 primary shard 以及所有 replica shard 中随机选择一个,让读请求负载均衡;
    2、接受请求的节点返回 document 给协调节点;
    3、协调节点返回 document 给客户端;

四、Master 节点的选举

4.1 ES 的分布式原理

ES 会对存储的数据进行切分,将数据划分到不同的分片上,同时每一个分片会保存多个副本,主要是为了保证分布式环境的高可用。在 ES 中,节点时对等的,节点间会选取集群的 Master,由 Master 负责集群状态信息的改变,并同步给其他节点。

4.2 ES 如何选举 Master

ES 的选主是 ZenDiscovery 模块负责的,主要包含 Ping 和 Unicast这两部分;

  1. 确认候选主节点的最少投票通过数量;
  2. 对所有候选主节点根据 node Id 字典排序,每次选举每个节点都把自己所知道节点排一次序,然后选出第一个节点,暂时认为它是 Master 节点;
  3. 如果对某个节点的投票数达到阈值,并且该节点自己也选举自己,那这个节点就是 Master。否则重新选举,一直到满足上诉条件;

4.3 ES 如何避免脑裂现象

  • 当集群中 Master 候选节点数不小于 3 个时,可以通过设置最少投票通过数量,设置超过所有候选节点一半以上来解决脑裂问题,即设置为(N / 2)+1;
  • 当集群 Master 候选节点只有 2 时,这种情况是不合理的,最好把另外一个 node.master 改成 false;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

条件概率相关公式

条件概率 条件概率是指在事件 B 已经发生的情况下,事件 A 发生的概率,记作 P(A∣B) 。其定义公式为: ( P(B) > 0 ) 全概率公式 全概率公式用于计算由一组互斥且完备的事件构成的事件的概率。设 是一组互斥且完备…

【C++】C++11(lambda、可变参数模板、包装器、线程库)

🌈个人主页:秦jh_-CSDN博客🔥 系列专栏:https://blog.csdn.net/qinjh_/category_12575764.html?spm1001.2014.3001.5482 ​ 目录 前言 lambda表达式 C98中的一个例子 lambda表达式语法 函数对象与lambda表达式 新的类功能…

12.11数据结构-图

无向完全图:在无向图中,如果任意两个顶点之间都存在边,则称该图为无向完全图。 有向完全图:在有向图中,如果任意两个顶点之间都存在方向相反的两条弧,则称该图为有向完全图。 含有n个顶点的无向完全图有…

深度学习作业 - 作业十一 - LSTM

问题一 推导LSTM网络中参数的梯度,并的分析其避免梯度消失的效果 LSTM网络是为了解简单RNN中存在的长程依赖问题而提出的一种新型网络结构,其主要思想是通过引入门控机制来控制数据的流通,门控机制包括输入门、遗忘门与输出门,同…

Sigrity System Explorer DC IR Drop Analysis模式进行直流压降仿真分析操作指导

Sigrity System Explorer DC IR Drop Analysis模式进行直流压降仿真分析操作指导 Sigrity System Explorer DC IR Drop Analysis模式可以用于直流压降仿真分析,通过搭建简易拓扑用于前仿真分析,下面搭建一个简易的直流系统进行说明,以下图为例,准备好PCB的SPICE模型SpiceNe…

华为HarmonyOS实现跨多个子系统融合的场景化服务 -- 4 设置打开App Button

场景介绍 本章节将向您介绍如何使用Button组件打开APP功能,可调用对应Button组件打开另一个应用。 效果图展示 单击“打开APP”按钮,出现提示弹窗,单击“允许”,跳转至新的应用界面。 说明 弹窗是否弹出以及弹窗效果与跳转目标…

Spring Security 6 系列之二 - 基于数据库的用户认证和认证原理

之所以想写这一系列,是因为之前工作过程中使用Spring Security,但当时基于spring-boot 2.3.x,其默认的Spring Security是5.3.x。之后新项目升级到了spring-boot 3.3.0,结果一看Spring Security也升级为6.3.0,关键是其风…

[笔记] Ubuntu Server 24.04安装MySql8,并配置远程连接

1、MySql安装 #更新列表 sudo apt update ​ #安装mysql sudo apt install mysql-server ​ #运行状态 mysql sudo service mysql status ​ # 安装完成,已自动启动,该步可以不用 启动 mysql sudo /etc/init.d/mysql start ​ # 该步骤可以不配置&…

软件开发中 Bug 为什么不能彻底消除

在软件开发中,Bug无法彻底消除的原因主要包括:软件复杂度高、人员认知与沟通受限、需求和环境不断变化、工具与测试覆盖不足、经济与时间成本制约。其中“需求和环境不断变化”尤为关键,因为在实际开发中,业务逻辑随着市场与用户反…

使用ElasticSearch实现全文检索

文章目录 全文检索任务描述技术难点任务目标实现过程1. java读取Json文件,并导入MySQL数据库中2. 利用Logstah完成MySQL到ES的数据同步3. 开始编写功能接口3.1 全文检索接口3.2 查询详情 4. 前端调用 全文检索 任务描述 在获取到数据之后如何在ES中进行数据建模&a…

《拉依达的嵌入式\驱动面试宝典》—C/CPP基础篇(三)

《拉依达的嵌入式\驱动面试宝典》—C/CPP基础篇(三) 你好,我是拉依达。 感谢所有阅读关注我的同学支持,目前博客累计阅读 27w,关注1.5w人。其中博客《最全Linux驱动开发全流程详细解析(持续更新)-CSDN博客》已经是 Linux驱动 相关内容搜索的推荐首位,感谢大家支持。 《拉…

调用完BAPI_PO_CREATE1创建采购订单之后,如果不调用BAPI_TRANSACTION_COMMIT,数据库里面没有数

在调用完BAPI_PO_CREATE1创建采购订单之后,如果不调用BAPI_TRANSACTION_COMMIT,那么就无法生成真正的采购订单号,在数据库里面没有数 运行结果 特别注意

linux(CentOS8)安装PostgreSQL16详解

文章目录 1 下载安装包2 安装3 修改远程连接4 开放端口 1 下载安装包 官网下载地址:https://www.postgresql.org/download/ 选择对应版本 2 安装 #yum源 yum -y install wget https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redha…

如何通过递延型指标预测项目的长期成果?

递延型指标(Deferred Metrics)是指那些并不立即反映或直接影响当前操作、决策或行为的指标,而是随着时间的推移,才逐渐显现出影响效果的指标。这类指标通常会在一段时间后反映出来,或者需要一定的周期才能展现其成果或…

Reactor 响应式编程(第四篇:Spring Security Reactive)

系列文章目录 Reactor 响应式编程(第一篇:Reactor核心) Reactor 响应式编程(第二篇:Spring Webflux) Reactor 响应式编程(第三篇:R2DBC) Reactor 响应式编程&#xff08…

力扣-图论-14【算法学习day.64】

前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向和记录学习过程(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非…

Leetcode经典题11--加油站

题目描述 在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。 给定两个整数数组 gas 和…

前端退出对话框也就是点击右上角的叉,显示灰色界面,已经解决

文章目录 遇到一个前端bug,点击生成邀请码 打开对话框 然后我再点击叉号,退出对话框,虽然退出了对话框,但是显示灰色界面。如下图: 导致界面就会失效,点击任何地方都没有反应。 发现是如下代码的问题&am…

软件需求概述(尊享版)

软件需求与软件分析 软件需求:用户角度,注重软件外在表现 软件分析:开发者角度,注重软件内部逻辑结构 面向对象分析模型 类/对象模型(全部的类和对象) 对象-关系模型(对象之间的静态关系&…

配置Hugging_face国内镜像

目录 随着人工智能技术的蓬勃发展,Huggingface这一开源平台已成为研究者和开发者的宝贵资源,提供了丰富的预训练模型,助力自然语言处理任务的快速推进。然而,对于身处国内的我们而言,访问Huggingface主仓库时&#xff…