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

Elasticsearch知识

目录

  • Elasticsearch逻辑设计和物理设计
    • 逻辑设计
    • 物理设计
  • Elasticsearch原理
    • 倒排索引
    • 文档的分析过程
    • 保存文档
    • 搜索文档
    • 写数据的底层原理
      • 数据刷新(fresh)
      • 事务日志的写入
  • ES在大数据量下的性能优化
    • 文件系统缓存优化
    • 数据预热
    • 文档(Document)模型设计
    • 分页性能优化
  • Elasticsearch和DB的差异
  • 参考

Elasticsearch逻辑设计和物理设计

逻辑设计

  • 索引(Index):类似于ES中的一张表,可以通过映射(Mapping)定义索引的结构和设置。
  • 类型(Type):可以对ES的索引进一步做划分。ES 7中已经移除类型,建议一个索引一个类型即可
  • 映射(Mapping):索引结构的定义,包括索引的字段,字段类型,索引的设置等。
  • 文档(Document):索引中的一条记录。

物理设计

Elasticsearch本身是分布式搜索引擎。它的高可用高性能就是通过分片实现的。

  • 主分片:一个索引可以划分成多个主分片,通过将主分片分布到不同的ES节点,从而实现高性能。
  • 副本分片:副本分片和主分片保持数据同步,和主分片不能分布在同一个节点,从而实现主分片的读能力的横向扩展,同时保证主分片不可用时实现故障转移

Elasticsearch原理

倒排索引

每个文档都有唯一的文档ID,一个文档经过分析器变成一组词条

倒排索引:记录词条以及词条出现的文档ID的数据结构,同时倒排索引还会记录词条在文档中出现的频率

文档的分析过程

示例引用自《Elasticsearch实战》。

在文档加入倒排索引之前,需要经过分析器执行分析,转换成一组词条(Term)。

以下是文档“share your experience with Nosql & big data technologies”的分析过程。

  1. 过滤字符:字符过滤器转换个别字符。如:将&转换成and
  2. 切分文本:分词器将文本切分成多个词条
  3. 过滤分词:一组分词过滤器按序转换每个分词。如:小写分词过滤器,将所有的分词转换成小写。
  4. 创建索引:为词条创建倒排索引

保存文档

保存文档是写入主分片,然后,同步到副本分片;搜索文档是根据轮询算法,从主分片副本分片读取。

  1. 通过计算文档ID哈希值,决定文档的目标分片。如果文档的目标分片不在当前节点,将文档转发到目标分片的节点。
  2. 将文档加入倒排索引
  3. 数据同步所有的副本分片,即在副本分片创建倒排索引
  4. 所有的副本分片创建倒排索引成功,节点响应结果给客户端

说明:

  • 协调节点:接收客户端请求/响应客户端的节点,负责数据的请求转发,数据的汇总。

搜索文档

  1. 协调节点使用round-robin随机循环算法,将请求转发到包含完整数据集合的分片集合(包括主分片和副本分片)。

  2. 协调节点收集各节点的返回结果,将结果返回客户端:

    2.1 查询阶段(Query Phase):每个分片将自己的搜索结果的文档ID返回给协调节点,协调节点进行数据的合并排序分页,得到最终结果。

    2.2 拉取阶段(Fetch Phase):协调节点根据文档ID取各个节点上拉取文档数据,最终返回给客户端。
     

写数据的底层原理

Elasticsearch会将数据先写入内存的缓冲区,这时数据并不能用于查询。

  • 刷新数据:缓冲区过大或者默认每隔1秒,将缓冲区中的数据写入段文件(segment file),然后清空缓冲区。数据在缓冲区时是不可见的,变成段文件后,就可以用于查询。段文件不可变,所以每隔一秒ES就会生成一个新的段文件。
  • 事务日志的写入:为了防止数据丢失,ES会实时将数据写入事务日志(tranlog)文件,事务日志文件是在磁盘里的。
  • 数据冲刷:事务日志过大或者默认每隔30分钟,会触发数据冲刷,会将一个提交点(commit point)中的所有段文件(在操作系统缓冲区中的数据)和缓冲区所有的数据写入磁盘,然后,删除事务日志

数据刷新(fresh)

数据刷新负责将缓冲区的数据写入段文件。段文件实际上就Lucene索引。出于性能考虑,数据并不是直接写入磁盘的,而是默认每隔1秒,数据从缓冲区写入系统缓存(OS Cache),变成段文件。之后,就可以通过搜索接口查询到对应的数据了。因为,数据都是在内存中的,所以一旦宕机,数据会丢失。ES通过事务日志保存了数据,所以,能够保证数据的恢复。

ES是接近实时的(Near Real-time)

因为,数据是每1秒刷新的系统缓存,之后才可以访问,所以是接近实时的。

