ES深度分页问题解决方案

简介: ES深度分页问题

假设当前有一个场景需要查询10010 ~ 10015的学生。


不同于单机数据库只需要select * from order 然后再limit一下就行


ES的集群环境下,因为分片分配策略的原因,分片肯定是分配在多个不同节点下的,我们会从多个节点下把那些分片里的所有数据都拿出来,假设一共有5W条数据,我们全拿出来,然后进行排序,再取其中10010 ~ 10015的学生,进行返回,这就是深度分页的问题。


这个问题出现的原因是你需要查询出内存中的所有分片数据,在内存中进行一个分页,这个对内存的损耗是很大的,严重时,频繁的分页还会导致FULL GC的出现,所以ES默认也设置了10000的阈值,来防止用户不了解底层原理使得深度分页情况的发生。


我们需要尽量尝试避免深度分页的出现

可以在产品层面上进行规避

比如淘宝的解决手段 只返回100页,每页100条记录,刚好卡在ElasticSearch的最大阈值上.

目录
相关文章
|
7月前
|
数据库 JavaScript SQL
❤Nodejs 第八章(操作本地数据库优化查询为分页查询方式)
【4月更文挑战第8天】在Node.js中,本章讲述了如何优化本地数据库查询以实现分页。首先,添加了前端分页参数`pageNum`(页码)和`pageSize`(每页条数)。接着,通过打印`req.query`来验证参数是否正确传递。初始查询示例为`SELECT * FROM user WHERE age = 18 LIMIT 0, 10`。当改变分页参数时,查询能相应更新。在实现动态偏移量`offset`时,起初因误添加`' AND' : ' WHERE'`导致错误,修正后使用`LIMIT`和计算出的`offset`进行分页。
154 5
❤Nodejs 第八章(操作本地数据库优化查询为分页查询方式)
|
4月前
|
缓存 监控 前端开发
大量数据如何做分页处理
【8月更文挑战第13天】面对大量数据分页,可从数据库与应用两方面着手:数据库端利用内置分页功能如MySQL的`LIMIT`与`OFFSET`,及SQL Server的`ROW_NUMBER()`;优化查询,精选字段并为常用排序字段加索引。应用端采用缓存已分页数据、异步加载新页及前端懒加载技术。同时限制最大页数并持续监控优化性能,确保高效查询与良好用户体验。
138 0
|
6月前
|
存储 数据库 开发者
Elasticsearch中的三种分页策略深度解析:原理、使用及对比
Elasticsearch中的三种分页策略深度解析:原理、使用及对比
|
7月前
|
SQL 存储 关系型数据库
深分页怎么导致索引失效了?提供6种优化的方案!
深分页怎么导致索引失效了?提供6种优化的方案!
|
前端开发
前端学习笔记202306学习笔记第四十二天-ES10增加的新特性1
前端学习笔记202306学习笔记第四十二天-ES10增加的新特性1
52 0
|
存储 索引
ES 分布式搜索的运行机制
ES 分布式搜索的运行机制
56 1
ES 分布式搜索的运行机制
|
前端开发
前端学习笔记202306学习笔记第四十二天-ES10增加的新特性2
前端学习笔记202306学习笔记第四十二天-ES10增加的新特性2
57 1
|
前端开发
前端学习笔记202306学习笔记第四十二天-ES10增加的新特性3
前端学习笔记202306学习笔记第四十二天-ES10增加的新特性3
35 0
|
Java Apache 索引
白话Elasticsearch10-深度探秘搜索技术之基于dis_max实现best fields策略进行多字段搜索
白话Elasticsearch10-深度探秘搜索技术之基于dis_max实现best fields策略进行多字段搜索
97 0
|
Java 索引
白话Elasticsearch11-深度探秘搜索技术之基于tie_breaker参数优化dis_max搜索效果
白话Elasticsearch11-深度探秘搜索技术之基于tie_breaker参数优化dis_max搜索效果
106 0