在一些公司里,很多数据都喜欢丢到 ES 里,甚至有的人把其充当数据库的使用,这样是很危险的。很可能过个半年一年ES数据量就很大了,然后当时的申请的ES机器配置不高,查询速度变慢。所以,一开始架构评审应该做好,预计几年内数据量的规模,从而选择什么样配置的ES集群。下面说几个比较重要的优化方面。

一、给机器预留足够的系统内存

前面我们已经讲过,es查询数据先从内存(即 os cache)中查询,查不到再去磁盘(segment file) 中查询。

从内存中查询基本都是几十毫秒到几百毫秒,从磁盘查询可能要好几秒。

为了保证 ES 能尽量从内存中查询,我们需要确保系统有足够的剩余内存可以使用。

比如一台ES的节点机器有 64GB 内存,我们可以给ES进程分配32GB(即JVM参数设置最大堆32GB),然后留32GB作为 os cache 的内存。然后我们尽量确保这台ES节点上的索引数据不要超过剩余可用内存(即32GB), 这样就能最大程度保证尽量走内存查询而非磁盘查询。

二、ES只存必要的字段

因为我们的内存容量有限,所以尽量不要把所有的数据写在内存里,因此每个索引的字段也不要太多。

比如商品信息的索引,我们可以只存ID、标题、类别、品牌、价格等用于搜索的必要字段。然后其他字段可以存储在MySQL或HBase等关系型数据库中,推荐使用 ES + HBase。

也就是说,用户根据标题搜素标题,查到5个,然后用这个5个的id去MySQL/HBase数据库查询,因为id一般有索引查询会比较快。

三、数据预热,定时主动搜索

对于那些比较热门或者访问量高的数据,可以做一个专门的缓存预热子系统,每隔一段时间,主动去搜索一下ES,把数据刷到 os cache 里。

四、冷热分离

可以把热门的数据单独放到一个索引里,当然这个索引是放在新的更高配的机器上。冷门的数据的索引,可以放在低配的机器上。

五、doucment设计,适当冗余关联字段

为了提高查询速度,避免使用 join/nested/parent-child 等关联查询操作,我们的 document 可以适当冗余字段。

比如MySQL商品表有 ID、店铺ID、品牌ID、分类ID、标题、价格。我们可以把店铺名称、店铺等级、品牌名称和分类名称也冗余对应 document 里。这样可以直接根据品牌名称或者店铺名称来搜商品。

六、分页性能优化

ES分页很坑,前几页一般比较快,后面的就比较慢了。比如有5个分片(primary shard),每个分片有1000条数据,总共5000条数据。一页10条,查询第50页,协调节点需要在每个shard上查询前500条数据,然后把5个shard数据合并排序,再筛选拿出10条。

解决办法:

1. 不允许深度分页,比如只允许查看前面10页

2. 前端控制不允许跳页,只能一页一页翻,可以一次性多查询一些数据,存储在前端缓存里,分页时前端自己拿数据,减少调用后台次数

