【ES入门一:基础概念】

集群层面上的基础概念

集群

由多个es实例组成的叫做集群
image.png

节点

单个ES的服务实例叫做节点。每个实例都有自己的名字,就是在配置文件中配置的‘node.name’中的内容。为了标识每个节点,每个节点启动后都会分配一个UID,存储在data目录。每个节点受到集群的管理,我们可以通过增加或减少节点来达到扩容和减容的目的

集群中的节点是有分类的:

  • 主节点:主节点在整个集群中是唯一的,主节点主要负责管理集群变更,元数据的更改
  • 数据节点:负责保存数据,要扩产存储时需要扩展这类节点。数据节点负责执行数据相关的操作,如:搜索、聚合、crud。其对节点机器的CPU、内存、I/O要求都比较高
  • 协调节点:负责接口客户端的请求,将请求路由到对应节点进行处理,把最终结果汇总到一起返回给客户端,因为需要处理结果集和对其进行排序,需要较高的CPU和内存资源
  • 预处理节点:预处理操作允许在写入文档前通过定义的一些processors处理器和管道对数据进行转换。默认情况下节点启动后就是预处理节点
  • 部落节点:未来会淘汰
  • Hot&Warm Node: 不同硬件配置的节点,用来实现Hot&Warm架构的节点,有利于降低集群部署成本。例如,在硬件资源好的机器中部署Hot类型的数据节点,而在硬件资源一般的机器上部署Warm节点

在新版的ES中,是这样配置的
image.png
如上示例,node.roles的值是一个数组,说明一个节点可以有多个角色。node.roles的可选项如下:
image.png
机智的你会发现,上述类型中并没有协调节点的类型选项,那怎么设置一个节点为协调节点那? 其实每个节点本身就是一个协调节点,如果你一定要指定一个节点为协调节点的话,可以这样设置:
image.png

分片

分片的概念其实很好理解,试想一下如果家里的书多到一个箱子放不下,是不是要找另外一个箱子来装,这些书好比就是海量的数据,一个机器放不下,就放到多个机器上来存储
image.png
一般来说,面对海量数据的时候,分布式系统可以通过增加机器数量来进行水平拓展。所以,系统需要将数据分成几个小块数据,并且尽量均匀的分配到各个机器上,然后通过某种策略找到对应数据所在的位置。分片是ES底层最基本的读写单元,分片是为了分割巨大的索引数据,让读写可以有多台机器来完成,从而提高系统的吞吐量

副本

为了保证数据可靠性,一般分布式系统都会对数据进行冗余备份,这个备份就是副本。**ES将数据副本分为主从2个类型:主分片+副分片。**在写入的过程中,先写入主分片,成功后再并发写副分片,在数据恢复时以主分片为主。多个副本除了可以保证数据可靠性,还有一个好处就是可以承担系统的读负载

可以在创建索引的时候,指定分片数量和副本数量:
image.png

数据层面上的基础概念

索引(相当于数据库表)

索引是一类相似文档的集合。ES将数据存储在一个或多个Index中,例如将用户数据存储到User Index中,而将订单数据存储到Order Index中。一个索引有一个或者多个分片,索引的数据会以某种方式分散到各个分片上去存储
image.png
如上图,索引有3个分片,主分片分别是P1、P2、P3,队友的副本分别是R1、R2、R3,仔细看主分片和其他副本分片不会同时分配在同一个节点上。这样是保证当一个节点的主分配下线时,其他节点上的从副本可以升级为主分配,保证数据的可靠性

Mapping (相当于建表语句)

Mapping定义了索引里面的文档到底有哪些字段 以及字段的类型,类似于数据库中表结构的定义。Mapping有2种作用:

  • 定义索引中各个字段的名称和对应的类型
  • 定义各个字段、倒排索引的相关设置,如使用什么分词器

需要注意的是,Mapping一旦定义完成后,已经定义的字段的类型是不能更改的

文档(相当于表记录)

我们往Es中写入的每一条数据都是一个文档,并且我们搜索也是以文档为单位的,所以文档是ES中的主要实体

