ES-ES的基本概念

ES的基本概念

一、文档

1.1 文档相关概念

  • ES是面向文档的,文档是所有可搜索数据的最小单位,可以对比理解为关系型数据库中的一条数据
    • 日志文件中的一条日志信息
    • 一本电影的具体信息/一张唱片的详细信息
  • 文档会被序列化成JSON格式保存在ES中
    • JSON对象由字段组成
    • 每个字段都有对应的字段类型
    • 格式比较灵活,不需要预先定义
    • 字段的类型可以指定(在索引中的Mapping中指定),也可通过ES自动推算
    • 支持数组和嵌套
  • 每个文档都有一个Unique ID
    • 可以自定义ID
    • 也可以通过ES自动生成

1.2 文档的元数据

  • 元数据,用于标注文档的相关信息

    • _index:文档所属的索引名
    • _type:文档所属的类型名,7.0开始每个索引只能创建一个type
    • _id:文档的唯一ID
    • _source:文档原始的JSON数据
    • _all:整合所有的字段内容,7.0以后已经废除
    • _version:文档的版本信息,在高并发的情况下会判断文档版本后再进行写入
    • _score:相关性打分
    {"_index" : "movies","_type" : "doc","_id" : "1","_score" : 14.69302,"_source" : {"year" : 1995,"@version" : "1","genre":["Adventure","Animation","Children","Comedy","Fantasy"],"id":"1","title":"Toy Story"}
    }
    

二、索引

2.1 索引的基本概念

  • 索引是文档的容器,是一类文档的集合(可以理解为关系型数据库中的表)
    • 索引(index)体现了逻辑空间的概念:每个索引都有自己的mapping定义,用于定义包含的文档的字段名和字段类型
      • 索引的Mapping定于文档字段的类型
      • Setting定义不同的数据分布
    • 分片(shard)体现了物理空间的概念:索引中的数据分散在Shard上
2.2 与关系型数据库对比
关系型数据库ES
TableIndex
RowDocument
ColumnField
SchemaMapping
SQLDSL

三、节点

3.1 节点的基本概念

ES支持分布式部署,其分布式架构支持存储的水平扩容,并且提高了系统的可用性,部分节点停止服务,整个集群的服务不受影响。

ES的分布式架构,不通的集群通过不通的名字来区分,默认集群的名称为elasticsearch,通过配置文件的修改或者直接在启动命令中指定 -E cluster.name=mymain进行设定,一个集群支持一个到多个节点。

  • 节点就是一个ES的实例

    • 本质上就是一个Java进程
    • 一台机器上可以运行多个ES进程
  • 每个节点都有一个名字,通过配置文件配置或者启动的时候通过-E node.name=node1指定

  • 每个节点在启动以后都会分配一个UUID,保存到data目录下

  • Master节点的概念

    • 每个节点启动后,默认就是一个Master-eligible节点,可以通过node.master:false禁止
    • Master-eligible节点可以参加选主流程,成为Master节点
    • 当第一个节点启动的时候,它会将自己选举成Master节点
    • 每个节点上都保存了集群的状态,只有Master节点才能修改集群的状态信息
      • 集群状态,维护了一个集群中必要的信息:
        • 所有的节点信息
        • 所有的索引和其相关的Mapping和Setting信息
        • 分片的路由信息
      • 如果任意节点都能修改信息会导致数据的不一致性
  • Data节点

    • 可以保存数据的节点叫做Data节点。负责保存分片数据,在数据扩展上起到了至关重要的作用
  • Coordinating节点

    • 负责接受Client的请求,将请求分发到合适的节点,最终把结果汇集到一起

    • 每个节点都默认起到Coodinating节点的职责

      问题:当一个机器上启动多个实例的时候,谁是Master节点,谁是Data节点,谁是Coordinating节点,谁提供的9200端口

  • Ingest节点

  • 主要用于对数据进行预处理。Ingest节点类似于Logstash中的Filter,可以对数据进行解析、转换和过滤等操作。当数据到达Ingest节点时,它会先对数据进行预处理,然后再将数据发送到Elasticsearch的Data节点进行索引和存储。

  • Hot&Warm节点

    • 不通硬件配置的Data Node,用来实现Host & Warm架构,降低集群部署的成本
    • Hot节点:这些节点通常用于存储和处理最新的、访问频率最高的数据,也就是所谓的“热”数据。Hot节点通常配置有高性能的硬件(如SSD固态硬盘),以确保快速的数据写入和检索速度。由于这些数据是最常被访问的,因此将它们存储在高性能的节点上可以确保最佳的用户体验。
    • Warm节点:与Hot节点相比,Warm节点用于存储那些访问频率较低但仍然需要保留的数据。这些数据可能不再是最新的,但仍然具有一定的价值,需要被检索和分析。Warm节点通常配置有较低性能的硬件(如HDD机械硬盘),以降低存储成本。通过将不常访问的数据迁移到Warm节点,可以释放Hot节点的存储空间,使其能够更高效地处理新的、热门的数据。
  • Machine Learning 节点

    • 负责跑机器学习的Job,做数据的异常检测
  • Tribe节点

    • 5.3 开始使用Cross Cluster Search
    • Tribr Node连接到不通的ES集群并支持将这些集群当成一个单独的集群处理
