ES进阶教程

news2024/11/30 14:43:52

1.分片Shards

        一个索引可以存储超出单个结点硬件限制的大量数据,es提供了将索引划分为多份的能力,每一份都称之为分片.当创建索引时,可以指定想要的分片数量.每个分片本身也是一个功能完善并且相对独立的索引.这个索引可以被放在集群中的任何结点上.

        分片的重要性

                1.允许水平切割/扩展内容容量

                2.允许在分片之上进行分布式的,并行的操作,进而提高性能/吞吐量.

        而分片的分布,聚合搜索请求是完全有es管理的,对于用户来说都是透明的,无需过分关心。

        容易混淆的概念:一个Lucene索引在es中称作是分片,而一个es索引是多个分片的集合.在es在索引中搜索的时候,他发送查询到每一个属于索引的分片,然后合并每个分片的结果到一个全局的结果集.

2.副本Replicas

        重要原因:

                1.在分片/结点失败的情况下,提高了可用性,所以分片从来不和原/主要分片置于同一节点上.

                 2.扩展搜索量/吞吐量,因为搜索可以在所有的副本上并行进行。

        默认情况下:

                每个索引被分片成一个主分片和一个赋值,这意味着,如果在集群中至少两个几点,你的索引将会有一个主分片和另外一个复制分片 。 

3.系统架构

        集群由多个具有相同的cluster.name配置的结点组成,他们共同承担数据和负载的压力.当有结点加入或者从集群中移除时,集群会重新平均分配所有的数据。

        当一个节点被选举为主节点时,他的管理范围会相应的有所变更,比如增加,删除索引时。而主节点并不需要涉及到文档级别的变更和搜索操作,所以当集群只拥有一个主节点的情况下,即时流量的增加他也不会成为瓶颈。任何结点都能成为主节点,每个结点都知道任意文档的所处位置,并且能够将我们的请求直接转发至存储着文档的结点中,并最终返回个客户端。es对这一切的管理都是透明的。     

4.单节点集群    

        将单节点分配成3个主分片和一个副本

#PUT http://127.0.0.1:1001/users
{
    "settings" : {
        "number_of_shards" : 3,
        "number_of_replicas" : 1
    }
}

5.路由计算       

        当索引一个文档的时候,文档会被存储到一个主分片中。es是如何知道这个文档应该发的那个放到那个主分片中呢?es是根据下面的这个公式来决定的:

shard = hash(routing) % number_of_primary_shards

        routing是一个可变值,默认是文档的id,也可以设置成一个自定义的值,routing通过hash函数生成一个数字,然后这个数字在除以number_of_primary_shards(主分片数量)后得到余数就是我们想要寻求的文档的所在位置.也就是说,我们不能随便的修改主分片的数量,要在刚开始就指定主分片的数量.

        当发送请求时,比较好的做法是轮询所有的集群中的结点,这样能更好的处理负载.

6.数据读流程出现的问题

        在读数据请求时,如果数据的副本已经在主分片上存在,但是还没有同步到副本分片上,这种情况下,副本分片可能会报告数据并不存在的问题,但是主分片会成功 的返回文档,一旦索引请求成功返回个用户,那么文档在主副分片都是可用的

7.更新流程

 

         部分更新一个文档的流程如下:

                1.客户端向node1 发送更新请求

                 2.node1将这个请求转发到主分片所在的node3

                 3.node3从主分片检索文档,修改_source字段中的JSON,并且常会进行重新索引主分片的文档,如果文档已经被另一个进程修改,他会重新尝试步骤3,超过最大尝试数量retry_on_conflict后放弃尝试

                  4.如果node3成功创更新文档,他将新版本的文档并行转发到node1和node2上的副本分片,重新建立索引.一旦所有的副本都成功返回,那么node3向协调结点也返回成功,协调结点向客户端返回成功 .

                    需要注意的是,当主分片把更改转发到副本分片时,他不会转发更新请求,相反,他会转发完整的文档新版本.这些转发会以异步的形式呈现,并不能保证他们顺序抵达.如果es只转发更改请求,那么可能咦错误的顺序更改应用,导致得到损坏的文档.