我们在kibana或者postman中测试插入一条书本记录:
image.png
然后在查一下这条记录:
image.png
顺便解释一下返回的字段含义:

  • _index:文档所属的索引名字,也就是books
  • _type:文档所属的类型名称,现在ES7.x统一为_doc
  • _id: 文档的唯一id。如果我们插入时不指定文档id,es会随机分配,这里有利于数据均匀分散到各个分片
  • _version:文档的版本信息,并发读写时可以解决文档冲突
  • _score:相关性算法,代表查询的匹配性
  • _seq_no和_primary_term:es内部用来保证主分片和副本数据一致性的,后面的章节中我们会进行介绍**。当一个index每次选择主分配后都会有一个序号,记为_primary_term,它是递增的。在同一个index下,每次写入数据后都会有一个写入顺序号,记为_seq_no, 它也是递增的。_primary_term 和 _seq_no 在逻辑上构成了一个文档写入的唯一位置。**

字段(相当于表字段)

每个文档都有一个或者多个字段,例如books索引指定了书本有2个字段book_id和name两个字段,其实就是Json中的key,常见的类型有keyword、text、数字类型(integer、long、float、double等)、对象存储

  • keyword:适合存储简短、结构化的字符串,比如产品名称、产品id
  • text适合存储全文本数据,比如:文件内容、短信内容

下面是一个简单的示例:
image.png

词项

将全文本的内容进行分词后得到的词语就是词项了。例如“programmmers love cat”使用标准分词器后得到【programmmer、love、cat】这3个词项。需要注意的是:分词器除了进行分词外还会进行大小写转换、去复数等操作

倒排索引和正排索引

image.png

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

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

相关文章

【leetcode】三数之和 双指针

