Elasticsearch不只是全文检索引擎的领头羊,现在也是各个大厂标配的大数据平台之一,被广泛用于搜索加速,用户标签、画像系统、向量搜索等领域,它不是传统的关系型数据库,但这个信息爆炸,数据堆积的时代,我们获取知识的方式已经极大的改变,搜索、提问成了获取知识的第一手段。对Elasticsearch工程师的要求已经不亚于甚至超过了对DBA的要求。那么,要如何才能成为一个被认可的Elasticsearch工程师?希望这个系列文章能够从一个开发工程师的角度,给你点点帮助

文章目录

  • 选择最新的版本永远是一个不会错的选择
  • 从Benchmark上查看ES个版本在各场景上的性能差异
    • 测试数据类型
    • 不同的软件包配置
    • 不同的release
    • Nested 例子
  • 使用Rally自己做性能测试和对比
  • 总结

选择最新的版本永远是一个不会错的选择

在使用Elasticsearch之前,我们总是要先选择一个版本,选择最新的版本永远是一个不会错的选择。因为,Elasticsearch作为一个社区活跃的开源软件,有着极快的迭代着开发->反馈->再开发的模式。每个版本都可能有着大量的改进或者新功能,特别是大数据领域本身也在不停的进化着方法论,Elasticsearch从一个开始的只能做全文检索,到增加了列式存储、聚合框架、BKD Tree和优化稀疏数据存储,再到支持向量相似性,可以搜索语音、图片,直到几乎变成软件开发中搜索的代名词
因此,在最新的版本上做开发,基本上你会被Elasticsearch带着前进。


我也在不少公司仍然看到不少团队还在使用2.x版本的ES,每天和相对低下的性能和缺失的功能较劲。我这里大概列举一些在旧版本的ES上工作可能带来的烦恼:

  • 开始有大量的聚合需求,需对各种指标进行聚合,但性能受限,索引膨胀率高。聚合框架 + Block-KD tree (> 5.0)
  • 随着索引数据持续增加,分片变大,需要自动新建索引?Roll over API(> 5.0)
  • 随着数据量的增加或者集群横向扩容,需要动态的调整shard的数量? split API (> 6.2)
  • 更多的用户需要使用Elasticsearch,需要支持SQL查询? Elasticsearch SQL (> 6.3)
  • OOM问题?需要更精确计算的基于内存的断路器? real-memory circuit breaker(> 7.0)

或许这样说不是特别的直观,或者你觉得这些功能不是必须的,自己手动处理一下也没问题。那么我们从性能上看看。

从Benchmark上查看ES个版本在各场景上的性能差异

Elastic的运维团队针对各个版本的ES,在统一的硬件环境配置下,针对不同的数据场景和指标有一个每夜测试报告。测试结果在benchmark可以查看。

测试数据类型

我们先看看有哪些测试数据类型的覆盖:

基本上算很全面了,我们场景的数据类型都有专门的测试。

再看看测试都运行在哪些环境。

不同的软件包配置

  • bare: Elasticsearch 运行在非加密硬盘上
  • ear: Elasticsearch 运行在使用linux dm-crypt磁盘加密的硬盘上
  • docker: Docker运行官方的Elasticsearch镜像
  • oss: Apache 2.0 license的Elasticsearch (不包含X-Pack)
  • basic: 包含 X-Pack 的Elasticsearch(basic licence)
  • trial-security: 包含 X-Pack 的Elasticsearch,安全功能全开并使用TLS链路加密

再看看,都在哪些版本的Elasticsearch上运行

不同的release

  • 1.7.6
  • 2.4.6
  • 5.6.16
  • 6.8.0
  • 7.4.0
  • master

根据不同的release的参数,我们可以很直观的对比不同版本的Elasticsearch在不同场景下不同的指标表现。

Nested 例子

我们以嵌套文档来举例,看看数据


