搜索引擎 Elasticsearch 的三大坑

article/2025/8/28 4:53:50

搜索引擎的坑

ES 搜索引擎系列文章汇总:

一、别只会搜日志了,求你懂点原理吧

二、ES 终于可以搜到”悟空哥“了!

三、1W字|40 图|硬核 ES 实战

本文主要内容如下:

搜索引擎现在是用得越来越多了,比如我们日志系统中用到的 ELK 就用到了搜索引擎 Elasticsearch(简称 ES)。

那对于搜索这种技术来说,最看重的是搜索的结果的准确性和搜索的响应时间。ES 的准确性可以通过 倒排索引算法来保证,那响应时间就需要磁盘或缓存来支持了,那么磁盘和缓存会带来哪些坑呢? ( 其实不论是分布式的,还是单机模式下的搜索引擎都会遇到这个问题。 )

一、ES 慢查询之坑

Elasticsearch 是现如今用的最广泛的搜索引擎。它是一个分布式的开源搜索和分析引擎,适用于所有类型的数据,包括文本、数字、地理空间、结构化和非结构化数据。

1.1 工作原理:

ES 的工作原理:往 ES 里写数据时,实际是写到磁盘文件,查询时,操作系统会将磁盘文件里的数据自动缓存 filesystem cache 里面。如果给 filesystem cache 更多的内存,尽量让内存可以容纳所有的 idx segment file 索引数据文件,则搜索的时候走内存,性能较好。

ES 工作原理

坑: 首先如果访问磁盘那一定很慢,而走缓存会快很多。但如果很多没用的字段数据都丢到缓存里面,则会浪费缓存的空间,所以很多数据还是存在磁盘里面的,那么大部分查询走的数据库,则会带来性能问题。

1.2 案例

ES 节点 3 台机器,每台机器 32 G 内存,总内存 96 G,给 ES JVM 堆内存是 16 G,那么剩下来给 cache 的是 16 G,总共 ES 集群的的 cache 占用内存 48 G ,如果所有的数据占据磁盘空间 600 G,那么每台机器的数据量是 200 G,而查询时,有 150 G 左右的的数据是走磁盘查询的,那么走 cache 的概率是 48 G/ 600 G = 8%,也就是说大量查询是走磁盘的。

1.3 避坑指南:

1.3.1 存储关键信息

搜索引擎避坑指南

  • 将数据中索引字段存到 cache,比如 一行数据有 name、gender、age、city、job 字段,而检索这条数据只需要 name 和 gender 就可以查询出数据,那么 cache 就只需要存 id、name 和 gender 字段。别把所有字段都丢到 cache 里面,纯属浪费空间,资源是有限的。

  • 那剩下的字段怎么检索出来?可以把其他字段存到 mysql/hbase 里面。

  • hbase 特点:适用于海量数据的在线存储。缺点是不能进行复杂的搜索。根据 name 和 gender 字段从 ES 中拿到 100 条数据 ( 包含 doc id ) ,然后根据 doc id 再去 hbase 中查询每个 doc id 对应的完整数据,将结果组装后返回给前端 ( 需要考虑分页的情况 ) 。

1.3.2 数据预热

  • 将访问量高的数据或者即将访问量高的数据放到 filesystem cache 里面。
  • 每隔一段时间就从数据库访问下数据,然后同步到 filesystem cache 里面。

1.3.3 冷热分离

  • 不常访问的数据和经常访问的数据进行隔离。比如 3 台机器存放冷数据的索引,另外 3 台存放热数据的索引。

1.3.4 避免使用关联查询

  • ES 中的关联查询是比较慢的,性能不佳,尽量避免使用。

二、ES 架构之坑

通常情况下,我们会使用 ES 的集群模式,在集群规模不大的情况下,性能还算可以,但如果集群规模变得很大,则会遇到集群瓶颈,也就是说集群扩大,性能提升甚微,甚至不增反降。

ES 的集群也是采用中心化的分布式架构,整个集群只有一个是 Master 节点。而它的职责非常重要:负责整个集群的元数据管理,元数据包含全局的配置信息、索引信息、节点信息,如果元数据发生改变,则需要 master 节点将变更信息发布到集群的其他节点。

另外因为 master 节点的任务处理是单线程的,所以每次处理任务时,需要等待全部节点接收到变更信息,并处理完变更的任务后,才算完成了变更任务。

