当前位置:首页 > 科技  > 软件

Elasticsearch 使用误区—单次请求获取大量数据

来源: 责编: 时间:2024-09-10 09:47:58 229观看
导读在使用 Elasticsearch 进行数据查询时,很多开发者、读者会遇到这样的问题:一次性检索大量数据,导致查询速度缓慢、网络延迟增加,甚至影响系统的整体性能。单次获取过多数据不仅增加了网络传输的负担,还会使查询过程复杂化,

在使用 Elasticsearch 进行数据查询时,很多开发者、读者会遇到这样的问题:一次性检索大量数据,导致查询速度缓慢、网络延迟增加,甚至影响系统的整体性能。Uoy28资讯网——每日最新资讯28at.com

单次获取过多数据不仅增加了网络传输的负担,还会使查询过程复杂化,降低响应速度。Uoy28资讯网——每日最新资讯28at.com

本文将深入探讨该误区的常见场景、错误原因以及优化方案,帮助大家有效避免这个常见的性能陷阱。Uoy28资讯网——每日最新资讯28at.com

1. 误区背景:单次获取大量数据

许多开发者在使用 Elasticsearch 进行数据查询时,往往试图一次性获取大量文档,认为可以减少查询次数并加速开发流程。Uoy28资讯网——每日最新资讯28at.com

图片图片Uoy28资讯网——每日最新资讯28at.com

——来源:https://t.zsxq.com/cYUnxUoy28资讯网——每日最新资讯28at.com

图片图片Uoy28资讯网——每日最新资讯28at.com

问题来源:https://articles.zsxq.com/id_qvaduu4ejgns.htmlUoy28资讯网——每日最新资讯28at.com

然而,Elasticsearch 是为分布式环境设计的,单次大规模的数据检索会对系统的性能造成负面影响,Uoy28资讯网——每日最新资讯28at.com

具体表现为:Uoy28资讯网——每日最新资讯28at.com

  1. 网络延迟增加。 大量数据的传输会占用带宽资源,导致网络延迟加大。
  2. 查询性能下降。系统需要消耗更多的内存和 CPU 来处理大规模结果集,进而拖慢查询速度。
  3. 系统负载增加。在负载高峰期,多个大查询可能导致节点资源过载。

2. 真实场景:电商平台用户查询

2.1 场景描述:

某电商平台的用户数据存储在一个包含数百万条用户记录的 Elasticsearch 索引中。Uoy28资讯网——每日最新资讯28at.com

业务部门需要查询用户数据进行分析,但开发团队直接通过 match_all 查询所有用户,并设置 size 参数为 10000,试图一次性获取大量数据。Uoy28资讯网——每日最新资讯28at.com

GET /users/_search{"query": {"match_all": {}},"size": 10000}

2.2 问题描述:

该查询一次性返回 10000 条完整的用户数据,导致以下问题:Uoy28资讯网——每日最新资讯28at.com

  • 问题1:网络延迟

10,000 条数据中包含许多不必要的字段,增大了网络传输的数据量,导致响应时间延长。Uoy28资讯网——每日最新资讯28at.com

大家知道, Elasticsearch 非 MySQL 等关系型数据库,字段不需要提前设定,如果 Mapping 不设置 strict 而是 默认值,意味着字段可以无限扩充,直到接近默认值 1000。Uoy28资讯网——每日最新资讯28at.com

具体限制的设置项是:Uoy28资讯网——每日最新资讯28at.com

index.mapping.total_fields.limit

此参数决定一个索引中可以包含的字段的最大数量。默认值是 1000。Uoy28资讯网——每日最新资讯28at.com

https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-settings-limit.htmlUoy28资讯网——每日最新资讯28at.com

  • 问题2:查询性能问题

处理如此多的数据占用了系统资源,使得查询速度减慢,影响了其他业务请求。Uoy28资讯网——每日最新资讯28at.com

  • 问题3:用户体验差

由于查询响应缓慢,业务人员在使用系统时感觉卡顿,影响日常工作效率。Uoy28资讯网——每日最新资讯28at.com

3、错误原因分析