事务日志的写入

为了防止数据丢失,数据在写入缓冲区的同时写入事务日志文件。事务日志同样是先写入系统缓存(OS Cache),然后刷新到磁盘。

index.translog.durability参数- 刷盘策略

index.translog.durability取值:

  • request:每次请求都执行fsync刷盘,ES要等待日志文件刷盘后才返回成功响应。能够保证数据基本不丢失,但是,性能低下,不推荐使用。
  • async:每隔5秒fsync一次translog数据到磁盘,默认值。兼顾数据的持久化和性能。

数据丢失

因为事务日志的默认刷盘方式是每隔5秒fsync一次,所以如果ES宕机,最多可能丢失5秒的数据。

ES在大数据量下的性能优化

文件系统缓存优化

ES中的索引数据会持久化到磁盘中,查询的时候,索引数据从磁盘加载到系统缓存中。

这里的filesystem cache就是上文的OS cache,都是指系统缓存。

ES搜索性能非常依赖于系统缓存,因为系统缓存是在内存中的。如果查询走系统缓存,可以达到几毫秒几百毫秒不等的查询效率;但是,查询走磁盘的话,搜索性能就要达到秒级。

最佳的情况下,机器的内存要达到容纳总数据量的一半。

ES + HBase

为了减少ES的数据量,可以仅在ES索引中保存用于检索的几个字段,将完整的记录保存在HBase中。查询时,先通过ES获取doc id,然后,根据doc id到HBase获取完整的数据。

数据预热

开启定时任务,定时加载一些频繁被访问的热点数据。如:电商系统中,如iphone,后台开个任务,每隔1分钟访问一次相关数据,刷新到系统缓存中。

文档(Document)模型设计

ES尽量不要使用复杂的操作,如:join(关联)/nested/parent-child,对性能影响很大。

可以在Java应用里完成关联,将关联好的数据写入ES中。

分页性能优化

如果要取第100页的10条数据,那么ES的分页流程如下:

  1. 每个分片上的前1000条数据都查到协调节点上,如果有5个分片,那就是5000条数据。
  2. 接着协调节点对这5000条数据做合并、排序
  3. 返回第100页的10条数据。

所以,ES的分页越深,查询越慢。

有两种优化方案:

  1. 不允许深度分页:系统直接不允许深度的分页。
  2. 通过scroll API:类似于游标,或者Java中的迭代器,访问效率可以达到毫秒级。不过只能一页页的访问,不能随机跳到任意一页访问

Elasticsearch和DB的差异

  • Elasticsearch不支持事务,表连接。
  • ES是个自带分布式属性的,高可用、可扩展、高性能,传统关系型数据库存在单机的性能瓶颈
  • ES单个字段的数据类型丰富,除了核心的数据类型,还支持多字段,对象类型、数组类型等。

参考

部分图片引用自:advanced-Java

  • 《Elasticsearch实战》
  • Elasticsearch如何做到亿级数据查询毫秒级返回的:Elasticsearch如何做到亿级数据查询毫秒级返回的? - 掘金
  • 互联网 Java 工程师进阶知识完全扫盲 - Doocs 技术社区
  • 互联网 Java 工程师进阶知识完全扫盲 - Doocs 技术社区

相关文章:

Elasticsearch知识

目录 Elasticsearch逻辑设计和物理设计 逻辑设计物理设计Elasticsearch原理 倒排索引文档的分析过程保存文档搜索文档写数据的底层原理 数据刷新(fresh)事务日志的写入ES在大数据量下的性能优化 文件系统缓存优化数据预热文档(Document&…...

极智芯 | 解读国产AI算力天数智芯产品矩阵

欢迎关注我的公众号 [极智视界],获取我的更多经验分享 大家好,我是极智视界,本文分享一下 解读国产AI算力天数智芯产品矩阵。 邀您加入我的知识星球「极智视界」,星球内有超多好玩的项目实战源码和资源下载,链接:https://t.zsxq.com/0aiNxERDq 天数智芯属于国产 GPGPU 阵…...

使用 OpenCV 发现圆角矩形的轮廓

OpenCV - 如何找到圆角矩形的矩形轮廓? 问题: 在图像中,我试图找到矩形对象的圆角轮廓。然而,我对两者的尝试 HoughLinesP 并 findContours 没有产生预期的结果。 我的目标是找到一个类似于以下形状的矩形: 。 代码: import cv2 import matplotlib.pyplot as plt…...

vscode项目推送到git

1、打开项目文件 打开文件后点击vs code左侧工具栏中第三个源代码管理图标,点击初始化仓库,此时会创建一个本地仓库会检查该项目中的文件变更 2、创建远程仓库 点击克隆/下载,复制HTTPS地址 3、添加远程地址 1)图形化操作 2…...

