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

Elasticsearch 与 OpenSearch:揭开性能差距

作者: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 自行决定。 当前不可用的任何特性或功能可能无法按时交付或根本无法交付。

相关文章:

Elasticsearch 与 OpenSearch:揭开性能差距

作者:George Kobar, Ugo Sangiorgi 对于任何依赖快速、准确搜索数据的组织来说,强大、快速且高效的搜索引擎是至关重要的元素。 对于开发人员和架构师来说,选择正确的搜索平台可以极大地影响你的组织提供快速且相关结果的能力。 在我们全面的…...

100个Java工具类之41:系统工具类Apache之SystemUtils

系统工具类Apache之 org.apache.commons.lang3.SystemUtils 根据Apache SystemUtils源码中介绍,SystemUtils是java.lang.System的帮助程序。当因安全限制无法读取系统属性时,则会返回null。下面是为大家整理的几个主要用法。 一、获取主机名 String ho…...

maven Jar包反向install到本地仓库

maven Jar包反向install到本地仓库 需求实现 需求 项目打包时报错,缺少一个jar包。 但是在maven仓库都找不到此jar包,其他人提供了这个jar包。 需要把这个jar包install到本地仓库,使项目能正常打包运行。 实现 使用git bash命令执行以下脚…...

.NET6使用SqlSugar操作数据库

1.//首先引入SqlSugarCore包 2.//新建SqlsugarSetup类 public static class SqlsugarSetup{public static void AddSqlsugarSetup(this IServiceCollection services, IConfiguration configuration,string dbName "ConnectString"){SqlSugarScope sqlSugar new Sq…...

MySQL8是什么-MySQL8知识详解

从今天起,开始更新MySQL8的教程,今天更新MySQL8的第一篇文章,主要讲了MySQL8是什么、MySQL数据库的概念、MySQL的优势和MySQL的发展历史。 1、MySQL8是什么 MySQL 8是一个开源的关系型数据库管理系统。它是MySQL数据库的最新版本&#xff0c…...

Spring Gateway+Security+OAuth2+RBAC 实现SSO统一认证平台

背景:新项目准备用SSO来整合之前多个项目的登录和权限,同时引入网关来做后续的服务限流之类的操作,所以搭建了下面这个系统雏形。 关键词:Spring Gateway, Spring Security, JWT, OAuth2, Nacos, Redis, Danymic datasource, Jav…...

flutter开发实战-TextPainter计算文本内容的宽度

flutter开发实战-TextPainter计算文本内容的宽度 最近开发过程中根据Text文本的大小判断是否需要进行显示跑马灯效果,获取文本的大小,需要TextPainter来获取Size 一、TextPainter TextPainter主要用于实现文本的绘制。TextPainter类可以将TextSpan渲染…...

竞赛项目 深度学习的动物识别

文章目录 0 前言1 背景2 算法原理2.1 动物识别方法概况2.2 常用的网络模型2.2.1 B-CNN2.2.2 SSD 3 SSD动物目标检测流程4 实现效果5 部分相关代码5.1 数据预处理5.2 构建卷积神经网络5.3 tensorflow计算图可视化5.4 网络模型训练5.5 对猫狗图像进行2分类 6 最后 0 前言 &#…...

MySQL相关的SQL语句、数据库、数据表、字段、类型

文章目录 前言MySQL整数类型MySQL字符串类型MySQL小数类型MySQL时间类型常用的基本SQL语句 前言 1、SQL语句不区分大小写。 MySQL整数类型 序号数据类型数据范围1TINYINT-128~1272SMALLINT-32768~327673MEDIUMINT-223~223-14INT-231~231-15BIGINT-263~263-1 MySQL字符串类型 …...

微信个人小程序申请 (AppID 和 AppSecret)

1. 登录微信公众平台 https://mp.weixin.qq.com/cgi-bin/loginpage?url%2Fcgi-bin%2Fhome%3Ft%3Dhome%2Findex%26lang%3Dzh_CN%26token%3D47421820 2. 右上角立即注册 3. 注册类型选择小程序 4. 账号信息 5. 邮箱激活 6. 小程序发布流程 7. 小程序信息 (前往填写) 8. 获取小程…...

使用zap日志替代xorm日志

xorm提供了自定义日志的接口,它的接口定义如下: // Logger is a logger interface type Logger interface {Debug(v ...interface{})Debugf(format string, v ...interface{})Error(v ...interface{})Errorf(format string, v ...interface{})Info(v ..…...

YOLOv5-7.0实例分割+TensorRT部署

