架构师系列-搜索引擎ElasticSearch(二)

索引类型

正排索引

一个简单版的B+树索引大概是:叶子节点存放完整的数据,非叶子节点存放建立对应聚簇索引对应的字段(主键),一条可以使用聚簇索引的SQL,会依次从上往下进行B+树的查找。

create table user_info(
    id int,
    name varchar(16),
    hobby varchar(256)
);

索引查询

对应非聚簇索引只是叶子节点的内容存放的是该表的主键信息,查询的顺序则是先通过非聚簇索引的字段找到叶子节点中一致的单个或者多个主键id,再使用这些主键id进行回表,最终获得对应的完整实体数据。

全表扫描

如果根据用户爱好查询,对应用户列表,只能写like的sql,全表扫描逻辑

select * from user_info where hobby like '%足球%';
# 即使对hobby字段加了普通索引,使用innodb引擎,在查询中使用字符串中的索引也只能走最左前缀索引,即 like '足球%'

倒排索引

1. 使用“手机”作为关键字查询
生成的倒排索引中,词条会排序,形成一颗树形结构,提升词条的查询速度
2. 使用“华为手机”作为关键字查询
华为:1,3
手机:1,2,3
 

逻辑概念

索引(index)


ElasticSearch存储数据的地方,可以理解成关系型数据库中的数据库概念。


映射(mapping)


mapping定义了每个字段的类型、字段所使用的分词器等。相当于关系型数据库中的表结构。


文档(document)


Elasticsearch中的最小数据单元,常以json格式显示。一个document相当于关系型数据库中的一行数
据。


倒排索引


一个倒排索引由文档中所有不重复词的列表构成,对于其中每个词,对应一个包含它的文档id列表。


类型(type)
 

一种type就像一类表。如用户表、角色表等。在Elasticsearch7.X默认type为_doc
\- ES 5.x中一个index可以有多种type。
\- ES 6.x中一个index只能有一种type。
\- ES 7.x以后,将逐步移除type这个概念,现在的操作已经不再使用,默认_doc
 

物理概念

•集群(cluster):一组拥有共同的 cluster name 的 节点。
•节点(node) :集群中的一个 Elasticearch 实例


•索引(index) :es存储数据的地方。相当于关系数据库中的database概念
•分片(shard):索引可以被拆分为不同的部分进行存储,称为分片。在集群环境下,一个索引的不同


分片可以拆分到不同的节点中
•主分片(Primary shard):相对于副本分片的定义。
•副本分片(Replica shard)每个主分片可以有一个或者多个副本,数据和主分片一样。

集群角色
 

一个es实例代表了一个es节点,如果不通过node.roles设置节点的角色,一个es节点默认的节点角色有很多不同的角色。每个节点既可以是候选主节点,也可以是数据节点,可以通过elasticsearch.yml进行设置,默认为true。ES节点有以下角色:

master节点

master节点准确说是具有成为master节点资格的节点,即master-eligible node。

主要职责:master主要负责集群层面的相关操作,管理集群变更,如创建或删除索引,跟踪哪些节点是集群的一部分,并决定哪些分片分配给相关的节点。

    一个稳定的主节点对集群很重要,候选主节点可以通过节点选举过程被选举为主节点,主节点最好是专用的,不和其他角色共用,以免其他操作对master节点的负载造成影响,导致集群不可用。主节点负责轻量级集群范围的操作,任何不是仅投票节点的合格节点都可以选举成为主节点。

    主节点必须有个path.data目录,其内容在重启后依然存在,就像数据节点一样,这是存储集群元数据的地方,集群元数据描述了如何读取存储在数据节点上的数据,因此如果丢失,则无法读取存储在数据节点上的数据。

仅投票节点

只能参与主节点的投票选举环节,自己不能被选举为master节点。

主要职责:用来凑数。如果只部署了2个候选主节点,当一个节点挂掉后集群将会不可用,加入了仅协调节点则不一样,有了仅投票节点可以帮助快速选择一个主节点出来,并且仅投票节点不会选为主节点。它的资源消耗很小。

一个HA(高可用)集群至少三个符合主节点的节点,至少2个不是仅投票节点,即使集群故障也能选举出主节点。

数据节点

负责数据的存储和相关的操作,对数据进行增删改查和聚合等操作。

