Elasticsearch 与 OpenSearch:揭开性能差距

news2024/11/28 2:28:27

作者:George Kobar, Ugo Sangiorgi

 

对于任何依赖快速、准确搜索数据的组织来说,强大、快速且高效的搜索引擎是至关重要的元素。 对于开发人员和架构师来说,选择正确的搜索平台可以极大地影响你的组织提供快速且相关结果的能力。 在我们全面的性能测试中,Elasticsearch 成为明智的选择。 Elasticsearch 比 OpenSearch 快 40%-140%,同时使用更少的计算资源。

在本文中,我们将在六个主要领域对 Elasticsearch 8.7 和 OpenSearch 2.7(测试时两者的最新版本)进行性能比较:文本查询、排序、日期直方图、范围和术语,包括资源利用率。 我们的目标是提供公平、实用的技术见解,帮助你做出明智的决策,无论你是优化现有系统还是设计新系统。 此比较还旨在清楚地突出 Elasticsearch 和 OpenSearch 之间的性能差异,表明两者完全不同。

我们将首先回顾性能比较的结果,然后是我们的测试方法和测试环境。

结果

使用 t-test 对性能比较结果(重点关注请求的 p90(第 90 个百分位数))进行交叉验证,以确保两种解决方案之间的延迟测量存在统计差异。 针对每种查询类型计算相对变化(以百分比表示)。 我们还使用箱线(box plot)图显示 100% 请求的延迟分布,箱线图显示最小值、最大值、中值、平均值和异常值。 实际的方框显示了下四分位数和上四分位数,其中分别有 25% 和 75% 的观测值落在其中。通过这种方式,我们可以了解这些值的实际分布情况。

文本查询 — 速度提高 76%

Show me all data that has jane@doe.com.

 

Elasticsearch 表现出了显着的领先优势,执行文本查询的速度比 OpenSearch 快 76%。

文本查询是全文搜索的基础和关键,而全文搜索是 Elasticsearch 的主要功能。 文本字段查询允许用户搜索文本数据中的特定短语、单个单词甚至单词的一部分。 用户能够通过文本数据执行复杂的搜索 —— 它增强了整体搜索体验并支持广泛的应用程序和解决方案。

排序

"Show me the most expensive products first."

在对简单文本查询结果进行排序时,Elasticsearch 的性能比 OpenSearch 高出惊人的 140%。 此外,Elasticsearch 的时间戳、关键字和数字排序查询的执行时间分别加快了 24%、97% 和 53%。

排序是按特定顺序(例如字母顺序、数字顺序或时间顺序)排列数据的过程。 排序对于基于特定条件的搜索结果非常有用,可确保向客户呈现最相关的结果。 这是增强用户体验并提高搜索过程整体效率的重要功能。

日期直方图

Show me a bar chart ordered in time for all the data.

对于日期直方图聚合,Elasticsearch 比 OpenSearch 快 81%,展示了其强大能力。 处理时间的加速有利于根据时间序列数据生成有序条形图。

日期直方图聚合可用于通过将基于时间的数据划分为间隔或存储桶来聚合和分析数据。 此功能使用户能够可视化并更好地了解一段时间内的趋势、模式和异常情况。

范围查询

Show me just the price of your products between 0-25.

Elasticsearch 在范围查询方面快了 40%,在范围聚合方面快了 68%。

在测试或关键字字段上搜索范围查询是性能和可扩展性的另一个核心参数。 范围查询对于根据给定字段中的特定值范围过滤搜索结果非常有用。 此功能允许用户缩小搜索结果范围并快速找到更多相关信息。

更快的构面创建至关重要,因为它涉及根据特定属性将数据分类为组(分面),然后在每个组内执行汇总操作。 此过程通过提供电子商务应用程序中经常使用的数据的结构化视图,使分析、过滤和可视化变得更加容易。

术语查询

Group the data by what products were bought together.

 

Elasticsearch 展示了其优越性,与 OpenSearch 相比,术语查询速度快 108%,复合术语聚合速度快 103%。 这些优势使 Elasticsearch 成为涉及数据分组和过滤的任务的更有吸引力的选择。

Elasticsearch 中的 “Significant Terms” 聚合会自动排除常见或不感兴趣的术语,例如停用词(“and”、“the”、“a”)或结果中索引中频繁出现的术语。 这是基于对索引数据中的术语频率和分布的统计分析。

资源利用率