8.批量处理

        mget和 bulk API的模式类似于单文档模式。**区别在于协调节点知道每个文档存在于哪个分片中。它将整个多文档请求分解成每个分片的多文档请求,并且将这些请求并行转发到每个参与节点。

        协调节点一旦收到来自每个节点的应答,就将每个节点的响应收集整理成单个响应,返回给客户端。

     用单个 mget 请求取回多个文档所需的步骤顺序     

  1. 客户端向 Node 1 发送 mget 请求。
  2. Node 1为每个分片构建多文档获取请求,然后并行转发这些请求到托管在每个所需的主分片或者副本分片的节点上。一旦收到所有答复,Node 1 构建响应并将其返回给客户端

bulk API, 允许在单个批量请求中执行多个创建、索引、删除和更新请求。

 

        bulk API 按如下步骤顺序执行:

      1.客户端向Node 1 发送 bulk请求。
       2. Node 1为每个节点创建一个批量请求,并将这些请求并行转发到每个包含主分片的节点主机。
        3.主分片一个接一个按顺序执行每个操作。当每个操作成功时,主分片并行转发新文档(或删除)到副本分片,然后执行下一个操作。一旦所有的副本分片报告所有操作成功,该节点将向协调节点报告成功,协调节点将这些响应收集整理并返回给客户端。

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

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

相关文章

相控阵天线(九):平面阵列天线综合(不可分离型切比雪夫分布、圆口径泰勒综合、可分离型分布、配相抵消法)

目录简介不可分离型分布不可分离型切比雪夫圆口径泰勒综合可分离型分布可分离切比雪夫综合可分离泰勒综合平面阵列配相抵消法简介 按行、列排列的可分离型矩形平面阵,其阵因子是两个正交排列的直线阵阵因子的乘积。可分离的平面阵方向图在两个主面内是满足预期副瓣…

Docker创建Spring容器【方便服务迁移】

📃目录跳转📚简介:🎃 1.上传jar包🎉2.创建Dockerfile文件🗺️3.生成容器🍥4.查看本地镜像🚀5.运行镜像🔭6.使用工具访问接口🏆总结📚简介&#xf…

网上预约挂号系统的设计与实现

项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下,你想解决的问…

si9000 单端(线)差分(动)线板层结构与阻抗计算

常见的单端(线)阻抗计算模式: Surface Microstrip 1B 在下图(表面,或暴露,微带)信号线暴露(空气)和参考电源或接地平面。根据电介质相对于迹的排列(在迹的下方或上方)对结构进行分类。下图显示了在信号轨迹(指定为1B)以下使用单一介电层的表…

elasticsearch数据存储结构,springboot集成elasticsearch

一、数据存储结构 结合数据库的结构理解起来就会比较清楚: 1)索引(Index)>数据库(Database)。 2)类型(Type)>表(Table)。 3)文档…

Ubuntu 20.04.05安装PCL-1.12.0