出现这种性能问题的主要原因是:Uoy28资讯网——每日最新资讯28at.com

  • 可能原因1:一次性获取过多数据

在大量数据场景中,单次获取 10000 条数据会显著增加负载。Uoy28资讯网——每日最新资讯28at.com

  • 可能原因2:未使用字段过滤

默认情况下,Elasticsearch 返回每个文档的所有字段,而业务部门往往只需要几个关键字段。Uoy28资讯网——每日最新资讯28at.com

  • 可能原因3:未分页处理

没有采用分页机制来分批获取数据,而是直接获取整个结果集。Uoy28资讯网——每日最新资讯28at.com

4、改进方案

要优化这种场景下的查询,以下几种策略可以显著提升性能:Uoy28资讯网——每日最新资讯28at.com

4.1 限制返回的文档数量

通过分页机制限制每次查询返回的文档数量,避免一次性获取过多数据。Uoy28资讯网——每日最新资讯28at.com

分页不仅能减小单次查询的负载,还能提升整体查询的稳定性。Uoy28资讯网——每日最新资讯28at.com

GET /users/_search{  "query": {    "match_all": {}  },  "size": 10,  "from": 0}

这个查询一次性只返回 10条文档,并且可以通过 from 参数进行分页查询,避免单次查询获取过多数据。Uoy28资讯网——每日最新资讯28at.com

这里深度分页的弊端关注一下,如下两幅图(建议放大查看)所示:Elasticsearch 中的深分页问题是一个常见的性能陷阱,因为越深的分页需要对越多的数据进行处理,这可能导致大量的资源消耗。Uoy28资讯网——每日最新资讯28at.com

假设不断在这个边缘试探,会导致内存耗尽甚至有宕机风险。Uoy28资讯网——每日最新资讯28at.com

图片图片Uoy28资讯网——每日最新资讯28at.com

图片图片Uoy28资讯网——每日最新资讯28at.com

问题参见:https://t.zsxq.com/RNWdKUoy28资讯网——每日最新资讯28at.com

4.2 使用源过滤(_source filtering)

在业务场景中,并非所有字段都是必要的,因此通过源过滤功能只返回特定字段可以减少数据传输量,进而提升查询效率。Uoy28资讯网——每日最新资讯28at.com

GET /users/_search{  "query": {    "match_all": {}  },  "_source": ["name", "email"],  "size": 10,  "from": 0}

这个查询只返回用户的 name 和 email 字段,减少了不必要的字段传输,降低了网络延迟和系统资源的消耗。Uoy28资讯网——每日最新资讯28at.com

4.3 利用部分更新

如果需要更新用户文档,你可以只提供更新的字段,Elasticsearch 会重新索引整个文档,但不需要在请求中提交完整文档。部分更新减少了请求体的大小,但重新索引整个文档的操作仍会发生。Uoy28资讯网——每日最新资讯28at.com

POST /users/_update/1{  "doc": {    "email": "new_email@example.com"  }}

4.4 使用 Scroll API 或 search_after 处理大量数据

对于确实需要处理大量数据的场景,Scroll API 是更好的解决方案。Scroll API 允许你分批检索大量文档而不会影响集群性能。Uoy28资讯网——每日最新资讯28at.com

GET /users/_search?scroll=1m{  "query": {    "match_all": {}  },  "size": 100}POST /_search/scroll{  "scroll": "1m",  "scroll_id": "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAPnMWSU5tbk5Za1NsVEd..."}

初始查询的时候,设置 scroll 参数并指定时间窗口,初次检索 100 条数据。Uoy28资讯网——每日最新资讯28at.com

滚动查询需要使用 scroll_id 获取接下来的批次,直到所有数据被检索完。Uoy28资讯网——每日最新资讯28at.com

Scroll API 保持了上下文信息,允许高效地分批处理数据,适用于一次性处理大量数据的批处理任务。Uoy28资讯网——每日最新资讯28at.com

5. 进一步优化建议

5.1 合理设置查询条件

避免使用过于宽泛的查询条件,如 match_all,可以通过精确条件限定查询结果集的大小。Uoy28资讯网——每日最新资讯28at.com