Elasticsearch 不仅在各种与搜索相关的任务中优于 OpenSearch,而且还被证明具有更高的资源效率。 默认情况下,OpenSearch 对数据流使用 best_speed 编解码器(优先考虑查询速度而不是存储效率),而 Elasticsearch 使用 best_compression。 使用默认的开箱即用设置,Elasticsearch 使用的磁盘空间减少了 37%,并且当在两者上使用 best_compression(用于此基准测试的编解码器)时,Elasticsearch 的空间效率仍然提高了 13%。

时间序列数据流 (TSDS)

我们更进一步,将数据重新索引到时间序列数据流中,从而进一步压缩数据 - 平均文档大小从 218 kb 下降到 124 kb,减少了 54.8%,如下表所示。

Average Document Size

Difference from OpenSearch

OpenSearch Datastream

249 kb

-

Elasticsearch Datastream

218 kb

13%

Elasticsearch TSDS

124 kb

54.8%

第三方验证

我们的性能测试方法和结果已经过 TechTarget 的 Enterprise Strategy Group(一家受人尊敬的第三方供应商)的独立验证。 Tech Target 企业战略组 ESG 的验证增加了我们的调查结果的可信度和公正性,确保测试方法和后续结果保持最高的准确性和完整性标准。 他们的认可重申了我们比较的稳健性和可靠性,使你能够根据我们的基准测试结果做出明智的决定。

测试方法

我们如何得出这些结果

本着公平、精确比较 Elasticsearch 和 OpenSearch 的精神,我们创建了两个等效的 5 节点集群,每个集群配备 32GB 内存、8 个 CPU 核心、每个节点 300GB 磁盘。 对于每个产品,我们提取随机生成的相同 1TB 日志文件,其中包含 22 个字段(更多详细信息如下)。

测试是在单独的 Kubernetes 节点池中完成的,确保每个产品都有专用资源。 我们遵循 Elasticsearch 和 OpenSearch 的最佳实践,包括在发起查询之前强制合并索引以及防止缓存请求影响的策略,从而确保测试结果的完整性。

为了保证 Elasticsearch 和 OpenSearch 比较的透明度,我们将完整的基准测试流程作为开源项目提供。 可在此处访问的存储库包括用于配置 Kubernetes 集群的 Terraform 配置以及用于创建 Elasticsearch 和 OpenSearch 集群的 Kubernetes 清单。 此外,存储库中还提供了基准测试中使用的查询。

你不仅可以测试自己,还可以使用此存储库进行自己的研究并提高 Elasticsearch 项目的性能。

我们测试了什么

我们在 Elasticsearch 和 OpenSearch 之间进行的测试是在关键使用领域进行的,包括:

  • 搜索 - 具有典型搜索栏的电子商务用例
  • 可观察性 —— 大量系统遥测数据,例如日志、指标和应用程序跟踪
  • 安全——安全事件实时分析

即将进行的比较将深入分析每个平台在这些领域的表现,包括文本查询、排序、数据直方图、范围和术语。

数据集和摄取

使用此开源工具生成了 1TB 数据集,然后将其上传到 GCP 存储桶。 Logstash® 用于将 GCP 存储桶中的数据集提取到 Elasticsearch 和 OpenSearch 中。 存储库中还包含生成类似数据集的说明,以防你想要复制基准测试。

各字段组成的所有日志如下表所示。 除 @timestamp 之外,所有事件的值都是随机的,@timestamp 是每个事件连续且唯一的。

Field

Value

@timestamp

Jan 3, 2023 @ 18:59:58.000

agent.id

baac7358-a449-4c36-bf0f-befb211f1d38

agent.name

fernswisher

agent.type

filebeat

agent.version8.8.0
aws.cloudwatch.ingestion_time2023-05-01T20:49:30.820Z
aws.cloudwatch.log_group/var/log/messages
aws.cloudwatch.log_streamnorthcurtain
cloud.regionap-southeast-3
data_stream.datasetbenchmarks
data_stream.namespaceday3
data_stream.typelogs
event.datasetgeneric
event.idgravecrane
input.typeaws-cloudwatch
log.file.path/var/log/messages/northcurtain
message2023-05-01T20:49:30.820Z May 01 20:49:30 ip-106...
meta.file2023-01-03/1682974095-gotext.ndjson.gz
metrics.size408
metrics.tmin238
process.namesystemd
tagspreserve_original_event

基准测试