数据节点对CPU,内存,IO要求较高,在优化的时候需要监控数据节点的状态,当资源不够的时候,需要在集群中添加新的节点。

      数据节点保存包含已编入索引的文档分配,CRUD、搜索、聚合这些操作是IO密集型,内存密集型,CPU密集型,监控这些资源对数据节点非常重要。

预处理节点


这是从5.0版本开始引入的概念,预处理节点可以执行由一个或多个摄取处理器组成的预处理管道

主要职责:预处理操作运行在索引文档之前,即写入数据之前,通过事先定义好的一系列processors(处理器)和pipeline(管道),对数据进行某种转换、富化

角色介绍:能执行预处理管道,有自己独立的任务要执行,在索引数据之前可以先对数据做预处理操作,不负责数据存储也不负责集群相关的事务,类似于logstash 中 fiter 的作用,功能相当强大。
        在实际文档索引发生之前,使用Ingest节点预处理文档,Ingest节点拦截批量和索引请求,它应用转换,然后将文档传递回索引,在数据被索引之前,通过预定义好的处理管道对数据进行预处理。

仅协调节点


如果您取消了候选主节点的职责、保存数据和预处理文档的能力,那么您就剩下一个只能路由请求、处理搜索减少阶段和分发批量索引的协调节点
主要职责:协调节点将请求转发给保存数据的数据节点,每个数据节点在本地执行请求,并将结果返回给协调节点。
         协调节点收集完数据合,将每个数据节点的结果合并为单个全局结果,对结果收集和排序的过程可能需要很多CPU和内存资源。
角色介绍:本质上,仅协调节点的行为就像智能负载均衡器,通过从数据和符合主节点的节点卸载协调节点角色,仅协调节点可以使大型集群受益,他们加入集群并接收完整的集群状态,就像其他每个节点一样,他们使用集群状态将请求直接路由到适当的地方。

节点配置方式:

以下是一个节点的配置方式

整个集群搭建及详解在后续章节进行更新

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

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

相关文章

读所罗门的密码笔记20_更好的自己

1. 民营部门 1.1. 障碍最大的一步,与履行协议所需要的人才和技能有关 1.2. 多样性很好,不要过分依赖任何一种资源,因为政府会出于政治原因淡化问题,不尊重科学,甚至退出协议 1.2.1. 民营部门和非政府组织的强大联盟…

康耐视visionpro-CogFindCircleTool操作工具详细说明

◆CogFindCircleTool]功能说明: 通过用多个卡尺找到多个点来拟合所要找的圆 ◆CogFindCircleTool操作说明: ①.打开工具栏,双击或点击鼠标拖拽添加CogFindCircleTool工具 ②.添加输入图像,右键“链接到”或以连线拖拽的方式选择相应输入源 ③预期的圆弧:设置预期圆弧的…

第6章:6.4.2 案例二:爬取成语网站数据 (MATLAB入门课程)

讲解视频:可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇(数学建模清风主讲,适合零基础同学观看)_哔哩哔哩_bilibili 本案例用到的网址为:成语大全列表成语大全列表https…

NUC11更新 ESXi 8.0U2B 安装过程

1、下载 镜像名称:VMware-VMvisor-Installer-8.0U2b-23305546.x86_64.iso下载地址:https://docs.vmware.com/tw/VMware-vSphere/8.0/rn/vmware-vsphere-80-release-notes/index.html 2、制作镜像启动盘 2、查看镜像版本信息 3、启动设备安装系统 1、启…

web3项目自动连接小狐狸以及小狐狸中的各种“地址”详解

刚做web3的时候,比较迷糊的就是人们口中说的各种地址,小狐狸钱包地址,私钥地址,跳转地址,接口地址,交易地址,等等XX地址,常常感觉跟做链的同事们说话不在一个频道。 这一小节&#x…

【C Hash Map from Redis】