一:介绍 将YOLOv5结合分割任务并进行TensorRT部署,是一项既具有挑战性又令人兴奋的任务。分割(Segmentation)任务要求模型不仅能够检测出目标的存在,还要精确地理解目标的边界和轮廓,为每个像素分配相应的…...

回归决策树模拟sin函数

# -*-coding:utf-8-*- import numpy as np from sklearn import tree import matplotlib.pyplot as pltplt.switch_backend("TkAgg") # 创建了一个随机数生成器对象 rng rngnp.random.RandomState(1) print("rng",rng) #5*rng.rand(80,1)生成一个80行、1列…...

NeRF基础代码解析

embedders 对position和view direction做embedding。 class FreqEmbedder(nn.Module):def __init__(self, in_dim3, multi_res10, use_log_bandsTrue, include_inputTrue):super().__init__()self.in_dim in_dimself.num_freqs multi_resself.max_freq_log2 multi_resself…...

职场新星:Java面试干货让你笑傲求职路(三)

职场新星:Java面试干货让你笑傲求职路 1、token 为什么存放在 redis 中?2、索引的底层原理是什么?3、Spring IOC和AOP的原理4、接口和抽象类有什么共同点和区别?5、为什么要使用线程池?直接new个线程不好吗&#xff1f…...

获取指定收获地址的信息

目录 1 /// 获取指定收获地址的信息 2 /// 删除指定的收获地址信息 3 /// 取消订单 4 /// 确认订单收货 /// <summary> /// 获取指定收获地址的信息</...

突破笔试:力扣全排列(medium)

1. 题目链接&#xff1a;46. 全排列 2. 题目描述&#xff1a;给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[…...

gitlab 503 错误的解决方案

首先使用 sudo gitlab-ctl status 命令查看哪些服务没用启动 sudo gitlab-ctl status 再用 gitlab-rake gitlab:check 命令检查 gitlab。根据发生的错误一步一步纠正。 gitlab-rake gitlab:check 查看日志 tail /var/log/gitlab/gitaly/current删除gitaly.pid rm /var/opt…...

智能离子风棒联网监控静电消除器的主要功能和特点

智能离子风棒联网监控静电消除器是一种集成了智能化和网络化监控功能的设备&#xff0c;用于监测和消除静电现象。它的工作原理是通过产生大量的正负离子&#xff0c;将空气中的静电中和和消除&#xff0c;从而达到防止静电积累和放电的目的。 智能离子风棒联网监控静电消除器的…...

matplotlib 设置legend的位置在轴最上方,长度与图的长度相同

import matplotlib.pyplot as plt import numpy as npx1 np.linspace(0, 10, 50) x2 [6,4,3]ax plt.subplot() ax.plot(x1, label"test1") ax.plot(x2, label"test2") # 设置图例的位置 # 将左下角放置在【0, 1.02】位置处&#xff0c;横为1&#xff0c…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

微信小程序云开发平台MySQL的连接方式

注&#xff1a;微信小程序云开发平台指的是腾讯云开发 先给结论&#xff1a;微信小程序云开发平台的MySQL&#xff0c;无法通过获取数据库连接信息的方式进行连接&#xff0c;连接只能通过云开发的SDK连接&#xff0c;具体要参考官方文档&#xff1a; 为什么&#xff1f; 因为…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...

免费PDF转图片工具

免费PDF转图片工具 一款简单易用的PDF转图片工具&#xff0c;可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件&#xff0c;也不需要在线上传文件&#xff0c;保护您的隐私。 工具截图 主要特点 &#x1f680; 快速转换&#xff1a;本地转换&#xff0c;无需等待上…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机

这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机&#xff0c;因为在使用过程中发现 Airsim 对外部监控相机的描述模糊&#xff0c;而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置&#xff0c;最后在源码示例中找到了&#xff0c;所以感…...

MySQL 8.0 事务全面讲解

以下是一个结合两次回答的 MySQL 8.0 事务全面讲解&#xff0c;涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容&#xff0c;并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念&#xff08;ACID&#xff09; 事务是…...

代码规范和架构【立芯理论一】(2025.06.08)

1、代码规范的目标 代码简洁精炼、美观&#xff0c;可持续性好高效率高复用&#xff0c;可移植性好高内聚&#xff0c;低耦合没有冗余规范性&#xff0c;代码有规可循&#xff0c;可以看出自己当时的思考过程特殊排版&#xff0c;特殊语法&#xff0c;特殊指令&#xff0c;必须…...

libfmt: 现代C++的格式化工具库介绍与酷炫功能

libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库&#xff0c;提供了高效、安全的文本格式化功能&#xff0c;是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全&#xff1a…...