总共考虑了五个关键领域的 35 种查询类型,总计 387,000 个请求。 在 100 个预热查询之后,每个查询类型执行 100 次,每个查询重复该过程 50 次。

Rally 是 Elastic® 开发的开源工具,用于 Elasticsearch 和 Elastic Stack 的其他组件的基准测试和性能测试。 它允许用户针对 Elasticsearch 集群模拟各种类型的工作负载,例如索引和搜索,并以可重现的方式测量其性能。 虽然 Rally 是由 Elastic 开发的,主要是为了对 Elasticsearch 进行基准测试而设计的,但它是一个灵活的工具,可以适应与 OpenSearch 一起使用。

Elastic 每天运行基准测试,以确保 Elasticsearch 中的任何新代码的性能与昨天一样或更好。 我们还使用自己的机器学习来识别性能异常或资源利用效率低下。 我们以透明和公开的方式提供性能和大小测试,以使使用我们产品的每个人受益。 值得注意的是,其他厂商不提供此功能,这可以帮助用户随着时间的推移监控他们感兴趣的变化。

结论:Elasticsearch — 明显的胜利者

考虑到各种测试的结果,很明显 Elasticsearch 始终优于 OpenSearch。 无论是处理简单查询、对数据排序、生成直方图、处理术语或范围查询,甚至是资源优化,Elasticsearch 都处于领先地位。

在选择搜索引擎平台时,企业应优先考虑速度、效率和低资源利用率 —— 这些都是 Elasticsearch 所擅长的属性。 这使得它成为依赖快速准确搜索结果的组织的一个令人信服的选择。 无论你是对搜索结果进行排序的电子商务平台、识别威胁的安全分析师,还是仅仅需要有效观察关键应用程序,Elasticsearch 都在此次比较中成为明显的领导者。

准备好亲自测试 Elasticsearch 了吗?

开始免费试用 Elastic Cloud 14 天,了解 Elasticsearch 性能如何帮助你完成项目。

本文中描述的任何特性或功能的发布和时间安排均由 Elastic 自行决定。 当前不可用的任何特性或功能可能无法按时交付或根本无法交付。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/858375.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

突破笔试:力扣计算布尔二叉树的值(medium)

1.题目链接:2331. 计算布尔二叉树的值 2. 题目描述: 给你一棵 完整二叉树 的根,这棵树有以下特征:叶子节点 要么值为 0 要么值为 1 ,其中 0 表示 False ,1 表示 True 。 非叶子节点 要么值为 2 要么值为 …

通过Easy Excel导入数据

目录 🍑一、背景🍑二、开发验证🍊2.1、引入easyexcel依赖🍊2.2、创建表及基础代码🍊2.3、处理类及接口🍓2.3.1、EasyExcel监听处理器🍓2.3.2、Controller接口🍓2.3.3、service调用监…

Vue3使用wangEditor

那么这一节我们在编辑公司信息的弹窗中使用富文本插件wangEditor官网 Vue3使用wangEditor 安装wangEditor在弹窗中引入wangEditor结构api接口部分editor组件script部分怎么去修改富文本的编辑器? 案例内效果: 安装wangEditor npm install wangeditor/…

bash: make: command not found

make之后报错信息如下:cd 对应的文件路径后 make 发现报错:bash: make: command not found 这个原因可能是没有安装make工具,也可能是安装了make之后,没有将make的文件路径添加到系统环境变量中 有没有安装make,可以使用Search Everything搜索是否有make…

24聊城大学823软件工程考研

1.软件发展有几个阶段?各有何特征? ①程序设计阶段 硬件特征:价格贵、存储容量小、运行可靠性差。 软件特征:只有程序、程序设计概念,不重视程序设计方法。 ②程序系统阶段。 硬件特征:速度、容量及工作可…

JS逆向系列之猿人学爬虫第11题 - app抓取 - so文件协议破解

题目地址 http://match.yuanrenxue.com/match/11这是个app题目,先下载下来安装到测试手机上 安装完成后的app界面长这样 打开之后是这样的: 要求已经简单明了了。 二话不说先反编译app 不出意外的是没出意外,源代码里面没啥混淆,所有东西都展示的明明白白的。 "…

Java转换流

文章目录 转换流的理解**InputStreamReader****OutputStreamWriter**练习 引入情况1: 使用FileReader 读取项目中的文本文件。由于IDEA设置中针对项目设置了UTF-8编码,当读取Windows系统中创建的文本文件时,如果Windows系统默认的是GBK编码&a…