将Redis源码中的哈希表底层逻辑提取,并进行最小demo级测试将对应文件抽出,通过宏替换等方式保证源码编译通过main.c编写测试demo ,注册哈希函数和值比较函数(必选项) /* Hash Tables Implementation.** This file imp…

二、Flask会话技术和模板语言

Cookie Session # views.py: 路由 视图函数 import datetimefrom flask import Blueprint, render_template, request, redirect, session from .models import *# 蓝图 blue Blueprint(user, __name__)# 首页 可以写两个路由,都是访问同一个函数 blue.route(/) b…

java数据结构与算法刷题-----LeetCode371. 两整数之和

java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846 文章目录 位运算 位运算 解题思路:时间复杂度O( l o g 2 m a …

自顶向下的语法分析器

一、问题及解决: 什么是Dictionary File? 这种类型的文件为Windows虚拟PC 2007,虚拟机,它允许一些版本的Windows在一台计算机上运行生成。它包括像发音和单词的定义以及各种语言,如德国和法国的辞典数据。 如何实现语…

2024/4/15 AD/DA

AD(Analog to Digital):模拟-数字转换,将模拟信号转换为计算机可操作的数字信号 DA(Digital to Analog):数字-模拟转换,将计算机输出的数字信号转换为模拟信号 AD/DA转换打开了计算…

代码学习记录42---动态规划

随想录日记part42 t i m e : time: time: 2024.04.14 主要内容:今天开始要学习动态规划的相关知识了,今天的内容主要涉及:最长递增子序列 ;最长连续递增序列 ;最长重复子数组 ;最长公…

5G网络开通与调测ipv4

要求如下: 1. 勘站规划 1. 【重】首先观察NR频点,完成设备选型 2645--选择N41 3455--选择N78 4725--选择N79 设备选型如下:观察AAU的通道数,最大发射功率;选择N41的选型频段也要选41 2. …

算法:位运算

算法&#xff1a;位运算 常见位运算操作基本题型模拟加法数字查找总结 常见位运算操作 在C/C中&#xff0c;有比较丰富的位运算操作符&#xff0c;常见的有&#xff1a; &&#xff1a;按位与 |&#xff1a;按位或 ~&#xff1a;按位取反 ^&#xff1a;按位异或 <<&a…

stm32开发之threadx+modulex组合开发使用记录

前言 参考博客 论坛官方资料: 微软开发板核心芯片使用的是stm32f407zgtx&#xff0c;烧录工具使用的是jlink模块的构建使用的是脚本进行构建网上针对modulex的资料较少&#xff0c;这里做个记录 项目结构 逻辑框架 主程序代码 主函数 /** Copyright (c) 2024-2024&#xff0…

ansible创建用户账户和更新ansible库的密钥

1.创建⽤户帐户 从 http://materials/user_list.yml 下载要创建的⽤户的列表&#xff0c;并将它保存到 /home/greg/ansible 在本次考试中使⽤在其他位置创建的密码库 /home/greg/ansible/locker.yml 。创建名为 /home/greg/ansible/users.yml 的 playbook &#xff0c;从⽽…

空指针与野指针的辨析

空指针 空指针不指向任何实际的对象或者函数&#xff0c;反过来&#xff0c;任何的对象或者函数也不可能是空指针。 在程序中得到空指针的办法就是使用预定义的NULL&#xff0c; int *ip NULL; 校验一个指针是否为空指针可以用 if (ip NULL) NULL是标准规定的宏定义&am…

使用spring-ai快速对接ChatGpt

什么是spring-ai Spring AI 是一个与 Spring 生态系统紧密集成的项目&#xff0c;旨在简化在基于 Spring 的应用程序中使用人工智能&#xff08;AI&#xff09;技术的过程。 简化集成&#xff1a;Spring AI 为开发者提供了方便的工具和接口&#xff0c;使得在 Spring 应用中集…

Unity类银河恶魔城学习记录12-13 p135 Merge Skill Tree with Dogge skill源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili​​​​​​​ Inventory.cs using System.Collections.Generic; using Un…

链表-双指针-虚拟节点-力扣

链表--双指针--虚拟节点 力扣 142 环形链表求循环起点 重点力扣 21 合并两个有序链表力扣 86 分割链表力扣23 合并K个有序链表 -- 优先队列&#xff08;二叉堆 小顶堆&#xff09;重点力扣19 找倒数第N个元素 快慢指针 一次遍历 重点力扣876 快慢指针找中间节点力扣 160 相交链…

28、链表-两数相加

思路&#xff1a; 有几个方面需要考虑 双指针遍历&#xff0c;如果出现和大于10那么向前进1如果长度不一样那么长的部分直接落下并且考虑进1 的问题 代码如下&#xff1a; class Solution {public ListNode addTwoNumbers(ListNode l1, ListNode l2) {if (l1null||l2null){…