/*** param {number[]} nums* return {number[][]}*/ var threeSum function(nums) {nums.sort((a,b)>a-b);let result[];for(let i0;i<nums.length-2;i){if(nums[i]>0) return result;//因为求三数之和等于0&#xff0c;如果第一个数已经大于0&#xff0c;后面肯定无…

数仓实战——懂车帝数据指标体系建设和应用实践

目录 一、如何建立指标体系规范 1.1 懂车帝业务介绍 1.2 为什么要做指标体系规范 1.3 DataLeap 指标管理平台 1.4 指标体系建设框架 1.5 指标元数据管理规范 二、指标模型建设在数仓工作中的收敛 2.1 指标模型建设存在的问题 2.2 指标模型数仓层级建设标准 2.3 从指标…

stm32f103zet6笔记1-led工程

1、选择串口调试 2、LED0连接到PB5&#xff0c;PB5设置为推挽输出。PE5同理。 3、生成成对的.c,.h文件。 4、debugger选择j-link。 5、connection选择SWD。 6、编写bsp_led.c,bsp_led.h文件。 7、下载调试&#xff0c;可以看到LED0 500ms闪烁一次&#xff0c;LED1 1000ms闪烁一…

Node.js与Webpack笔记(一)

这里使用的16.19.0版本&#xff0c;官网和github没找到&#xff0c;去黑马2023年课程里找 篇幅较大会卡&#xff0c;此篇幅不写Webpack部分&#xff0c;留着下一篇 初识 1.什么是Node.js? Node.js 是一个独立的 JavaScript 运行环境&#xff0c;能独立执行 JS 代码&#xff…

基于机器学习的曲面拟合方法

随着科技的不断发展&#xff0c;机器学习成为了最近最热门的技术之一&#xff0c;也被广泛应用于各个领域。其中&#xff0c;基于机器学习的曲面拟合方法也备受研究者们的关注。曲面拟合是三维模型处理中的重要技术&#xff0c;其目的是用一组数据点拟合出平滑的曲面&#xff0…

STM32启动过程及反汇编

STM32从Flash启动的过程&#xff0c;主要是从上电复位到main函数的过程&#xff0c;主要有以下步骤&#xff1a; 1.初始化堆栈指针 SP_initial_sp&#xff0c;初始化 PC 指针Reset_Handler 2.初始化中断向量表 3.配置系统时钟 4.调用 C 库函数_main 初始化用户堆栈&#xf…

【软件测试】Postman中变量的使用

Postman中可设置的变量类型有全局变量&#xff0c;环境变量&#xff0c;集合变量&#xff0c;数据变量及局部变量。区别则是各变量作用域不同&#xff0c;全局变量适用于所有集合&#xff0c;环境变量适用于当前所选环境&#xff08;所有集合中均可使用不同环境变量&#xff09…

常用通讯协议的理解

一、通讯的一些基本认知 1、什么是异步或同步通信 异步通信在发送字符时&#xff0c;所发送的字符之间的时间间隔可以是任意的。发送端可以在任意时刻开始发送字符&#xff0c;因此必须在每一个字符的开始和结束的地方加上标志&#xff0c;即加上开始位和停止位&#xff0c;以…

通义千问1.5(Qwen1.5)大语言模型在PAI-QuickStart的微调与部署实践

作者&#xff1a;汪诚愚&#xff08;熊兮&#xff09;、高一鸿&#xff08;子洪&#xff09;、黄俊&#xff08;临在&#xff09; Qwen1.5&#xff08;通义千问1.5&#xff09;是阿里云最近推出的开源大型语言模型系列。作为“通义千问”1.0系列的进阶版&#xff0c;该模型推出…

为什么 Java 中只有值传递?

为什么 Java 中只有值传递&#xff1f; 开始之前&#xff0c;我们先来搞懂下面这两个概念&#xff1a; 形参&实参值传递&引用传递 形参&实参 方法的定义可能会用到 参数&#xff08;有参的方法&#xff09;&#xff0c;参数在程序语言中分为&#xff1a; 实参…

TCP和UDP可以使用同一个端口号吗?

TCP和UDP可以使用同一个端口号吗&#xff1f; 首先说答案&#xff1a;可以。怎么理解呢&#xff1f; 我想这个问题要从计算机网络通信谈起&#xff0c;学过计算机网络的同学&#xff0c;可能都还记得7层或者4层网络模型&#xff0c;TCP/UDP属于其中的传输层协议&#xff0c;在…

一个完整的Flutter项目的基本构成

目录 1.页面跳转2.本地数据库和读取2.1 在pubspec.yaml中添加数据库框架依赖2.2 创建db.dart 初始化数据库并创建表2.3 安装JsonToDart插件2.4 创建实体类 user_bean.dart2.5 增删改查&#xff1a; 3.网络请求数据解析UI渲染 本篇主要总结下一个完整的Flutter项目有哪些基本构成…

STM32基础--初识 STM32

什么是 STM32 对于STM32&#xff0c;从字面意思上来理解&#xff0c;ST是意法半导体&#xff0c;M是Microelectronics的缩写&#xff0c;其中32表示的是32位&#xff0c;那么整合起来理解就是&#xff1a;STM32就是指的ST公司开发的32位微控制器。在如今的32位控制器中&#x…

mq基础类设计

消息队列就是把阻塞队列这样的数据结构单独提取成一个程序独立进行部署。——>实现生产者消费者模型。 但是阻塞队列是在一个进程内部进行的&#xff1b; 消息队列是在进程与进程之间进行实现的&#xff0c; 解耦合&#xff1a;就是在分布式系统中&#xff0c;A服务器调用B…

Window系统搭建feishu-chatgpt企业AI机器人并实现无公网ip远程连接

文章目录 前言环境列表1.飞书设置2.克隆feishu-chatgpt项目3.配置config.yaml文件4.运行feishu-chatgpt项目5.安装cpolar内网穿透6.固定公网地址7.机器人权限配置8.创建版本9.创建测试企业10. 机器人测试 前言 在飞书中创建chatGPT机器人并且对话&#xff0c;在下面操作步骤中…

偶现bug如何分析和处理?

测试中比较郁闷的一件事就是遇到偶现bug。测个10次~20次才难得出来一次&#xff0c;甚至有时几天才会出现一次&#xff0c;真的去复现的时候又不记得自己执行了哪些步骤。所以遇到这样的问题都是比较头疼的。 举个例子&#xff1a; 打开一个论坛&#xff0c;有一个在线人数的信…

在Mac上安装nginx+rtmp 本地服务器

需要使用终端命令&#xff0c;如果没有Homebrew&#xff0c;要安装Homebrew,执行&#xff1a; ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 一、安装Nginx 1、先clone Nginx项目到本地&#xff1a; brew tap de…

云计算,用价格让利换创新空间?

文 | 智能相对论 作者 | 李源 ECS&#xff08;云服务器&#xff09;最高降36%、OSS&#xff08;对象存储&#xff09;最高降55%、RDS&#xff08;云数据库&#xff09;最高降40%…… 阿里云惊人的降幅&#xff0c;一次性把国内云计算厂商的价格战推到了白热化阶段。 这次能…

【C语言】linux内核napi_gro_receive

一、注释 // napi_gro_receive是网络设备接口的一个函数&#xff0c;它被NAPI&#xff08;New API&#xff09;网络轮询机制使用&#xff0c;用于接收和处理接收到的数据包。 // 这个函数通过通用接收分组&#xff08;GRO&#xff0c;Generic Receive Offload&#xff09;技术…

java数据结构与算法刷题-----LeetCode687. 最长同值路径

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 1. 深度优先&#xff0c;用下面的儿子判断2. 深度优先&#xff0…