Redis Search系列 - 第六讲 基准测试 - Redis Search VS. MongoDB VS. ElasticSearch

目录

    • 一、引言
    • 二、Redis Search 2.x版本的性能提升
    • 三、Redis Search VS. MongoDB VS. ElasticSearch
      • 3.1 测试环境
      • 3.2 100%写 - 基准测试
      • 3.3 100%读 - 基准测试
      • 3.4 混合读/写/搜索 - 基准测试
      • 2.5 搜索延迟分析
      • 3.6 读延迟分析
      • 3.7 写延迟分析
      • 3.8 Redis Search VS. ElasticSearch
      • 3.9 总结

一、引言

本基准测试参考自Redis官方博客,本文仅做汇总说明,具体原文可参见:
https://redis.io/blog/redisjson-public-preview-performance-benchmarking/

二、Redis Search 2.x版本的性能提升

索引了590万篇维基百科摘要,并运行了一个全文搜索查询面板(详情参见这里),不难发现:

  • Redis Search 2.2(结合Redis JSON)比之前的版本快1.7倍,且每个新版本都在持续优化
  • 从v2.0升级到v2.2,将得到更快的写/读/搜索

具体统计结果参见下面2张图:
在这里插入图片描述
在这里插入图片描述

三、Redis Search VS. MongoDB VS. ElasticSearch

3.1 测试环境

基础环境说明

  • 均采用m5d.8xlarge虚拟机,带有本地ssd,
  • 每组压测均由四个虚拟机组成:一个客户端 + 三个数据库服务器。
  • 基准测试客户机和数据库服务器都运行在单独的m5d.8xlarge实例,并放置在最佳网络条件下,这些实例均位于同一可用区内,实现了稳态分析所需的低延迟和稳定的网络性能。

测试集群说明

存储集群组成索引
MongoDB 5.0.3三成员副本集(Primary-Secondary-Secondary)在搜索字段上创建了文本索引(TEXT),以支持文本搜索查询
ElasticSearch 7.1515个分片设置,启用查询缓存,
使用RAID 0阵列的2个本地NVMe SSD
预先创建索引
Redis Search 2.2
Redis JSON 2.0
OSS Redis Cluster v6.2.6,
27个分片均匀分布在三个节点上,
加载了Redis Search 2.2和Redis JSON 2.0 OSS模块
预先创建索引

测试框架
https://github.com/RedisJSON/RedisJSON/tree/master/tests/benchmarks
https://github.com/RediSearch/ftsb/blob/master/docs/enwiki-abstract-benchmark/description.md
https://github.com/RediSearch/ftsb/blob/master/docs/nyc_taxis-benchmark/description.md
https://github.com/brianfrankcooper/YCSB/pull/1577

3.2 100%写 - 基准测试

结合 延迟吞吐量 的综合提升:

  • Redis JSON比Mongodb快5.4倍
  • 比Elastic Search在单独写方面快200倍
  • 99%的Redis请求在不到1.5ms的时间内完成。

注:
Redis JSON是三种方案中唯一在每次写入时自动更新索引的解决方案,
其他均是异步更新索引,需要等待一段时间后才能检索到数据

具体统计结果如下图:
在这里插入图片描述
在这里插入图片描述

3.3 100%读 - 基准测试

注:
此处的读可以理解为根据key直接读取文档,而不是执行全文检索

结合 延迟吞吐量 的综合提升:

  • Redis JSON比MongoDB快12.7倍
  • 比Elastic Search快500倍

在这里插入图片描述

在这里插入图片描述

3.4 混合读/写/搜索 - 基准测试

实际应用程序的工作负载几乎总是混合了读、写和搜索查询。因此,当混合工作负载接近饱和时,理解由此产生的混合工作负载吞吐量曲线就更加重要了。作为起点,我们考虑了 65%搜索35%读取的场景,这代表了一个常见的现实场景,在这个场景中,我们执行的搜索/查询比直接读取更多。65%的搜索35%的读取0%的更新 的初始组合也使ElasticSearch和Redis JSON的吞吐量相等,后续不断切换YCSB工作负载中搜索/读取/更新之间的比率以匹配测试需求。在每个测试变量中,我们都添加了10%的写操作,并以相同的比例降低了搜索和读取百分比。这些测试变化的目标是了解每个产品如何处理数据的实时更新,我们认为这是事实上的架构目标,即 写入立即提交到索引,读取总是最新的