3.2 配置节点类型
  • 开发环境中一个节点可以承担多种角色

  • 生产环境中,应该设置单一的角色

    节点类型配置参数默认值
    master eligiblenode.mastertrue
    datanode.datatrue
    hot&warmnode.attr.box_type
    ingestnode.ingesttrue
    coordinating only每个节点默认都是coordinating节点,设置其他类型全部为false
    machine learningnode.mltrue

四、分片

4.1 分片的基本概念
  • 在Elasticsearch中,分片(Shard)是数据的基本单位,每个索引在创建时都会被分成多个分片。这些分片是数据的容器,用于存储索引中的数据。每个分片实际上是一个独立的索引实例,包含了数据的一个完全独立的物理副本,这意味着每个分片都包含了数据的一个完整复制集。

  • 分片的主要目的是为了在Elasticsearch集群中分发数据,以提供高可用性和负载均衡。通过将数据分散到不同的分片上,Elasticsearch可以在多个节点上并行处理数据,从而提高性能和可扩展性。每个分片都可以独立扩展,而不会影响其他分片的性能。此外,Elasticsearch还支持动态分片分配,这意味着可以自动将新的索引或文档分配到最合适的分片上。

  • 在Elasticsearch中,分片可以跨多个节点分布,以提高数据的可用性和可扩展性。当集群扩容或缩小时,Elasticsearch会自动在节点间迁移分片,以使集群保持平衡。分片可以是主分片(primary shard)或者是复制分片(replica shard),主分片用于存储实际数据,而复制分片则是主分片的副本,用于提高数据的可靠性和可用性。

  • 我们举例来说明分片的概念与作用:

    • 分片是把一个索引分成多个小部分的过程。还是用图书馆作为例子,想象图书馆里的书太多了,一个书架放不下,于是你决定把书分散到多个书架上。每个书架就相当于一个分片。这样,当你想要找书时,你可以同时搜索多个书架,从而加快搜索速度。
4.2 分片的规划

在Elasticsearch中,分片的规划是非常重要的,因为它直接影响到集群的性能、扩展性和数据安全性。以下是一些建议,帮助你规划Elasticsearch中的分片:

  1. 考虑数据量:首先,你需要估计索引的总数据量。这将帮助你决定需要多少个分片来存储这些数据。每个分片的大小应该控制在一定的范围内,以避免过大或过小的分片导致性能问题。
  2. 节点和分片的关系:分片数应该与集群中的节点数相匹配。通常,建议将分片数设置为节点数的2-3倍,这样可以在节点故障时提供一定的容错能力。但是,也要避免分片数过多,以免给集群带来过大的压力。
  3. 主分片和副本:每个索引都应该有一个或多个主分片,以及零个或多个副本分片。主分片用于存储实际数据,而副本分片则是主分片的复制品,用于提高数据的可靠性和查询性能。副本分片的数量可以根据你的需求进行调整,通常建议设置为1-2个副本。
  4. 动态调整:随着数据量的增长和集群规模的变化,你可能需要动态地调整分片数。Elasticsearch提供了重新索引和分片调整的功能,允许你在不中断服务的情况下调整分片配置。
  5. 监控和调优:定期监控集群的健康状况、分片分布和性能指标是非常重要的。通过使用Elasticsearch提供的监控工具和API,你可以了解集群的实时状态,并根据需要进行调优。
  6. 考虑分片键:在创建索引时,你需要选择一个合适的分片键。分片键的选择将决定数据如何被分配到不同的分片中。选择一个合适的分片键可以确保数据的均匀分布和查询性能的优化。

