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

java面试题储备4: 谈谈对es的理解

嗯,好的,我对es的了解呢就是它是建立在apache Lucene(阿帕奇lucen)搜索引擎库基础上的搜索引擎,使用分布式存储(分片存储),特点就是检索速度快。

  1. 一般数据量较大搜索频次高但是不频繁更新的数据,还有如果数据结构字段过多的数据检索功能,一般都会使用es搜索,我们系统首页的商品搜索,订单列表的搜索框,都是用的es检索

  2. 查询快的原因一个是es会对数据进行分词,分词以后再保存索引,查询的时候通过索引匹配,提高查询速度;
    (我们一般对于数据字段过多的表,或者需要关联查询多表获取结果的表,都会只将有效的字段、处理好的结果字段存入es,而不是将所有字段存入es,这样也会影响es性能)
    (es预热:将数据按照请求频率分为热数据、冷数据,热数据提前预热;或者单独建冷热数据索引,将热数据加载到内存里)

  3. 另一个原因是es使用了倒排索引,倒排索引会根据属性值来确定数据存储的位置,可以减少扫描的数据量

  4. es采用了分片机制(每个分片上数据是相同的,将不同分片放置在不同的节点,任何一个节点当机,其他分片也能查询到数据备份;主分片可以读写,副本分片是只读的)

  5. es的水平扩展性好,可以水平添加更多的服务器节点来提高性能

问题: es存在深分页问题

我们有一个数据几千万的用户数据表,进行分页查询的时候,每页10条,如果选择第2000页,性能会非常差,还有可能会导致内存泄漏

原因:es查询分页数据的时候,比如每页10条,一直往后翻页,翻到第2000页,在每个分片上会将前20000条数据查出来,不同的分片再做一些合并处理操作,最后得到第2000页的数据,如果查询的分页越深,每个分片上返回的数据就越多,对性能的压力和内存的损耗就越大,就会出现越翻越慢的情况,出现查询超时或者内存溢出的情况

解决:首先首页的订单列表不会出现深分页的情况,数据量较小不会出现这种情况;我知道我们系统唯一出现过类似问题的地方是首页推荐商品池,这个商品池数据取的是主站统一的推荐商品es接口,数据量上千万,主页采用左右滑动的形式,每页50条,滑动几十次后出现加载卡顿的情况,后来了解到可能是深分页的问题,该用了feed流来解决,feed流其实我们也是调用的中台的接口,大体的实现就是会有一个scroIId游标,原理是会将数据存一个快照,然后分页之后通过游标id去定位下一页的数据,就不会出现加载慢和内存损耗的情况;feed流的缺点就是需要前一页的scrolld来寻找下一页,所以不能随意跳页,只能一页一页往下翻

http://www.xdnf.cn/news/1286803.html

相关文章:

  • 【Go】Gin 超时中间件的坑:fatal error: concurrent map writes
  • iOS 编译 cpp 代码生成 .a 库备忘
  • 医美产业科技成果展陈中心:连接微观肌肤世界与前沿科技的桥梁
  • 微算法科技(NASDAQ:MLGO)开发经典增强量子优化算法(CBQOA):开创组合优化新时代
  • 非凸科技受邀参加Community Over Code Asia 2025 Rust分论坛
  • 云计算分类与主流产品
  • 【论文阅读】一种基于经典机器学习的肌电下肢意图检测方法,用于人机交互系统
  • 【Node.js从 0 到 1:入门实战与项目驱动】2.1 安装 Node.js 与 npm(Windows/macOS/Linux 系统的安装步骤)
  • 网络基础设施保护
  • python题目练习 是否所有1都至少相隔k个元素 简单类型
  • 开博尔DA5耳放小尾巴体验评测:实体按键给到位,便携HiFi上手挺好用的
  • 25C机场航班调度程序(JS 100)
  • Ansible 基础到实操笔记
  • MySQL数据库操作全指南:数据库命令、表命令与数据CRUD操作
  • 飞算 JavaAI -智慧城市项目实践:从交通协同到应急响应的全链路技术革新
  • vue excel转json功能 xlsx
  • 正则表达式解析(二)
  • Python 标准库模块shutil
  • 升级 Docker,避免执行 docker compose 时报错
  • Java 大视界 -- Java 大数据在智能教育学习效果评估指标体系构建与精准评估中的应用(394)
  • 实现一个二维码让 iOS 和 Android 用户自动跳转到对应下载链接
  • MySQL——MySQL引擎层BufferPool工作过程原理
  • 3 Abp 核心框架(Core Framework)
  • 京东方 DV133FHM-NN1 FHD13.3寸 工业液晶模组技术档案
  • 在Colab上复现LoRA相关论文实验的完整指南
  • 跨设备开发不再难:HarmonyOS 分布式任务管理应用全解析
  • 人机交互:连接人类与数字世界的桥梁
  • 基于柔性管控终端的新能源汽车充电站有序充电系统设计与实现
  • Docker容器部署论坛和网上商城(小白的“升级打怪”成长之路)
  • 1 JQ6500语音播报模块详解(STM32)