搜索场景
分页查询,双字全文检索,结果按数字属性排序
a paginated two-word query match, sorted by a numeric field

结合对比结果如下:

  • Redis JSON: 持续更新数据并增加写入比例不会影响读取或搜索性能,反而会提高整体吞吐量。
  • ElasticSearch:随着更新比例从0%增加到50%,吞吐量(Ops/sec)从10k下降到2.1k(降低5倍),性能受到显著影响,读取和搜索速度变慢。
  • MongoDB:搜索性能比Redis JSON和ElasticSearch慢两个数量级,最大吞吐量为424 Ops/sec,而Redis JSON为16k Ops/sec。
  • 综合所有混合负载测试
    • Redis JSON在混合工作负载下的吞吐量比MongoDB高50.8倍,比ElasticSearch高7倍。
    • Redis JSON的操作延迟比MongoDB低91倍,比ElasticSearch低23.7倍。
  • 总结: Redis Search几乎不受更新比例影响,吞吐量稳步提升,三者中性能最高;ElasticSearch受到更新比例的显著影响,随着更新比例的提高,读取和搜索速度变慢;MongoDB性能整体最差(比RedisSearch、ElasticSearch慢2个数据级)。

具体测试统计结果如下图:
在这里插入图片描述

2.5 搜索延迟分析

注: 延迟即耗时,即请求平均耗时

在下图中,显示了搜索测试吞吐量为250ops/sec时从p0到p9999的延迟百分位数:

  • Mongodb DB的表现都远远落后于ElasticSearch和Redis JSON。
  • 对比ElasticSearch与Redis JSON,很明显ElasticSearch容易受到更高延迟的影响,这很可能是由垃圾收集(GC)触发或搜索查询缓存丢失引起的。
  • Redis JSON的p99低于2.61ms,而Elastic Search的p99则达到了10.28ms。
    在这里插入图片描述

3.6 读延迟分析

在下图中,显示了读测试吞吐量为250ops/sec时从p0到p9999的延迟百分位数:

  • Redis JSON是在所有分析的延迟百分位数中保持亚毫秒级延迟的唯一解决方案。
  • 在p99时,Redis JSON的延迟为0.23ms,其次是MongoDB的5.01ms, ElasticSearch的10.49ms。
    在这里插入图片描述

3.7 写延迟分析

在下图中,显示了写测试吞吐量为250ops/sec时从p0到p9999的延迟百分位数:

  • MongoDB和Redis JSON即使在p99时也保持着亚毫秒级的延迟。
  • Elastic Search显示出很高的尾部延迟(>10ms),很可能是由于与Elastic Search的搜索峰值相同的原因(GC)。
    在这里插入图片描述

3.8 Redis Search VS. ElasticSearch

只关注ElasticSearch和Redis JSON,同时保持6K ops/sec的可持续负载,我们可以观察到:

  • 在读和更新(写)时
    • ElasticSearch和Redis JSON(更稳定的方案)的读取和更新模式仍然跟之前250 ops/sec时的压测差不多。
    • 在读时,Redis JSON的p99为3ms,而ElasticSerach的p99为162ms。
    • 在更新时,Redis JSON的p99为3ms,而ElasticSearch的p99为167ms。
  • 在搜索时
    • Elastic Search和Redis JSON以一位数的p50延迟开始(Redis JSON的p50延迟为1.13ms,而Elastic Search的p50延迟为2.79ms)
    • 在较高的百分位数上,Elastic Search付出了GC触发和查询缓存丢失的代价,这在>= p90百分位数上可以清楚地看到。
    • Redis JSON(更高效)的p99保持在33ms以下,而在Elastic Search上,p99保持在163ms,是前者的5倍。

具体测试结果参见下图:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3.9 总结

测试项RedisSearchElasticSearchMongoDB结果对比
100%写吞吐量:69672/秒
平均耗时:0.341毫秒
吞吐量:7911/秒
平均耗时:7.818毫秒
吞吐量:37985/秒
平均耗时:1.001毫秒
  • Redis JSON比MongoDB快5.4倍
  • 比ElasticSearch在单独写方面快200倍
  • 99%的Redis请求在不到1.5ms的时间内完成
100%读吞吐量:178364/秒
平均耗时:0.172毫秒
吞吐量:11281/秒
平均耗时:5.578毫秒
吞吐量:62933/秒
平均耗时:0.768毫秒
  • Redis JSON比MongoDB快12.7倍
  • 比ElasticSearch快500倍