1、安装QT-5.9.9 链接: Ubuntu20.04安装、配置、使用、卸载QT5.9.9以及第一个编写QT程序. 或者 链接: 在ubuntu用命令安装和卸载qt4、qt5(亲测有效). 2、安装VTK-7.1.1PCL-1.12.0 链接: ubuntu20.04下安装pcl. 或者 链接: PCL1.12VTK7.1.1 && Ubuntu20.04.3VSCode(官…

Python一炮句搞定网页登录验证码自动输入

前言:本来是“账号密码”的登录方式,突然就增加了验证码输入,还30秒一变。 查看元素 链接为一个png图片文件,每半分钟一更新,意思就是慢了还不行。 思路:OCR识别图片中的…

【并发】Java并发线程池底层原理详解与源码分析(下)

【并发】Java并发线程池底层原理详解与源码分析(下) 前情回顾 上篇文章地址 【并发】Java并发线程池底层原理详解与源码分析(上)_面向鸿蒙编程的博客-CSDN博客线程池不允许使用 Executors 去创建,而是通过 ThreadPo…

浅析数据迁移工具Sqoop

title: Sqoop系列 第一章 Sqoop理论 1.1 概述 sqoop 是 apache 旗下一款“Hadoop 和关系数据库服务器之间传送数据”的工具。 导入(Import)数据:MySQL,Oracle 导入数据到 Hadoop 的 HDFS、HIVE、HBASE 等数据存储系统 导出&…

八、Gateway

文章目录一、Gateway网关1.网关的作用二、配置网关1.创建gateway模块2.引入依赖3.编写application.yml4.启动gateway模块,查看是否能访问user-service服务三、路由断言工厂Route Predicate Factory四、GatewayFilter(过滤器)1.添加过滤器方式…

IDEA2022用maven创建的Servlet项目

因为博主太菜太笨,总是记不住大佬教的步骤,写一篇博客记录一下。 有什么不对,或者疑惑可以请假这位大佬(没错就是那个被我问烦的大佬)ljj大佬 第一步:新建maven 新建Project 选择webapp 初始界面需要等待…

S32K144之ADC

一,S32K144的ADC介绍 1,ADC模块特性 S32K14x和S32K14xW包含两个12位ADC模块,ADC0和ADC1。 S32K11x包含一个12位的ADC模块,ADC0。 不同封装,ADC0和ADC1所包含的通道数不一样,LQFP100来说ADC0和ADC1分别有16…

Spark - RDD 算子介绍及使用 Scala、Java、Python 三种语言演示

一、RDD 的起源 在 RDD 出现之前, 当时 MapReduce 是比较主流的, 而 MapReduce 如何执行流程如下: 多个 MapReduce 任务之间只能通过磁盘来进行传递数据,很明显的效率低下,再来看 RDD 的处理方式: 整个过程是共享内存的, 而不需…

利用pycharm调试ssh远程程序,并实时同步文件

或许你的服务器由于设置问题,不能通过Vscode进行远程调试python程序,那么本篇文章提供了利用pycharm远程调试程序的方法,且使用的编译器可以是服务器中的虚拟环境的编译器,可以实时同步本地与服务器的文件内容。希望对你能够有所帮…

【Oracle系列1】Oracle 的connect权限和create session的区别

【Oracle系列1】Oracle 的connect权限和create session的区别 背景 oracle数据库新建用户之后是无法登录的,需要赋予connect角色或者create session权限。 注意: connect是角色不是权限,create session是权限不是角色。角色是权限的集合。…

c++中的结构体

结构体:属于用户自定义的数据类型,允许用户存储不同的数据类型 语法:struct 结构体名 {结构体成员列表};通过结构体创建变量的三种方式:1、struct 结构体名 变量名2、struct 结构体名 变量名{成员1值,成员…

第一个Shader程序

shader 很复杂,我学习的过程中也确实感受到了,需要会数学、图形学、编程语法等等知识。不如让我们直接看看 Shader 到底是什么?直接应用起来。或许没有那么复杂。 1、在场景中新建一个正方体,如下图 2、在 project 面板下新建一…

超级棒,使用 LIME 和 SHAP 可轻松解释机器学习模型的预测

在本文中,我将介绍两个可以帮助了解模型的决策过程的模型 LIME 和 SHAP。 作为数据科学家或机器学习从业者,将可解释性集成到机器学习模型中可以帮助决策者和其他利益相关者有更多的可见性并可以让他们理解模型输出决策的解释。 文章目录技术提升模型SH…

day02 redis

day02 Redis 第一章 Redis持久化机制 Redis的高性能是由于其将所有数据都存储在了内存中,为了使Redis在重启之后仍能保证数据不丢失,需要将数据从内存中同步到硬盘(文件)中,这一过程就是持久化。Redis 提供了一系列不同的持久化选项&#x…

MyBatis框架入门(含实例)

目录 1.MyBatis简介 2.ORM框架 3.数据持久化 4.Mybatis入门实战案例 4.1 下载mybatis的jar包 4.2 将jar包导入工程中 4.3 配置Mybatis的核心配置文件 4.3.1 MyBatis核心文件模板(mybatis-config) 4.3.2 mybatis-config模板的设置 4.4 创建User 实体类 4.5定义DAO层M…