五、倒排索引

在了解倒排索引之前我们先讲解一下什么是正排索引,正排索引就是根据ID查询具体的数据,可以类比于一本书的目录,我们可以快速的根据目录中的页码快速找到对应的内容,而假如现在我们有一个关键词,需要知道关键词所在页码,那么就需要一个关键词和页码的一个索引来帮助我们根据关键词找到对应的页码,这个索引就叫做倒排索引。

概念图书搜索引擎
正排索引目录文档ID到文档内容和单词的关联
倒排索引索引页单词到文档ID的关联

我们来举个正排索引和倒排索引的例子:

  • 正排索引

    文档ID文档内容
    1Mastering ElasticSearch
    2ElasticSearch Server
    3ElasticSearch Client
  • 倒排索引

    关键词计数文档ID:位置
    Mastering11:1
    ElasticSearch31:2,2:1,3:1
    Server12:2
    Client13:2

倒排索引的组成:

  • 单词词典,记录所有文档的单词,记录单词到倒排列表的关联关系
    • 单词词典一般比较大,可以通过B+树或者哈希链算法来实现,以满足高性能的插入和查询
  • 倒排列表,记录单词对应的文档组合,由倒排索引项组成
    • 倒排索引项
      • 文档ID
      • 词频TF,该单词在文档中出现的次数,用于相关性打分
      • 位置,该单词在文档分词中的位置,用于语句搜索
      • 偏移,记录单词的开始结束位置,用于高亮显示

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

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

相关文章

【LeetCode】升级打怪之路 Day 08:反转字符串

今日题目: 344. 反转字符串541. 反转字符串 II151. 反转字符串中的单词 目录 LC 344. 反转字符串 【easy】LC 541. 反转字符串 II 【easy】LC 151. 反转字符串中的单词 【better】 ⭐⭐⭐ 今天主要完成了三道与字符串反转有关的题目,整体难度不大&#x…

react-组件进阶

1.目标 能够实用props接收数据 能够实现父子组件之间的通讯 能够实现兄弟组件之间的通讯 能够给组件添加props校验 能够说出生命周期常用的钩子函数 能够知道高阶组件的作用 2.目录 组件通讯介绍 组件的props 组件通讯的三种方式 Context props深入 组件的生命周期 Render-p…

数据结构:循环队列

一、队列的概念 操作受限的线性表,允许在队列的一端执行入队操作,另一端执行出队操作 先进先出(FIFO) 1.顺序队列 物理结构连续,依赖于数组实现 队列中有一个队头指针和队尾指针,队头指针保存每次要出队的元素,队…

SpringCloud--Nacos解析

一、Nacos简介 Spring Cloud Alibaba Nacos是一个用于动态服务发现、配置管理和服务管理的平台,是阿里巴巴开源的一个项目,旨在简化微服务架构中的服务治理。Nacos 提供了一组简单易用的特性集,可以快速的实现动态服务发现、服务配置、服务元…

2024食品工程与智慧农业国际学术会议(ICFESA2024)

2024食品工程与智慧农业国际学术会议(ICFESA2024) 一、【会议简介】 2024食品工程与智慧农业国际学术会议(ICFESA2024)是一个专注于食品工程和智慧农业领域的国际学术会议。会议将在杭州举行,该会议旨在汇聚全球相关领域的专家学者&#xff…

LiveGBS流媒体平台GB/T28181功能-查看国标设备下通道会话列表直播|回放|对讲|播放|录像|级联UDP|TCP|H264|H265会话

LiveGBS流媒体平台GB/T28181功能-查看直播|回放|对讲|播放|录像|级联UDP|TCP|H264|H265会话 1、会话列表2、会话类型3、搭建GB28181视频直播平台 1、会话列表 LiveGBS-> 国标设备-》点击在线状态 点击会话列表 2、会话类型 下拉会话类型可以看到 直播会话、回放会话、下载…

Windows网络问题:局域网内电脑连接wifi连不上

Windows网络问题:局域网内电脑连接wifi连不上 前提连接的网络没有问题 1、身边是否有人能连接上此网络 2、判断是否是无线网络的问题,寻找有线网络尝试 3、通过手机热点测试是否是电脑本身问题 经过上述的几步判断,如果是电脑本身的问题进行…

pytorch中的setattr和getattr:多层网络堆叠