每天一个知识点——Normalization

这里结合大模型的学习,主要分析Layer Norm、RMS Norm和Deep Norm的异同,与此同时,究竟是在之前执行Normalization(Pre-Norm)还是之后执行(Post-Norm),也是一个比较喜欢拿来讨论的知识…

LoRaWAN网关与网络服务器(NS)的通信CUPS 协议介绍

LoRa Basics™ Station 定期查询 CUPS 服务器以获取更新。该协议是 HTTP/REST,使用Credentials中描述的客户端/服务器身份验证方法。对于每个查询,工作站都会提供有关其当前状态的信息,并接收包含其 LNS 和 CUPS 凭证更新的二进制 blob,以及具有任意更新的通用数据段。 通…

AIRIOT搭建低成本、更聪明的智能环卫系统,让管理更加高效智能

环卫工程作为城市基础设施保障,是城市建设管理中不可或缺的重要组成部分。随着城市进程的加快及技术的进步,环卫工程管理也在逐渐向精细化、智能化、绿色化等趋势发展。 智能环卫依托物联网、AI、大数据等技术,对环卫管理所涉及到的人、车、物…

ACM算法竞赛中在编辑器中使用输入输出样例-CPH

通用方法 我们可以在编辑器中创建三个文件,一个是main.cpp,一个是test.in,一个是test.out分别用来写代码,输入输入数据,显示输出数据 这种方法的好处是不需要插件,在任何编辑器中都可以实现,例如Devc,sublime,vscode…

【Unity细节】Unity打包后UI面板消失是怎么回事

👨‍💻个人主页:元宇宙-秩沅 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 秩沅 原创 收录于专栏:unity细节和bug ⭐关于物体的动画碰到其他碰撞器后停止播放的问题⭐ 文章目录 ⭐关于物体的动画碰…

Camunda 7.x 系列【3】Camunda 简介

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 2.7.9 本系列Camunda 版本 7.19.0 源码地址:https://gitee.com/pearl-organization/camunda-study-demo 文章目录 1. 概述2. 核心组件2.1 流程引擎2.2 模型2.3 Web…

无涯教程-Perl - grep函数

描述 此函数从LIST中提取EXPR为TRUE的所有元素。 语法 以下是此函数的简单语法- grep EXPR, LIST返回值 此函数返回在标量context中表达式返回true的次数以及在列表context中与表达式匹配的元素列表。 例 以下是显示其基本用法的示例代码- #!/usr/bin/perllist (1,&qu…

webpack 热更新的实现原理

webpack 的热更新⼜称热替换(Hot Module Replacement),缩写为HMR。这个机制可以做到不⽤刷新浏览器⽽将新变更的模块替换掉旧的模块。 原理: ⾸先要知道 server 端和 client 端都做了处理⼯作: 在 webpack 的 watch…

在Cesium中给管道添加水流效果

添加效果前后对比: 关键代码: /*** 水流粒子,目前支持向上或者向下的效果* @param {Number} x* @param {Number} y* @param {Number} z* @param {Number} options* @example* options = {* color: Cesium.Color.AZURE,* emissionRate: 5, //影响水流速度* direc…

Python编程——谈谈函数的定义、调用与传入参数

作者:Insist-- 个人主页:insist--个人主页 本文专栏:Python专栏 专栏介绍:本专栏为免费专栏,并且会持续更新python基础知识,欢迎各位订阅关注。 目录 一、理解函数 二、函数的定义 1、语法 2、定义一个…

接口测试过程中常见的接口安全性问题,通用测试点整理归纳

我们日常的接口测试工作主要是验证接口的功能性(入参、出参、边界值等),在接口测试过程中遇到的一些接口安全性的问题,整理成了通用的测试点,不一定适用于全部的产品,仅做参考。 一、登录接口校验 验证登…

手写SpringCloud系列-负载均衡算法实现

手写SpringCLoud项目地址,求个star github:https://github.com/huangjianguo2000/spring-cloud-lightweight gitee:https://gitee.com/huangjianguo2000/spring-cloud-lightweigh 一:什么是负载均衡 最开始的系统访问量很少,就一个单机就足…

研究生阶段如何进入一个领域——兼李芒老师教育技术导论解读

文章 https://devpress.csdn.net/hpc/64c8bb57bfca273ff3549881.html