es查询大文本效率_【搜索引擎】 4-ES在大数据量下提高查询效率方案相关推荐

  1. Java8 Stream 数据流,大数据量下的性能效率怎么样?

    今日推荐程序猿惯用口头禅,你被击中了吗? 常见代码重构技巧(非常实用) B站,牛啊. 程序员缺乏经验的 7 种表现 2021年4月程序员工资统计:平均14596元,南京程序员收入挤进一线. 来源:bl ...

  2. 【mysql】sql查询速度不变?不同数据量下,查询速度不会变化的问题

    一.前言 如题所示,博主在测试sql的时候,发现有一条sql的速度是固定的?因为是时间搜索,所以我们通过更改时间区间来测试如下: between '2018-05-20 00:00:00' and ' ...

  3. 测试mysql的查询速度很慢_求助,mysql统计实时数据信息的,查询速度很慢?

    CREATE TABLE `action_log` ( `pkid` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键Id', `enterpr ...

  4. 提高大数据量并发访问时效率

    最近在做windows服务方面的开发,主要用它来解决A服务和其他服务发送数据失败后,重新发送的问题. 为了提高大数据量并发访问时效率问题,要在多台服务器上安装服务并采用多线程,就像是超市的收银,利用多 ...

  5. 大数据量下高并发同步的讲解(不看,保证你后悔!)

    偶然的机会在网上看到了这篇blog,觉得作者写得挺不错的(虽然自己并没有怎么看懂...),所以就转来跟大家分享分享吧~~~ 对于我们开发的网站,如果网站的访问量非常大的话,那么我们就需要考虑相关的并发 ...

  6. 大数据量下,身份证的查询优化

    大数据量下,身份证的查询优化 这里是测试练习采用select *,实际场景中还是使用所有字段的形式,这样也可以提高效率 方式一:身份证分别正向.逆向存储,使用like逆序模糊查询,满足最左匹配原则,索 ...

  7. 大数据量数据库设计与优化方案

    一.数据库结构的设计 如果不能设计一个合理的数据库模型,不仅会增加客户端和服务器段程序的编程和维护的难度,而且将会影响系统实际运行的性能.所以,在一个系统开始实施之前,完备的数据库模型的设计是必须的. ...

  8. JavaWeb学习笔记(数据库、SQL语句、数据查询语法、完整性约束、编码、备份和恢复数据、多表查询)

    数据库.SQL语句.数据查询语法.完整性约束.编码.备份和恢复数据.多表查询 JavaWeb学习笔记 数据库 数据库概念 基本命令 启动和关闭mysql服务器 客户端登录退出mysql SQL语句 S ...

  9. 大数据量下高并发同步的讲解(不看,保证你后悔)

    对于我们开发的网站,如果网站的访问量非常大的话,那么我们就需要考虑相关的并发访问问题了.而并发问题是绝大部分的程序员头疼的问题, 但话又说回来了,既然逃避不掉,那我们就坦然面对吧~今天就让我们一起来研 ...

最新文章

  1. [codeigniter]CI中使用pChart绘制图表,已测通过
  2. 访问云服务器储存的mp4_服务器如何存储视频文件格式
  3. c# 访问修饰符的访问权限
  4. [react-router] 请你说说react的路由的优缺点?
  5. docker mysql优势_前端使用docker有什么优势呢?
  6. 信号量优先级反转(翻转)与优先级继承
  7. 儿童心理健康的十项注意
  8. 计算机监控系统必须有直流系统吗,变电站直流屏是否必须用蓄电池
  9. python编程练习-完美数
  10. Pensieve Multi_agent代码详解以及A3C强化学习代码详解
  11. ug如何导入excel数据点_ug怎么导入 点数据库
  12. Telos 首份年报(中译版-下)
  13. span 禁止选中_网页代码常用小技巧(禁止另存为)
  14. 上方用计算机英文,教你Win10计算器应用变成英文的解决方法
  15. ie8 ajax 缓存问题,IE8/IE9下Ajax缓存问题
  16. java猜拳小游戏心得体会_java实现猜拳小游戏
  17. 蓝屏代码stop:0X000000EA(0X85E286B8,0X8635F210,0XF7A53CBC,0X00000001)NV4_DISP是什么意思?
  18. python游戏csgo开挂_V社:用深度学习检测CSGO中的开挂行为
  19. 人工智能专业应不应该读博士?
  20. H5微信中棋牌游戏域名防封解决方案

热门文章

  1. oracle数据库查表_oracle数据库之多表查询二
  2. png 微软ppt 透明度_花了8+小时,做了4页禅宗PPT定制!
  3. 轨迹压缩文献阅读 TrajStore: An Adaptive Storage System for Very Large Trajectory Data Sets
  4. sklearn学习 6.聚类算法K-Means
  5. 四:Java+SpringBoot框架使用(两种携带参数的get接口开发)
  6. python找房源_python抓取链家房源信息(二)
  7. php如何让B链接在当前页面打,javascript - 如何实现点击链接 A 弹出窗口 X,点击链接 B 继续在弹出窗口 X (刷新)打开?...
  8. python抓取汤不热视频_你们想要的 Tumblr 爬虫
  9. php获取excel数据并添加数据库,如何使用phpexcel读取数据并将其插入数据库?
  10. 集成druid实现数据库密码加密功能