从上图,我们可以看到,从5.x版本之后开始,文档的索引速度有明显的提升,6.8.0基本上是2.x版本的2倍。
而在索引大小类似的情况下,索引过程多整个磁盘的IO消耗,再持续优化。
这里需要特别强调的是X-pack特别优秀的安全性能,无论是开启磁盘加密或是全链路的TLS/SSL加密,对性能的影响都是微乎其微的,有些数据甚至反常,这里得益于X-pack优秀的性能。这点是Search-Guard完全无法比拟。


GC的时间优化更为明显,特别是Young GC的时间消耗,2.x是最差的,是6.8.0的7倍。
对于相同nested query的响应时间,6.8.0基本上比2.x版本缩短2倍。


在不排序的情况下的term query和match all,7.4的表现极其优秀,因此,Elastic也是注意到,目前Elasticsearch越来越多的用在查询加速的场景,在使用filter比较多时(不用排序),7.4做了特定的优化。

当我们拥有了每个新版本上提供的各种新功能的一个视野,当我们明细了各个版本在不同场景下的性能差异,做出选择哪个版本的ES不是一个难题。但还是有可能,现有的数据不能够完全匹配你的场景,你仍然希望在你自己的场景上去判断是否需要升级到最新的版本。这时,我们需要自己定制化的benchmark

使用Rally自己做性能测试和对比

rally是Elastic开源的专门用于Elasticsearch性能测试的工具,这里就不做过多的介绍,具体可以查看官方文档。

这里只是简单介绍一下应该如何做自己的基线:

  • 使用和线上集群相同的硬件配置搭建单节点集群
  • 使用和线上集群相同的mapping,创建0副本,1分片的索引
  • 使用和线上集群相同的数据进行压测
  • 观察写入的性能,并使用和业务类似的查询请求观察搜索和聚合的性能
  • 压测数据持续导入ES集群,作为基线

可以根据以下教程,去自己生成和生产类似的数据用于测试

当一切数据完备之后,就可以在不同的版本上进行对比测试了:

总结

当完成以上套路之后,相信关于应该使用哪个版本的ES,你已经心知肚明了。。。是的,用最新的GA版本