那么这样的架构会带来什么问题:

  • 响应时间问题。如果元数据发生了改变,但某节点假死,比如 JVM 的内存爆了,但是进程还活着,那么响应 master 节点的时间会非常长,今而影响单个同步信息任务的完成时间。
  • 任务恢复问题。有大量恢复任务的时候,任务需要排队,恢复时间变长。
  • 任务回调问题。任务执行完成后,需要回调大量 listener 处理元数据变更。如果分片的数据很大,则处理时间会到 10 秒级,严重影响了集群的恢复能力。

解决方案:采用 ES 的 tribe node 特性实现 ES 多集群。文中后面会介绍下 tribe node 的原理。

三、业务场景的坑

ES 的被广泛应用到多个场景,比如查询日志、查询商品资料、数据聚合等。而这些场景的需求又有非常大的差异,这也是一个坑。

  • **场景一:前端首页搜索功能。**比如搜索商品,数据实时写入的频率不高,但是读的频率很高。

  • **场景二:日志检索的功能。**日志系统中,我们一般都是 ELK 这种架构模式,对实时写入要求很高,而查询的次数其实不多,毕竟查询日志多工作还是开发和运维人员来做。

Kibana 界面

  • 场景三:监控、分析的功能。ES 也会被运用到需要监控数据和分析数据的场景中,而这种场景又是对 ES 的内存要求比较高,因为这些分析功能是在内存中完成的,若内存出现太大的压力,则会造成系统的垃圾回收,可能出现短暂的服务抖动。

解决方案:按业务场景划分 ES 集群,同样采用 ES tribe node 功能。

四、ES Tribe Node 方案

ES tribe node 功能原理图如下所示:

  • 有两个 ES 集群,每个集群都有多个 ES 节点。
  • Logstash 负责日志搜集。
  • Kibana 负责客户端查询,将查询命令传送到 ES Tribe Node。
  • ES Tribe Node 还承担了集群管理的职责。

后续我们再来聊聊 ES Tribe Node 的底层原理和用法~

参考资料:
https://www.infoq.cn/article/SbfS6uOcF_gW6FEpQlLK

https://www.elastic.co/guide/en/elasticsearch/reference/2.0/modules-tribe.html

advance-java


http://chatgpt.dhexx.cn/article/VUoovIdD.shtml

相关文章

Elasticsearch搜索引擎安装使用及Java中使用

Elasticsearch(一)Docker搭建ES集群 关闭防火墙 后面我们要使用多个端口,为了避免繁琐的开放端口操作,我们关掉防火墙 # 关闭防火墙 systemctl stop firewalld.service# 禁用防火墙 systemctl disable firewalld.service安装Do…

elasticsearch搜索引擎搭建

课程作业的简单记录。 环境说明: 操作系统:windows 10Jdk:java 11Elasticsearch 7.16.0谷歌浏览器:97.0.4692.71(正式版本) (64 位) 一、目标: 1、淘宝抓取商品信息…

详解最热门搜索引擎——ES

一、产生背景 ​ 互联网发展早期的时候,对于一般的公司储存的数据量不是那么的大,所以很多公司更倾向于使用数据库去存储和查询数据,如:现在去MySQL中查询数据,大概的查询方式就是:select * from table wh…

Es搜索引擎概述和语句案例

ES概述 ES是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene™ 基础之上,它提供了一个分布式多用户能力的搜索引擎,且ES支持RestFulweb风格的url访问。 全文检索:是指计算机索引程序通过扫描文章中的每一个词&#xf…

es之搜索详解