同一个网络模块的多层叠加是深度学习中常用的操作,如果使用nn.Sequential将这些模块叠加到一起就会显得很呆: self.blocknn.Sequential(capsule_net(),capsule_net(),capsule_net(),capsule_net(),capsule_net(),capsule_net(), )对于这种方法&#xff0…

Qt中tableView控件的使用

tableView使用注意事项 tableView在使用时,从工具栏拖动到底层页面后,右键进行选择如下图所示: 此处需要注意的是,需要去修改属性,从UI上修改属性如下所示: 也可以通过代码修改属性: //将其设…

栈和队列——c语言实现栈

本节复习栈和队列中栈的增删查改。 首先回顾一下栈的性质: 栈的存储数据的原则是“后入先出”, 先入的在栈底, 后入的在栈顶。 弹出数据时在栈顶弹出。 开始实现栈的接口 栈的所有函数接口 //栈的初始化 void StackInit(Stack* pst); //入栈…

某查查首页瀑布流headers加密

目标网站: 某查查 对目标网站分析发现 红框内的参数和值都是加密的,是根据算法算出来的,故进行逆向分析。 由于没有固定参数名,只能通过搜索headers,在搜索的位置上打上断点,重新请求。 断点在此处断住&a…

解决“source ~/.bashrc 无效”的问题

dockerfile 在执行 RUN source ~/.bashrc 的时候会报错: RUN source ~/.bashrc: 0.188 /bin/sh: 1: source: not found 原因 dockerfile默认的shell是sh,无法使用source 解决方案 在 RUN source ~/.bashrc 前面添加以下指令,将shell改为ba…

Vue/React 前端高频面试

说一说vue钩子函数 钩子函数是Vue实例创建和销毁过程中自动执行的函数。按照组件生命周期的过程分为:挂载阶段 -> 更新阶段 -> 销毁阶段。 每个阶段对应的钩子函数分别为:挂载阶段(beforeCreate,created,befor…

半小时到秒级,京东零售定时任务优化怎么做的?

导言: 京东零售技术团队通过真实线上案例总结了针对海量数据批处理任务的一些通用优化方法,除了供大家借鉴参考之外,也更希望通过这篇文章呼吁大家在平时开发程序时能够更加注意程序的性能和所消耗的资源,避免在流量突增时给系统…

Data Leakage and Evaluation Issues inMicro-Expression Analysis 阅读笔记

IEEE Transactions on Affective Computing上的一篇文章,做微表情识别,阅读完做个笔记。本文讨论了Data Leakage对模型准确度评估的影响,及如何融合多个微表情数据集,从而提升模型的准确度。工作量非常饱满,很认真&…

Oracle PL/SQL Programming 第8章:Strings 读书笔记

总的目录和进度,请参见开始读 Oracle PL/SQL Programming 第6版 具有字符数据类型的变量存储文本并由字符函数操作。 本章重点讨论单字节字符集,不涉及Unicode 或多字节字符集,不涉及CLOB(字符大对象)和 LONG。 Str…

HTTP与HTTPS-HTTPS 的应用数据是如何保证完整性的?

资料来源 : 小林coding 小林官方网站 : 小林coding (xiaolincoding.com) HTTPS 的应用数据是如何保证完整性的? TLS 在实现上分为握手协议和记录协议两层 TLS 握手协议就是我们前面说的 TLS 四次握手的过程,负责协商加密算法和生成对称密钥,后续用此密…

Spring Boot和Spring MVC常用注解

在Spring Boot和Spring MVC中,注解(Annotations)扮演着至关重要的角色,它们简化了传统的XML配置方式,使得开发过程更加直观和便捷。下面将介绍一些在Spring Boot和Spring MVC中常用的注解及其用法:Spring Boot常用注解 @SpringBootApplication:Spring Boot的核心注解,用于…

Redis的发布订阅功能教程,实现实时消息和key过期事件通知功能

Redis的发布订阅 Redis的发布/订阅(Pub/Sub)功能是一种消息传递模式,用于实现消息发布者(publisher)和订阅者(subscriber)之间的消息通信。在这种模式下,消息的发送者(发布者)将消息发送到特定的频道(channel),而订阅了该频道的接收者(订阅者)将会接收到这些消息…

SpringMVC的文件上传与下载

SpringMVC文件上传: 使用:org.springframework.web.multipart.commons.CommonsMultipartResolver 使用:headPhoto.transferTo(file); 2、文件存储位置问题 String realPath = request.getServletContext().getRealPath("/upload") String dir = new File(realP…