COMP2121 Discrete Mathematics

COMP2121 Discrete Mathematics 需要可WeChat: zh6-86...

【随笔记录】VMware搭建python开发环境

Vmware虚拟机总是连接不到网络。 环境为:笔记本WLAN 解决方法。 1.直接使用VMware 编辑->虚拟网络编辑器->恢复默认设置。 2.取消网卡的IP的dhcp获取,改为static。网关为提供IP的主机的网络IP(NAT模式) 3.windows打开共享网…...

基于C++实现水仙花数

1、水仙花数的连营 1.1、水仙花数 在学习程序设计课程时,大多数读者一定采用循环结构编写过求解水仙花数的程序。 【实例 1-1】水仙花数 一个三位整数(100~999),若各位数的立方和等于该数自身,则称其为“…...

关于一个类中引用两外一个类中的变量和方法,一个技巧可以提高开发效率

import static com.xx.xx.util.ext.xx.toJson; import static com.xx.xx.util.ext.smf.Cert.certMgrClient; 第一个引用一个方法,第二个引用一个变量, 引用后就可以直接通过变量名或者方法名就行使用,很方便,不要通过class.方式调…...

算法笔记:OPTICS 聚类

1 基本介绍 OPTICS(Ordering points to identify the clustering structure)是一基于密度的聚类算法 OPTICS算法是DBSCAN的改进版本 在DBCSAN算法中需要输入两个参数: ϵ 和 MinPts ,选择不同的参数会导致最终聚类的结果千差万别,因此DBCSAN…...

SSRF漏洞防御:黑白名单的编写