Elasticesearch的核心功能是搜索,现在介绍ES的搜索API及其用法。 为了有助于讲解,这里准备一些测试数据,把数据保存到文件website.json中: {"index":{"_index":"website","_id":"1…

Elasticsearch(三)——Es搜索(简单使用、全文查询、复合查询)、地理位置查询、特殊查询、聚合操作、桶聚合、管道聚合

Elasticsearch(三)——Es搜索(简单使用、全文查询、复合查询)、地理位置查询、特殊查询、聚合操作、桶聚合、管道聚合 一、Es搜索 这里的 Es 数据博主自己上网找的,为了练习 Es 搜索。 1、Elasticsearch 搜索入门 …

uAVS2 AVS2实时编码器

测试平台  PC平台:  i7-4790K, 4.5GHz;超线程开启; 8G内存, 2400MHz。  OS:Win8.1  手机平台:  华为荣耀6。 测试序列  AVS2通测序列 测试指标 编码性能:各种preset下相对RD12.…

谁将引领新一代视频编码标准:HEVC、AVS2和AV1性能对比报告

2013年1月,新一代视频编码标准H.265/HEVC正式发布。然而它并没有像H.264那样占据市场。在这期间,AVS2、AV1等竞争者也在逐步推出,究竟谁才能引领新一代视频编码标准呢? 作者 | 李旭峰 王振宇 王荣刚 编辑 | 李旭峰 本…

关于avs和avs2编码stuffing bit的一点理解

avs和avs2编码标准关于结尾有一点和h264的不同。 比如一段视频通过avsx编码后,如果最后1位是字节对齐的(也就是说编码后的流刚好是8*n bit),那么就要在最后1bit后面再增加一字节0x80(1000 0000). 如果最后1bit没有对齐&#xff0c…

AVS2运动搜索方法简介

AVS2配置文件中有这一项: FME: 3 #Fast Motion Estimation method (1:DIA, 2:HEX,3:UMH,4:TZ) 表示采用不同的运动搜索方法,下面简单的介绍一下这几种方法。 0.ESA.全像素运动估计搜索算法(不使用) 这…

一个有趣的avs编码器(注意,是avs,而不是avs2噢)

本章附件是一个清华大学写的关于avs编解码器: https://download.csdn.net/download/weixin_43360707/87793302 该编码器遵循了stuffing bit: 打开文件夹后,如下: 可以看出这个是个跨平台的工程,提供了windows vs2015的工程文件sln&#x…

新一代视频编码标准:HEVC、AVS2和AV1性能对比报告

转自:http://media.pkusz.edu.cn/achievements/?p138 H.265/HEVC 距离H.265/HEVC标准正式发布已经有4年多的时间,虽然其压缩效率比H.264/AVC高出一倍,可以为视频公司节约带宽成本,但H.264仍是目前最流行的视频编码格式。除了复杂…

【AVS系列】AVS2参考软件RD17.0

Date: 2019-4-16 前言 AVS2标准从2017年开始批准使用,至今也有2年了,传说这个标准是对标H265,压缩效率在一些场景下的压缩率优于H.265,但是当前该标准的推广使用仍旧较少,主要用于广电和卫星电视传输。本文主要对AVS2标…

AVS2实时编码器xavs2的运行

Windows10 下 AVS2实时编码器xavs2的下载,编译,运行 xavs2的下载网址: https://gitee.com/pkuvcl/xavs2 可以选择master版本,或者tag版本,具体区别我也不太清楚,我的是1.3版本,我是下载最先的t…

【X265】Win10环境编译FFmpeg,集成 x264、x265、avs2

在Win10中编译完x264、x265后,开始编译FFmpeg,并将集成这几个主流视频编解码算法 准备 系统环境: Win10 VS2019 编译环境: Mingw64 msys2 cmake yasm nasm 编码算法:x264_161、x265_3.3、avs2(xavs2…

一个有趣的avs2编码器

该avs2编码器是清华大学开发的一个参考编解码器: https://mp.csdn.net/mp_download/manage/download/UpDetailed 代开文件,结构如下: 考虑到我们是要使用,所以进入到build: 因为我们是linux,cd linux : 继续cd lencod: 编译&a…

AVS2 有点令人不敢相信

王荣刚:建立中国自主视频技术生态 文 / 王荣刚 整理 / LiveVideoStack 直播回放: https://www.baijiayun.com/web/playback/index?classid18072579438145&session_id201807260&tokenPsTmsjVpbRht681rrJ0J_Xl0fbNahfHFmF1doYNdca5XBFzghyiw1…

HEVC 、H.264与AVS2 视频压缩

Lab2 Report: HEVC 、H.264与AVS2 视频压缩 文章目录 Lab2 Report: HEVC 、H.264与AVS2 视频压缩1. 摘要2. 实验一:HEVC 视频编码与解码2.1 实验内容2.2 实验原理简述2.3 实验过程与分析2.3.1 实验环境与测试序列2.3.2 HEVC编码与解码(1)测试…

AVS2参考软件的运行

博主最近在接触学习AVS2的代码,在查找资料的时候发现关于AVS2的资料少之又少,光是将这个代码运行起来博主也是踏了一些坑,其实遇到的问题都是很简单的,只不过下载下来的代码并没有使用手册,一切都是自己一点点根据代码…

HEVC vs AVS2

AVS2高清实时编码器问世,性能大幅超越HEVC/H.265编码器x265 2015/9/23 北京大学深圳研究生院数字媒体研究中心研制成功首款基于AVS2标准的高清实时编码器uAVS2,性能大幅超越HEVC/H.265编码器x265。2014年12月,面向高清/超高清视频应用的新…