ES深度分页问题解决方案

简介: ES深度分页问题

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


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


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


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


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

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

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

目录
相关文章
|
3月前
|
缓存 关系型数据库 MySQL
一文彻底弄懂MySQL优化之深度分页
【10月更文挑战第24天】本文深入探讨了 MySQL 深度分页的原理、常见问题及优化策略。首先解释了深度分页的概念及其带来的性能和资源问题。接着介绍了基于偏移量(OFFSET)和限制(LIMIT)以及基于游标的分页方法,并分析了它们的优缺点。最后,提出了多种优化策略,包括合理创建索引、优化查询语句和使用数据缓存,帮助提升分页查询的性能和系统稳定性。
225 1
|
5月前
|
JavaScript 前端开发 算法
【Vue秘籍揭秘】:掌握这一个技巧,让你的列表渲染速度飙升!——深度解析`key`属性如何成为性能优化的秘密武器
【8月更文挑战第20天】Vue.js是一款流行前端框架,通过简洁API和高效虚拟DOM更新机制简化响应式Web界面开发。其中,`key`属性在列表渲染中至关重要。本文从`key`基本概念出发,解析其实现原理及最佳实践。使用`key`帮助Vue更准确地识别列表变动,优化DOM更新过程,确保组件状态正确维护,提升应用性能。通过示例展示有无`key`的区别,强调合理使用`key`的重要性。
73 3
|
5月前
|
缓存 UED 开发者
全面加速Angular应用:从代码拆分到服务器端渲染的性能优化全攻略——深入探讨提升加载速度的有效策略
【8月更文挑战第31天】在现代Web开发中,提升应用加载速度对增强用户体验至关重要,尤其对于使用Angular框架的单页应用而言更是如此。本文通过解答五个常见问题,提供了一份全面的Angular性能优化攻略,涵盖减少初始加载时间、处理大型第三方库、优化变更检测、利用缓存以及服务器端渲染等技术。通过这些方法,开发者能够显著提升应用性能,确保流畅高效的用户体验。
71 0
|
6月前
|
API 索引
面试题ES问题之使用分词器提高写入效率如何解决
面试题ES问题之使用分词器提高写入效率如何解决
42 1
|
5月前
|
缓存 监控 前端开发
大量数据如何做分页处理
【8月更文挑战第13天】面对大量数据分页,可从数据库与应用两方面着手:数据库端利用内置分页功能如MySQL的`LIMIT`与`OFFSET`,及SQL Server的`ROW_NUMBER()`;优化查询,精选字段并为常用排序字段加索引。应用端采用缓存已分页数据、异步加载新页及前端懒加载技术。同时限制最大页数并持续监控优化性能,确保高效查询与良好用户体验。
147 0
|
7月前
|
存储 数据库 开发者
Elasticsearch中的三种分页策略深度解析:原理、使用及对比
Elasticsearch中的三种分页策略深度解析:原理、使用及对比
|
8月前
|
SQL 存储 关系型数据库
深分页怎么导致索引失效了?提供6种优化的方案!
深分页怎么导致索引失效了?提供6种优化的方案!
|
前端开发
前端学习笔记202306学习笔记第四十二天-ES10增加的新特性1
前端学习笔记202306学习笔记第四十二天-ES10增加的新特性1
55 0
|
存储 索引
ES 分布式搜索的运行机制
ES 分布式搜索的运行机制
59 1
ES 分布式搜索的运行机制
|
8月前
|
前端开发
【前端学习】—ES6新增的方法有哪些(十五)
【前端学习】—ES6新增的方法有哪些(十五)

热门文章

最新文章