当前位置: 首页 > news >正文

四、Elasticsearch 进阶

自定义目录

  • 4.1 核心概念
    • 4.1.1 索引(Index)
    • 4.1.2 类型(Type)
    • 4.1.3 文档(Document)
    • 4.1.3 字段(Field)
    • 4.1.5 映射(Mapping)
    • ==4.1.6 分片(Shards)==
    • ==4.1.7 副本(Replicas)==
    • 4.1.8 分配(Allocation)
  • 4.2 系统架构
  • 4.3 分布式集群
    • 4.3.1 单节点集群
    • 4.3.2 故障转移
    • 4.3.3 水平扩容
    • 4.3.4 应对故障
  • ==4.4 路由计算==
  • ==4.5 分片控制==
    • 4.5.1 写流程
    • 4.5.2 读流程
    • 4.5.3 更新流程
    • 4.5.4 多文档操作流程
  • 4.6 分片原理

4.1 核心概念

4.1.1 索引(Index)

一个索引就是一个拥有几分相似特征的文档的集合。在一个集群中,可以定义任意多的索引。

4.1.2 类型(Type)

在一个索引中,你可以定义一种或多种类型。(类似于MySQL中的表)
在 ES 7.x 中,默认不再支持自定义索引类型(默认类型为:_doc)

4.1.3 文档(Document)

ElasticSearch中 一条数据就是一个文档

4.1.3 字段(Field)

相当于是数据表的字段,是文档的属性。

4.1.5 映射(Mapping)

对 ES 中的每个字段做一些限制,这个就称之映射

如:某个字段的数据类型、默认值、分析器、是否被索引等等。这些都是映射里面可以设置的

4.1.6 分片(Shards)

一个索引可以存储超出单个节点硬件限制的大量数据。

比如,一个具有 10 亿文档数据的索引占据 1TB 的磁盘空间,而任一节点都可能没有这样大的磁盘空间。或者单个节点处
理搜索请求,响应太慢。

为了解决这个问题,Elasticsearch 提供了将索引划分成多份的能力,每一份就称之为分片。当你创建一个索引的时候,你可以指定你想要的分片的数量。每个分片本身也是一个功能完善并且独立的“索引”,这个“索引”可以被放置到集群中的任何节点上。

分片很重要,主要有两方面的原因:

  • 允许你水平分割 / 扩展你的内容容量。
  • 允许你在分片之上进行分布式的、并行的操作,进而提高性能/吞吐量。

至于一个分片怎样分布,它的文档怎样聚合和搜索请求,是完全由 Elasticsearch 管理的,对于作为用户的你来说,这些都是透明的,无需过分关心。

4.1.7 副本(Replicas)

在一个网络 / 云的环境里,失败随时都可能发生,在某个分片/节点不知怎么的就处于离线状态,或者由于任何原因消失了,这种情况下,有一个故障转移机制是非常有用并且是强烈推荐的。为此目的,Elasticsearch 允许你创建分片的一份或多份拷贝,这些拷贝叫做复制分片(副本)。

复制分片之所以重要,有两个主要原因:

  • 在分片/节点失败的情况下,提供了高可用性。因为这个原因,复制分片从不与原/主要(original/primary)分片置于同一节点上是非常重要的。
  • 扩展你的搜索量/吞吐量,因为搜索可以在所有的副本上并行运行

总之,每个索引可以被分成多个分片。一个索引也可以被复制 0 次(意思是没有复制)或多次。一旦复制了,每个索引就有了主分片(作为复制源的原来的分片)和副本(主分片的拷贝)。分片和副本的数量可以在索引创建的时候指定。在索引创建之后,你可以在任何时候动态地改变副本的数量,但是你事后不能改变分片的数量。

4.1.8 分配(Allocation)

将分片分配给某个节点的过程,包括分配主分片或者副本。



4.2 系统架构

一个运行中的 Elasticsearch 实例称为一个节点,而集群是由一个或者多个拥有相同cluster.name 配置的节点组成, 它们共同承担数据和负载的压力。当有节点加入集群中或者从集群中移除节点时,集群将会重新平均分布所有的数据。

当一个节点被选举成为主节点时, 它将负责管理集群范围内的所有变更(例如增加、删除索引,或者增加、删除节点等。) 而主节点并不需要涉及到文档级别的变更和搜索等操作,所以当集群只拥有一个主节点的情况下,即使流量的增加它也不会成为瓶颈。