文章目录 SSRF漏洞防御:黑白名单的编写黑名单的制作白名单的制作 SSRF漏洞防御:黑白名单的编写 以pikachu靶场中SSRF(crul)为例我们可以看到未做任何防御 我们查看源代码 黑名单的制作 思路: 什么内容不能访问 构造代码 $xyarray("file" > "",&q…...

想要对网站进行安全监测,安全SCDN效果怎么样?

随着互联网的迅速成长,各种网站出现的越来越多,个人网站、企业网站等,同时网站竞争也越来越强。随着用户对网站需求增多,对网站的安全也愈发受到人们的重视。那么我们日常网站运营中,有需要对网站进行安全监控&#xf…...

操作符extends的作用是什么?

在TypeScript中,extends关键字用于创建类之间的继承关系。它允许一个类(子类)继承另一个类(父类)的属性和方法,并可以在子类中添加新的属性和方法或者修改继承自父类的属性和方法。 extends的作用是实现类…...

跟着chatgpt一起学|1.spark入门之MLLib

chatgpt在这一章表现的不好,所以我主要用它来帮我翻译文章提炼信息 1.前言 首先找到spark官网里关于MLLib的链接 spark内一共有2种支持机器学习的包, 一种是spark.ml,基于DataFrame的,也是目前主流的 另一种则是spark.mllib,是基于RDD的…...

JAVA后端开发技术报告

JAVA后端开发技术报告 一、引言 随着互联网技术的不断发展,JAVA作为一门成熟的后端开发语言,应用范围广泛。本报告旨在介绍JAVA后端开发的相关技术,包括JAVA语言基础、Spring框架、数据库技术以及性能优化等方面,帮助开发者更好…...

销售心理学 如何了解客户的购买心理激发客户购买兴趣

销售心理学 如何了解客户的购买心理激发客户购买兴趣 在销售的世界里,掌握客户的购买心理,如同一把神奇的钥匙,能够解锁客户内心的需求和兴趣。如何巧妙地运用销售心理学,激发客户的购买欲望呢?以下是一些建议&#x…...

霍夫丁不等式(Hoeffding‘s inequality)

参考资料:Hoeffdings inequality | encyclopedia article by TheFreeDictionary 霍夫丁不等式(Hoeffdings inequality)描述了随机变量的和、与和的期望之差的上限;或者表述为:随机变量的均值、与均值的期望之差的上限。…...

【MATLAB源码-第90期】基于matlab的OQPSKsimulink仿真,对比初始信号和解调信号输出星座图。

操作环境: MATLAB 2022a 1、算法描述 正交偏移二进制相移键控(OQPSK, Orthogonal Quadrature Phase Shift Keying)是一种数字调制技术,主要用于高效无线数据传输。它是传统二进制相移键控(BPSK)的一个变…...

自动驾驶芯片指标AI算力TOPS和CPU算力DMIPS

自动驾驶芯片指标AI算力TOPS和CPU算力DMIPS 文章目录 自动驾驶芯片指标AI算力TOPS和CPU算力DMIPS智能驾驶芯片CPU GPU NPU算力单位TOPS乘积累加运算MACTOPS计算公式GPU算力TFLOPSTFLOPS与TOPS的换算CPU算力DMIPS 智能驾驶芯片 根据地平线数据, L2级自动驾驶的算力…...

海外Leads Generation产业:中国出海群体的行业大机会

Leads Generation(简称LeadsGen)指的是集中精力吸引和开发潜在客户的营销策略。通过引导式的营销策略,企业分发内容吸引潜在客户,引导客户留下电话/邮件/姓名等信息。基于这些信息,企业可建立潜在客户数据库&#xff0…...

SQL sever2008中的游标

目录 一、游标概述 二、游标的实现 三、优缺点 3.1优点: 3.2缺点: 四、游标类型 4.1静态游标 4.2动态游标 4.3只进游标 4.4键集驱动游标 4.5显示游标: 4.6隐式游标 五、游标基本操作 5.1声明游标 5.1.1.IS0标准语法 5.1.1.1语…...

为什么你的GraalVM镜像内存比JVM还高?揭秘3类动态反射未注册、2种资源未预加载、1个ClassLoader残留的致命组合

第一章:Java GraalVM 静态镜像内存优化 如何实现快速接入GraalVM 的 Native Image 功能可将 Java 应用编译为独立、零依赖的静态可执行文件,显著降低启动延迟与运行时内存开销。但默认生成的镜像常因反射、动态代理或资源加载未显式配置而触发运行时回退…...

Qwen3.5-27B多场景落地:教育答题助手、工业质检报告生成、保险定损图分析

Qwen3.5-27B多场景落地:教育答题助手、工业质检报告生成、保险定损图分析 1. 模型概述 Qwen3.5-27B是Qwen官方发布的视觉多模态理解模型,具备强大的文本对话与图片理解能力。该模型已在4 x RTX 4090 D 24GB环境完成部署,提供以下核心功能&a…...

7脚 LED数码屏的刷新显示,乱码请指正

我是新手近段时间的工作是点亮7脚LED数码屏,刷新时遇到了困惑请大家帮助指正,在此表示非常感谢。 下面是7脚LED数码屏结构图。 用了7个 case下面是刷新代码switch(ScanPinNum){// ---------------- CASE1: PIN1------------------------case 1: …...

打造沉浸式智能AI问答助手:Vue + UniApp 全端实战(支持 Markdown/公式/多模态交互)唇

OCP原则 ocp指开闭原则,对扩展开放,对修改关闭。是七大原则中最基本的一个原则。 依赖倒置原则(DIP) 什么是依赖倒置原则 核心是面向接口编程、面向抽象编程, 不是面向具体编程。 依赖倒置原则的目的 降低耦合度&#…...

收藏!Java后端裁员潮下,程序员(小白必看)靠大模型破局翻身

凌晨一点半,手机屏幕突然亮起,是做Java后端开发的发小发来的消息,字里行间全是慌乱与不甘:“刚收到公司裁员通知,名单已经定死了,我真的懵了——部门里干了五年的资深老程都没保住,我这三年经验…...

【系统架构师-案例题-分布式数据缓存架构】22年下(3)分布式仓储货物管理系统

一、完整题目 【说明】 某大型电商平台建立了一个在线B2B商店系统,并在全国多地建设了货物仓储中心,通过提前备货的方式来提高货物的运送效率。但是在运营过程中,发现会出现很多跨仓储中心调货从而延误货物运送的情况。为此,该企业…...

Access VBA 生成二维码的两种方式与中文编码处理

在技术领域,我们常常被那些闪耀的、可见的成果所吸引。今天,这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力,让我们得以一窥未来的轮廓。然而,作为在企业一线构建、部署和维护复杂系统的实践者,我们深知…...

Ubuntu系统中通过systemd配置自定义Ollama模型存储路径

1. 为什么需要自定义Ollama模型存储路径 在Ubuntu系统上使用Ollama运行大语言模型时,默认的模型存储位置可能会带来几个实际问题。首先,系统分区通常空间有限,而像deepseek-r1这样的8B参数模型动辄需要几十GB存储空间。我就遇到过系统盘爆满…...

OpCore-Simplify:从硬件适配到配置自动化的Hackintosh技术解析

OpCore-Simplify:从硬件适配到配置自动化的Hackintosh技术解析 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 在非苹果硬件上运行macOS的…...

Blazor组件生态生死线,2026年淘汰清单曝光:17个高危NuGet包+5个即将废弃API(含迁移路径图谱)

第一章:Blazor组件生态生死线:2026年淘汰预警全景图Blazor 组件生态正站在结构性分化的临界点。微软官方已明确将 .NET 8 的长期支持(LTS)周期定为至 2026 年 11 月,而所有基于 .NET 6/7 构建的第三方组件库若未完成向…...