Elasticsearch开发进阶指南——如何选择合适的ES版本相关推荐

  1. 音视频开发进阶指南--音视频概念基础

    音视频开发进阶指南--音视频概念基础 音频概念基础: 采样.量化和编码: 首先要对模拟信号进行采样,所谓采样就是在时间轴上对信号进行数字化.根据奈奎斯特定理(也称为采样定理),按比声音最高频率高2倍以 ...

  2. HTML5游戏开发进阶指南(亚马逊5星畅销书,教你用HTML5和JavaScript构建游戏!)

    HTML5游戏开发进阶指南(亚马逊5星畅销书,教你用HTML5和JavaScript构建游戏!) [印]香卡(Shankar,A.R.) 著 谢光磊 译 ISBN 978-7-121-21226-0 ...

  3. 《音视频开发进阶指南:基于Android与iOS平台的实践》源码下载地址

    年前买了这本书,想看下随书源码,一开始从CSDN下载频道下载电子书+源码,但那个源码不是这边书的. 从网上找了一段时间,终于找到了(其实在书的前言/勘误和支持中有给出),作者展晓凯的相关网站如下: 作 ...

  4. HTML5游戏开发进阶指南

    <HTML5游戏开发进阶指南> 基本信息 作者: (印)香卡(Shankar,A.R.) 译者: 谢光磊 出版社:电子工业出版社 ISBN:9787121212260 上架时间:2013- ...

  5. 23最新《Android音视频开发进阶指南》,音视频开发者速领

    作为Android开发程序员,我们时刻站在互联网的前端,而音视频作为现在乃至未来几年一个强劲的风口,吸引了许多程序员的关注. 那么音视频开发的行业现状究竟如何呢?我们又该怎样入门呢?请看下文: 音视频 ...

  6. 《音视频开发进阶指南》读书笔记(一) —— 音视频基础概念

    前言 最近要学音视频,在图书馆借到这本<音视频开发进阶指南>,读了一段时间觉得挺好就在某宝买了. 以后一段时间应该都会沉浸在研究音视频中,开个专题记录哈每一章的读书笔记吧(以iOS开发的角 ...

  7. 如何选择合适的 Neo4j 版本(2022版)

    欢迎来到"人人都能学会图数据库"(Graphs4Everyone)系列课程,本系列是Neo4j技能树的补充. 今天我们一起看看如何选择合适自己的 Neo4j 版本来开始图技术旅程. ...

  8. 软件开发团队成员分工_分析软件开发人员的能力–选择合适的团队成员

    软件开发团队成员分工 在这篇文章中,我将尝试解释一种评估开发人员技能的方法. 该方法仍然是一个概念,缺少一些具体的决策,但是您可以选择最适合您的情况的方法. 有许多评估开发人员技能的方法,我最喜欢的是 ...

  9. android音视频开发进阶指南,音视频开发进阶指南:基于Android与iOS平台的实践

    领取成功 您已领取成功! 您可以进入Android/iOS/Kindle平台的多看阅读客户端,刷新个人中心的已购列表,即可下载图书,享受精品阅读时光啦! - | 回复不要太快哦~ 回复内容不能为空哦 ...

  10. 已拿字节、腾讯、墨墨 offer,音视频开发进阶指南pdf

    背了多少单词 (更慌了,随口说100个左右) 怎么知道有墨墨这个app的 (同学介绍) 你简历说你自己心思缜密,但是你简历上的句子的标点符号有问题啊.(emmm) 项目的UI问题 技术 : JavaS ...

最新文章

  1. XenServer 6.5实战系列之四:XenServer 6.5 Installation
  2. Pycharm debug出现Qt 错误 Process finished with exit code -1073741819 (0xC0000005)
  3. Open quote is expected for attribute {1} associated with an element type name.
  4. android listpreference 自定义,Android ListPreference的用法一
  5. postgresql 怎么读_大数据采集和抽取怎么做?这篇文章终于说明白了!
  6. nas服务器改成网站,nas配置web服务器
  7. TypeScript学习(四):对象的定义及使用
  8. 进化计算-遗传算法之史上最全选择策略
  9. Easypoi 报表模板设置
  10. WIN10-NVME硬盘-无U盘安装-Ubuntu22.04-双系统(非虚拟机)
  11. Redis-NoSql结构化数据库
  12. 清理Elasticsearch中过期的日志索引
  13. 微信小程序项目实例——手势解锁
  14. 云计算----什么是云计算
  15. Class类是什么?
  16. java判断是否是闰年
  17. 腾讯安全发布《2020年公有云安全报告》,重点剖析8大主流安全风险
  18. 赚钱的方式,很有道理!!!!
  19. 特色图像尺寸css,Wordpress 3.2.1特色图像尺寸和裁剪(Wordpress 3.2.1 Featured Image Size and Crop)...
  20. 【论文速递】ISPRS2018 :基于增强极线几何约束以及自适应窗最小二乘匹配方法的立体SAR山区DSM

热门文章

  1. LoRa 信噪比和接收灵敏度
  2. sqlserver还原数据库时失败因为 当前没有数据库备份
  3. 把mysql一个表的部分或全部数据复制追加到另一个表的方法
  4. 黄素单核苷酸小麦麦清白蛋白纳米粒|石杉碱甲乳清白蛋白纳米粒Huperzine-whey protein|化学试剂
  5. 粗浅看Struts2和Hibernate框架
  6. 线性代数可以速成吗_怎样速成线性代数?
  7. 如何用Excel快速制作甘特图?(超详细!)
  8. 关系图谱在风控体系的应用与实践
  9. wav格式怎么转换成mp3格式
  10. 聊聊我在腾讯和字节工作感受