任何节点都可以成为主节点。我们的示例集群就只有一个节点,所以它同时也成为了主节点。

作为用户,我们可以将请求发送到集群中的任何节点 ,包括主节点。 每个节点都知道任意文档所处的位置,并且能够将我们的请求直接转发到存储我们所需文档的节点。 无论我们将请求发送到哪个节点,它都能负责从各个包含我们所需文档的节点收集回数据,并将最终结果返回給客户端。



4.3 分布式集群

4.3.1 单节点集群

我们在包含一个空节点的集群内创建名为 users 的索引,为了演示目的,我们将分配 3个主分片和一份副本(每个主分片拥有一个副本分片)

{"settings" : {"number_of_shards" : 3,"number_of_replicas" : 1}
}

我们的集群现在是拥有一个索引的单节点集群。所有 3 个主分片都被分配在 node-1 。
在这里插入图片描述
在这里插入图片描述



4.3.2 故障转移

当集群中只有一个节点在运行时,意味着会有一个单点故障问题——没有冗余。

幸运的是,我们只需再启动一个节点即可防止数据丢失。当你在同一台机器上启动了第二个节点时,只要它和第一个节点有同样的 cluster.name 配置,它就会自动发现集群并加入到其中。

但是在不同机器上启动节点的时候,为了加入到同一集群,你需要配置一个可连接到的单播主机列表。之所以配置为使用单播发现,以防止节点无意中加入集群。只有在同一台机器上运行的节点才会自动组成集群。

如果启动了第二个节点,我们的集群将会拥有两个节点的集群 : 所有主分片和副本分片都已被分配
在这里插入图片描述
在这里插入图片描述

4.3.3 水平扩容

怎样为我们的正在增长中的应用程序按需扩容呢?

当启动了第三个节点,我们的集群将会拥有三个节点的集群 : 为了分散负载而对分片进行重新分配
在这里插入图片描述
在这里插入图片描述

但是如果我们想要扩容超过 6 个节点怎么办呢?
主分片的数目在索引创建时就已经确定了下来。实际上,这个数目定义了这个索引能够存储 的最大数据量。

但是,读操作——搜索和返回数据——可以同时被主分片 或 副本分片所处理,所以当你拥有越多的副本分片时,也将拥有越高的吞吐量

在运行中的集群上是可以动态调整副本分片数目的,我们可以按需伸缩集群。让我们把副本数从默认的 1 增加到 2

users 索引现在拥有 9 个分片:3 个主分片和 6 个副本分片。 这意味着我们可以将集群扩容到 9 个节点,每个节点上一个分片。相比原来 3 个节点时,集群搜索性能可以提升 3 倍

在这里插入图片描述
在这里插入图片描述

4.3.4 应对故障

我们关闭第一个节点,这时集群的状态为:关闭了一个节点后的集群。
在这里插入图片描述
我们关闭的节点是一个主节点。而集群必须拥有一个主节点来保证正常工作,所以发生的第一件事情就是选举一个新的主节点: Node 2 。在我们关闭 Node 1 的同时也失去了主分片 1 和 2 ,并且在缺失主分片的时候索引也不能正常工作。 如果此时来检查集群的状况,我们看到的状态将会为 red :不是所有主分片都在正常工作
在这里插入图片描述
幸运的是,在其它节点上存在着这两个主分片的完整副本, 所以新的主节点立即将这些分片在 Node 2 和 Node 3 上对应的副本分片提升为主分片, 此时集群的状态将会为yellow。



4.4 路由计算

当索引一个文档的时候,文档会被存储到一个主分片中。 Elasticsearch 如何知道一个文档应该存放到哪个分片中呢?

这个过程是根据下面这个公式决定的:
在这里插入图片描述

routing 是一个可变值,默认是文档的 _id ,也可以设置成一个自定义的值。 routing 通过hash 函数生成一个数字,然后这个数字再除以 number_of_primary_shards (主分片的数量)后得到余数 。这个分布在 0 到 number_of_primary_shards-1 之间的余数,就是我们所寻求的文档所在分片的位置

这就解释了为什么我们要在创建索引的时候就确定好主分片的数量 并且永远不会改变这个数量:因为如果数量变化了,那么所有之前路由的值都会无效,文档也再也找不到了。