混合读/写/搜索持续更新数据并增加写入比例不会影响读取或搜索性能,反而会提高整体吞吐量(从10k到16k)。随着更新比例从0%增加到50%,吞吐量(Ops/sec)从10k下降到2.1k(降低5倍),性能受到显著影响,读取和搜索速度变慢。搜索性能比Redis JSON和ElasticSearch慢两个数量级,最大吞吐量为424 Ops/sec,而Redis JSON为16k Ops/sec。
  • Redis JSON在混合工作负载下的吞吐量比MongoDB高50.8倍,比ElasticSearch高7倍。
  • Redis JSON的操作延迟比MongoDB低91倍,比ElasticSearch低23.7倍。
  • Redis Search几乎不受更新比例影响,吞吐量稳步提升,三者中性能最高;ElasticSearch受到更新比例的显著影响,随着更新比例的提高,读取和搜索速度变慢;MongoDB性能整体最差(比RedisSearch、ElasticSearch慢2个数量级)。

优劣势对比:

  • RedisSearch 的优势在于其在所有测试项中都表现出色,具有最高的吞吐量和最低的延迟,几乎不受更新比例的影响。
  • ElasticSearch 的劣势在于其性能随着更新比例的增加显著下降,读写操作的延迟较高。
  • MongoDB 的劣势在于其整体性能最差,无论是读、写还是混合操作,吞吐量和延迟都远不及RedisSearch和ElasticSearch。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

混个1024勋章

一眨眼毕业工作已经一年了,偶然进了游戏公司成了一名初级游戏服务器开发。前两天总结的时候,本来以为自己这一年没学到多少东西,但是看看自己的博客其实也有在进步,虽然比不上博客里的众多大佬,但是回头看也算是自己的…

micro-app【微前端实战】主应用 vue3 + vite 子应用 vue3+vite

micro-app 官方文档为 https://micro-zoe.github.io/micro-app/docs.html#/zh-cn/framework/vite 子应用 无需任何修改,直接启动子应用即可。 主应用 1. 安装微前端框架 microApp npm i micro-zoe/micro-app --save2. 导入并启用微前端框架 microApp src/main.ts …

手机摄影入门

感觉会摄影的人是能够从生活中发现美的人。 我不太会拍照,觉得拍好的照片比较浪费时间,而且缺乏审美也缺乏技巧,所以拍照的时候总是拍不好。但有时候还是需要拍一些好看的照片的。 心态和审美可能需要比较长时间提升,但一些基础…

Apple Vision Pro市场表现分析:IDC最新数据揭示的真相

随着AR/VR技术逐渐成熟并被更多消费者接受,2024年第二季度(Q2)成为这一领域的一个重要转折点。根据国际数据公司(IDC)发布的最新报告,整个AR/VR市场在本季度经历了显著的增长。接下来,我们将深入探讨Apple Vision Pro在这股增长浪潮中的具体表现。 市场背景 2024年Q2,…

中航资本:股票支撑位和压力位什么意思?股票如何找支撑与压力?

股票支撑位和压力位什么意思? 支撑位是指股票价格在下跌过程中遇到的一个或多个价格方位,这些价位上存在着较强的买盘力气,可以提供满足的支撑,阻止股价继续下跌。 而股票压力位是指股票价格在上涨过程中遇到的一个或多个价格方…

docker部署rustdesk

文章目录 一.ubuntu修改ssh端口二.开放端口三.安装rustDesk四.连接验证 一.ubuntu修改ssh端口 借鉴乌班图Ubuntu 24.04 SSH Server 修改默认端口重启无效 https://bugs.launchpad.net/ubuntu/source/openssh/bug/2069041 sudo vim /etc/ssh/sshd_config sudo systemctl daem…

在windows下利用安装docker加vscode调试OceanBase,

文章目录 一、安装WSL二、安装docker三、 OceanBase安装 -- 运行镜像,配置VScode四、 OceanBase安装 -- 将获取到的文件与docker容器 映射连接 – 参考官方文档 docker安装 在windows上通过docker配置环境并利用vscode调试代码 一、安装WSL 1.可以在任务管理器中&…

⌈ 传知代码 ⌋ 农作物病害分类(Web端实现)