5.2 使用聚合功能

如果你只关心统计数据而不是具体文档,利用 Elasticsearch 的聚合功能可以直接返回统计结果,避免大量数据传输。Uoy28资讯网——每日最新资讯28at.com

5.3 索引优化

定期优化索引,确保分片和副本的设置合理,避免查询时的热点问题。Uoy28资讯网——每日最新资讯28at.com

6. 小结

在使用 Elasticsearch 时,合理设计查询是提升系统性能的关键。Uoy28资讯网——每日最新资讯28at.com

通过限制返回文档数量、使用源过滤和部分更新等技术,可以有效减少数据传输量,提高查询效率。Uoy28资讯网——每日最新资讯28at.com

对于需要检索大量数据的情况,利用 Scroll API 和分页机制,可以进一步优化查询性能,避免一次性获取大量数据带来的性能问题。Uoy28资讯网——每日最新资讯28at.com

Elasticsearch 的强大功能需要合理使用,开发者应根据实际业务需求设计高效的查询方案,以充分发挥其优势。Uoy28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-112731-0.htmlElasticsearch 使用误区—单次请求获取大量数据

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 盘点 Mybatis 使用过程中遇到的坑!

下一篇: Asp.Net Core实战-JWT详解

标签:
  • 热门焦点
  • 对标苹果的灵动岛 华为带来实况窗功能

    继苹果的灵动岛之后,华为也在今天正式推出了“实况窗”功能。据今天鸿蒙OS 4.0的现场演示显示,华为的实况窗可以更高效的展现出实时通知,比如锁屏上就能看到外卖、打车、银行
  • 直屏旗舰来了 iQOO 12和K70 Pro同台竞技

    旗舰机基本上使用的都是双曲面屏幕,这就让很多喜欢直屏的爱好者在苦等一款直屏旗舰,这次,你们等到了。据博主数码闲聊站带来的最新爆料称,Redmi下代旗舰K70 Pro和iQOO 12两款手
  • 天猫精灵Sound Pro体验:智能音箱没有音质?来听听我的

    这几年除了手机作为智能生活终端最主要的核心之外,第二个可以成为中心点的产品是什么?——是智能音箱。 手机在执行命令的时候有两种操作方式,手和智能语音助手,而智能音箱只
  • 把LangChain跑起来的三个方法

    使用LangChain开发LLM应用时,需要机器进行GLM部署,好多同学第一步就被劝退了,那么如何绕过这个步骤先学习LLM模型的应用,对Langchain进行快速上手?本片讲解3个把LangChain跑起来
  • 从 Pulsar Client 的原理到它的监控面板

    背景前段时间业务团队偶尔会碰到一些 Pulsar 使用的问题,比如消息阻塞不消费了、生产者消息发送缓慢等各种问题。虽然我们有个监控页面可以根据 topic 维度查看他的发送状态,
  • 2天涨粉255万,又一赛道在抖音爆火

    来源:运营研究社作者 | 张知白编辑 | 杨佩汶设计 | 晏谈梦洁这个暑期,旅游赛道彻底火了:有的「地方」火了——贵州村超旅游收入 1 个月超过 12 亿;有的「博主」火了&m
  • 腾讯盖楼,字节拆墙

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之“想重温暴刷深渊、30+技能搭配暴搓到爽的游戏体验吗?一起上晶核,即刻暴打!”曾凭借直播腾讯旗下代理格斗游戏《DNF》一
  • 苹果MacBook Pro 2021测试:仍不支持平滑滚动

    据10月30日9to5 Mac 消息报道,苹果新的 14 英寸和 16 英寸 MacBook Pro 2021 上市后获得了不错的评价,亮点包括行业领先的性能,令人印象深刻的电池续航,精美丰
  • 三翼鸟智能家居亮相电博会,让用户体验更真实

    2021电博会在青岛国际会展中心开幕中,三翼鸟直接把“家”搬到了现场,成为了展会的一大看点。这也是三翼鸟继9月9日发布了行业首个一站式定制智慧家平台后的
Top