所有的文档 API( get 、 index 、 delete 、 bulk 、 update 以及 mget )都接受一个叫做 routing 的路由参数 ,通过这个参数我们可以自定义文档到分片的映射。一个自定义的路由参数可以用来确保所有相关的文档都被存储到同一个分片中



4.5 分片控制

4.5.1 写流程

4.5.2 读流程

4.5.3 更新流程

4.5.4 多文档操作流程



4.6 分片原理

相关文章:

四、Elasticsearch 进阶

自定义目录 4.1 核心概念4.1.1 索引(Index)4.1.2 类型(Type)4.1.3 文档(Document)4.1.3 字段(Field)4.1.5 映射(Mapping)4.1.6 分片(Shards&#…...

海外云手机如何帮助亚马逊引流?

随着全球化的推进,出海企业和B2B外贸企业越来越注重海外市场的开拓,这已成为企业争夺市场份额的重要策略。本文将重点探讨海外云手机在优化亚马逊店铺引流方面的作用和优势。 海外云手机是一种在云端运行的虚拟手机,能够在单一芯片上多开几个…...

Gateway新一代网关

Gateway新一代网关 1、概述 ​ Cloud全家桶中有个很重要的组件就是网关,在1.x版本中都是采用的Zuul网关; ​ 但在2.x版本中,zuul的升级一直跳票,SpringCloud最后自己研发了一个网关SpringCloud Gateway替代Zuul。 ​ 官网&…...

Simulink中Scope图像导出在MATLAB上重新画

在Simulink中,Scope是一个常用的可视化工具,用于实时显示仿真过程中的信号波形。 1. 从Simulink Scope中导出数据 首先,您需要在Simulink的Scope中捕获或记录想要导出的数据。这通常通过配置Scope的“Logging”选项来实现。确保在仿真过程中…...

利用opencv获取系统时间

前一篇《c获取系统时间的方法-CSDN博客》博客介绍了如何在不同系统中获取系统时间的方法&#xff0c;但这些方法受系统的限制&#xff0c;如time.h就只能在Linux系统中使用。而opencv则不受系统限制&#xff0c;示例代码如下&#xff0c; #include <opencv2/opencv.hpp>…...

Go环境变量配置,及GOROOT、GOPATH的区别

一、安装Go go下载地址&#xff1a; https://golang.google.cn/dl/ windows下载安装&#xff0c;有两种方式。解压和直接安装 方式一&#xff1a;直接下载安装包。以.msi结尾的文件。例如&#xff1a; go1.22.1.windows-amd64.msi 下载后&#xff0c;双击后一直点下一步即…...

爬虫系列-CSS基础语法

&#x1f308;个人主页&#xff1a;会编程的果子君 &#x1f4ab;个人格言:“成为自己未来的主人~” CSS全称层叠样式表 &#xff0c;主要用来定义页面内容展示效果的一门语言&#xff0c;HTML&#xff1a;页面骨架&#xff0c;素颜CSS&#xff1a;页面效果美化&#xff1a…...

获取比特币和莱特币的实时价格

数据来源&#xff1a; https://datacenter.jin10.com/reportType/dc_bitcoin_current 代码&#xff1a; import akshare as ak import pandas as pd pd.set_option(display.max_columns, None) pd.set_option(display.max_rows, None) pd.set_option(display.width, 1000)cr…...

Axure案例分享—折叠面板(附下载地址)

今天和大家分享的Axure案例是折叠面板 折叠面板是移动端APP中常见的组件之一&#xff0c;有时候也称之为手风琴。咱们先看下Axure画出的折叠面板原型效果&#xff0c;然后再对该组件进行详细讲解。 一、功能介绍 折叠或展开多个面板内容&#xff0c;默认为展开一项内容&…...

SQLiteC/C++接口详细介绍sqlite3_stmt类(五)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;SQLiteC/C接口详细介绍sqlite3_stmt类&#xff08;四&#xff09;- 下一篇&#xff1a; 无 12. sqlite3_bind_text16函数 sqlite3_bind_text16函数用于将UTF-16编码的文本数据&#xff08;字符串&#xff09;绑定…...

单片机-- 数电(3)

编码器与译码器 译码 &#xff1a;将二进制代码转化为其他进制的代码 编码 &#xff1a;就是将其他代码转换为二进制码 编码器的类型 1二进制编码器 用n位二进制数码对2的n次方个输入信号进行编码的电路 2二-十进制编码器 将0到9十个十进制数转化为二进制代码的电路 2…...

基于Java中的SSM框架实现在线通用旅游平台网站系统项目【项目源码+论文说明】计算机毕业设计

基于Java中的SSM框架实现在线通用旅游平台网站系统演示 摘要 近几年来&#xff0c;计算机网络的发展得到了飞速的提升&#xff0c;由此展开的一系列行业大洗牌也由此开始。早些年只是人们只是对于计算机和互联网有了些基础的认识&#xff0c;现在它正在悄悄的改变着我们生活的…...

「数据分析」之零基础入门数据挖掘

摘要&#xff1a;对于数据挖掘项目&#xff0c;本文将学习应该从哪些角度分析数据&#xff1f;如何对数据进行整体把握&#xff0c;如何处理异常值与缺失值&#xff0c;从哪些维度进行特征及预测值分析&#xff1f; 探索性数据分析&#xff08;Exploratory Data Analysis&#…...

【力扣】383.赎金信

题目描述 给你两个字符串&#xff1a;ransomNote 和 magazine &#xff0c;判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以&#xff0c;返回 true &#xff1b;否则返回 false 。 magazine 中的每个字符只能在 ransomNote 中使用一次。 示例 1&#xff1a; …...

【Linux】传输层协议:TCP/UDP

目录 netstat pidof UDP协议 TCP协议 TCP协议段格式 TCP协议的相关机制 确认应答&#xff08;ACK&#xff09;机制 超时重传机制 连接管理机制 服务端状态转换 客户端状态转化 流量控制 流量控制常见问题&#xff1a; 滑动窗口 拥塞控制 延迟应答 面向字节流…...

Linux运维_Bash脚本_构建安装Systemd-250

Linux运维_Bash脚本_构建安装Systemd-250 Bash (Bourne Again Shell) 是一个解释器&#xff0c;负责处理 Unix 系统命令行上的命令。它是由 Brian Fox 编写的免费软件&#xff0c;并于 1989 年发布的免费软件&#xff0c;作为 Sh (Bourne Shell) 的替代品。 您可以在 Linux 和…...

中国城市统计年鉴、中国县域统计年鉴、中国财政统计年鉴、中国税务统计年鉴、中国科技统计年鉴、中国卫生统计年鉴​

统计年鉴是指以统计图表和分析说明为主&#xff0c;通过高度密集的统计数据来全面、系统、连续地记录年度经济、社会等各方面发展情况的大型工具书来获取统计数据资料。 统计年鉴是进行各项经济、社会研究的必要前提。而借助于统计年鉴&#xff0c;则是研究者常用的途径。目前国…...

C++:继承:面向对象编程的重要特性

(❁◡❁)(●◡●)╰(*▽*)╯(*/ω&#xff3c;*)(^///^)(❁◡❁)(❁◡❁)(●◡●)╰(*▽*)╯(*/ω&#xff3c;*)(❁◡❁)(●’◡’●)╰(▽)╯(/ω&#xff3c;)(///) C&#xff1a;继承&#xff1a;面向对象编程的重要特性 前言**继承**1.继承的概念及定义1.1继承的概念1.2继…...

oneMKL--FFT 基本使用

oneMKL–FFT 基本使用 本人基于官方文档的摘录与理解 oneMKL--FFT基本使用 oneMKL--FFT 基本使用1. Both FFT and Cluster FFT functions compute an FFT in five steps2 Computing an FFT2.1 缺省值2.2 Fourier Transform Funcions Code Examples2.2.1 One_dimentional In-p…...

软件测试工程师面试汇总Linux篇

Linux 命令篇 cd&#xff1a;切换目录 cd / #进入到系统根目录 cd . #进入到当前目录 cd .. #返回上层目录 cd /tmp #进入指定目录/tmp cd ~ #进入当前用户的家目录 2ls&#xff1a;列出当前目录的所有文件、文件夹&#xff08;目录&#xff09;信息&#xff1b; -l 列出目录或…...

告别编译!用vcpkg一键搞定OpenCV 4.5.3 + VTK 9.0.3 + OpenCV_Contrib的Windows开发环境

极速搭建OpenCVVTK开发环境&#xff1a;vcpkg全自动解决方案 每次开始新的计算机视觉项目&#xff0c;你是否也厌倦了反复折腾OpenCV、VTK的编译安装&#xff1f;那些漫长的等待、诡异的报错、版本冲突的噩梦&#xff0c;占据了本该属于创造性工作的宝贵时间。今天&#xff0c;…...

**发散创新:基于Python的连续学习模型实战与优化策略**在现代机器学习工程

发散创新&#xff1a;基于Python的连续学习模型实战与优化策略 在现代机器学习工程中&#xff0c;连续学习&#xff08;Continual Learning&#xff09; 已成为构建具备长期适应能力系统的必要技术路径。传统训练方式一旦遇到新任务就会“遗忘”旧知识——这正是灾难性遗忘问题…...

Wan2.1-umt5模型服务监控:使用Prometheus与Grafana搭建观测体系

Wan2.1-umt5模型服务监控&#xff1a;使用Prometheus与Grafana搭建观测体系 当你把一个模型服务部署到生产环境&#xff0c;最怕的是什么&#xff1f;是半夜突然收到报警说服务挂了&#xff0c;还是用户反馈说响应变慢了&#xff0c;你却一头雾水&#xff0c;不知道问题出在哪…...

如何用Python快速获取同花顺问财数据:3步实现金融数据自动化

如何用Python快速获取同花顺问财数据&#xff1a;3步实现金融数据自动化 【免费下载链接】pywencai 获取同花顺问财数据 项目地址: https://gitcode.com/gh_mirrors/py/pywencai 你是否曾经为了获取股票数据而手动翻找各种金融网站&#xff1f;是否因为数据格式不统一而…...

3步解锁惠普OMEN全部性能:OmenSuperHub终极优化指南

3步解锁惠普OMEN全部性能&#xff1a;OmenSuperHub终极优化指南 【免费下载链接】OmenSuperHub 使用 WMI BIOS控制性能和风扇速度&#xff0c;自动解除DB功耗限制。 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 你是否感觉自己的惠普OMEN游戏本性能被无形…...

CSS代码复用性太低怎么办_通过BEM结构提升组件模块化

BEM 能让 CSS 更易复用&#xff0c;因其通过「块__元素--状态」命名强制绑定样式与结构&#xff0c;明确依赖关系&#xff0c;避免全局冲突&#xff1b;补 BEM 应渐进式改造高频模块&#xff0c;严守命名规范&#xff1b;它不与 CSS-in-JS 或 Tailwind 冲突&#xff0c;但需统一…...

【稀缺技术首发】:全球首个支持多模态生成(文本/DSL/图表)的回滚影响面图谱分析工具——实测降低MTTR 68%,仅开放前500家企业内测资格

第一章&#xff1a;智能代码生成代码回滚检测 2026奇点智能技术大会(https://ml-summit.org) 智能代码生成系统在提升开发效率的同时&#xff0c;也引入了潜在的语义退化与行为不一致风险。当大语言模型生成的代码被合并至主干后&#xff0c;若其在运行时触发异常、性能劣化或…...

3分钟彻底清理:Bulk Crap Uninstaller批量卸载工具完全指南

3分钟彻底清理&#xff1a;Bulk Crap Uninstaller批量卸载工具完全指南 【免费下载链接】Bulk-Crap-Uninstaller Remove large amounts of unwanted applications quickly. 项目地址: https://gitcode.com/gh_mirrors/bu/Bulk-Crap-Uninstaller 你是否曾经因为Windows系…...

EdgeBoard FZ3不止于口罩检测:聊聊它在智慧零售和工业质检中的另类玩法

EdgeBoard FZ3边缘计算实战&#xff1a;从智慧零售到工业质检的跨界应用 当大多数开发者还在用EdgeBoard FZ3跑口罩检测demo时&#xff0c;一些先锋团队已经把它部署在便利店货架和工厂流水线上。这款巴掌大的边缘计算设备&#xff0c;正在重新定义AI落地的边界——不是作为实…...

智能代码生成器版本演进全景图(2022–2024核心算法对比白皮书)

第一章&#xff1a;智能代码生成器版本演进全景图&#xff08;2022–2024核心算法对比白皮书&#xff09; 2026奇点智能技术大会(https://ml-summit.org) 从模板驱动到语义理解的范式跃迁 2022年初代系统以规则引擎预置模板为核心&#xff0c;依赖显式语法树匹配与硬编码上下…...