💛前情提要💛 本文是传知代码平台中的相关前沿知识与技术的分享~ 接下来我们即将进入一个全新的空间,对技术有一个全新的视角~ 本文所涉及所有资源均在传知代码平台可获取 以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦&#x…

我谈椒盐噪声的统计模型

在成像系统发展长河的早期,椒盐噪声曾经不可避免,但是如今,即使在专用成像设备中(如遥感、医学),椒盐噪声也属罕见了。所以,现在在图像处理领域,研究椒盐噪声的去除没有多少实际意义…

kafka 如何减少数据丢失?

大家好,我是锋哥。今天分享关于【kafka 如何减少数据丢失?】面试题?希望对大家有帮助; kafka 如何减少数据丢失? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Apache Kafka 是一个高吞吐量的分布式消息队列,广泛用…

R实验——logistic回归、LDA、QDAKNN

数据集介绍: mpg,miles per gallon即油耗,这个数据集来自卡内基梅隆大学维护的StatLib库。1983年美国统计协会博览会使用了该数据集。这个数据集是对StatLib库中提供的数据集稍加修改的版本。根据Ross Quinlan(1993)在预测属性“mpg”中的使…

python-PyQt项目实战案例:制作一个视频播放器

文章目录 1. 关键问题描述2. 通过OpenCV读取视频/打开摄像头抓取视频3. 通过PyQt 中的 QTimer定时器实现视频播放4. PyQt 视频播放器实现代码参考文献 1. 关键问题描述 在前面的文章中已经分享了pyqt制作图像处理工具的文章,也知道pyqt通过使用label控件显示图像的…

AI视听新体验!浙大阿里提出视频到音乐生成模型MuVi:可解决语义对齐和节奏同步问题

MuVi旨在解决视频到音乐生成(V2M)中的语义对齐和节奏同步问题。 MuVi通过专门设计的视觉适配器分析视频内容,以提取上下文 和时间相关的特征,这些特征用于生成与视频的情感、主题及其节奏和节拍相匹配的音乐。MuVi在音频质量和时间同步方面表现优于现有基线方法,并展示了其在风…

安装nginx实现多ip访问多网站

一.首先安装nginx [rootserver nginx]# systemctl stop firewalld 关防火墙 [rootserver nginx]# setenforce 0 关selinux [rootserver nginx]# mount /dev/sr0 /mnt 挂载点 [rootserver nginx]# dnf install nginx -y 安装nginx二,添加地址 [rootserver…

Electron入门笔记

Electron入门笔记 ElectronElectron 是什么Electron流程模型创建第一个Electron项目配置自动重启主进程和渲染进程通信打包应用 Electron Electron 是什么 跨平台的桌面应用开发框架使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 嵌入 Chromium和 Node.js Electro…

不使用扩展,win10下网页长截图

安卓手机,各大厂商都会有自带的长截图工具, 用起来很方便, 反而是windows桌面版网页长截图, 偶尔会用下,用得不多, 用一次后下次用又忘记了, 今天正好要用到, 特记录下方便以后查阅…

TCP simultaneous open测试

源代码 /*************************************************************************> File Name: common.h> Author: hsz> Brief:> Created Time: 2024年10月23日 星期三 09时47分51秒**********************************************************************…

深度学习技术演进:从 CNN、RNN 到 Transformer 的发展与原理解析

深度学习的技术演进经历了从卷积神经网络(CNN)到循环神经网络(RNN)再到 Transformer 的重要发展。这三个架构分别擅长处理图像、序列数据和多种任务的特征,标志着深度学习在不同领域取得的进步。 1. 卷积神经网络&…

旧电脑安装Win11提示“这台电脑当前不满足windows11系统要求”,安装中断。怎么办?

前言 最近有很多小伙伴也获取了LTSC版本的Win11镜像,很大一部分小伙伴安装这个系统也是比较顺利的。 有顺利安装完成的,肯定也有安装不顺利的。这都是很正常的事情,毕竟这个镜像对电脑硬件要求还是挺高的。 有一部分小伙伴在安装Windows11 …

Flutter项目打包ios, Xcode 发布报错 Module‘flutter barcode_scanner‘not found

报错图片 背景 flutter 开发的 apple app 需要发布新版本,但是最后一哆嗦碰到个报错,这个小问题卡住了我一天,之间的埪就不说了,直接说我是怎么解决的,满满干货 思路 这个报错 涉及到 flutter_barcode_scanner; 所…