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

ES 与 MySQL 在较大数据量下查询性能对比

在进行数据查询性能测试的过程中,我的同事幺加明对 ES(Elasticsearch)和 MySQL 进行了相对较大数据量的测试,并整理了相关结果。在得到其授权的情况下,我将此对比案例分享给大家,在此再次向幺加明表示感谢。

、结论

通过对es和mysql相对较大数据量的测试,得出结果:在Mysql查询使用到合适的索引的条件下,通过mysql得到相应结果的速度要明显优于Es。

、通过es实现

 Es 文档数据模型

type Content struct {ContentId      int64  `json:"id"`              // 内容idPermissionType int    `json:"permission_type"` // 权限类型 0:公开,1:仅自己可见,2:部分可见,3:不给谁看TopicId        int    `json:"topic_id"`        // 话题idAllowUser      []User `json:"allow_user"`      // 允许的用户BlockUser      []User `json:"block_user"`      // 屏蔽的用户
}type User struct {Id int64 `json:"id"` // 用户id
}

测试数据量及条件

  • 测试 ES 数据量为 2000 万的作品数,5000 的用户量(此用户量与实际情况有出入,理论上应有至少 20 万的用户量)。当设置给部分人可见时,AllowUser 内有 30 个元素;同样,当设置不给谁看时,BlockUser 内也是有 30 个元素。所以对应的总数据量在 3 亿条左右。

查询条件如下:

1、单独查询公开可见数据: 查询时间在275毫秒左右

2、单独查询部分可见数据:耗时70毫秒左右

 3、单独查询部分不可见数据:耗时255毫秒左右

 4、合并三次查询未一次查询就得到结果的话:耗时428毫秒左右

综上所述 采用 Es最快的响应时间为并行执行每次查询,耗时在300毫秒以内。

 

三、通过mysql实现

Mysql 表结构如下:

CREATE TABLE `content_permission_1` (`id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '主键自增',`content_id` int NOT NULL DEFAULT '0' COMMENT '内容id',`permission_type` tinyint NOT NULL DEFAULT '0' COMMENT '权限类型 0:公开,1:仅自己可见,2:部分可见,3:不给谁看 ',`topic_id` int NOT NULL DEFAULT '0' COMMENT '话题id',`user_id` int NOT NULL DEFAULT '0' COMMENT '权限针对的用户id',PRIMARY KEY (`id`) USING BTREE,KEY `idx_content_id` (`content_id`) USING BTREE,KEY `idx_user_id_content_id` (`user_id`,`content_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='内容权限表(可见设置)'

测试条件及数据量

  • 测试 MySQL 数据量为 1000 万的作品数据,总共 1.5 亿权限相关数据。

查询条件如下:

1、查询公开数据:耗时21毫秒左右; 使用到的索引为 idx_content_id

2、查询部分人可见: 耗时48毫秒左右; 使用到的索引为 idx_user_id_content_id

3、查询部分人不可见:耗时13毫秒左右;使用到的索引为 idx_content_id

综上所述 采用 mysql最快的响应时间为并行执行每次查询,耗时在50毫秒以内

总结

1.mysql建立合适的索引,避免回表的情况下,其查询性能还是非常优异的。

2.对于 ES 的测试结果,其实并不令人意外。不过,对于 ES 在字典中查找对应 keyword 的具体方式,我充满了好奇。目前我在思考它是否基于二分法进行查找呢?毕竟在面对庞大的数据量时,如果采用二分法,可能会在一定程度上影响查询速度。遗憾的是,目前我还没有找到关于 ES 底层查询原理的详细资料,所以这仅仅是我的一种猜测罢了。倘若让我来编写这样一个程序,在没有更多信息的情况下,二分法或许是我首先能想到的一种实现方式。但我深知,ES 作为一款成熟的搜索引擎,其查询原理必定更加复杂和高效,肯定不仅仅局限于简单的二分法。我期待着深入了解 ES 的底层查询机制,以便更好地理解和应用它在实际项目中的强大功能。这个问题有时间再做深入研究。

通过这次对比测试,我们可以看出在特定的查询场景下,MySQL 在性能上有着明显的优势。然而,ES 也有其独特的应用场景,如全文搜索等。在实际应用中,我们需要根据具体的需求来选择合适的数据库技术,以达到最佳的性能和效果。

相关文章:

ES 与 MySQL 在较大数据量下查询性能对比

在进行数据查询性能测试的过程中,我的同事幺加明对 ES(Elasticsearch)和 MySQL 进行了相对较大数据量的测试,并整理了相关结果。在得到其授权的情况下,我将此对比案例分享给大家,在此再次向幺加明表示感谢。…...

C# 新语法中的字符串内插$和{}符号用法详解

自C#6.0开始提供一个新的语法糖,即"$" 符号,配合“{}”使用,它的作用除了是对String.format的简化,还可设置其格式模板,实现了对字符串的拼接优化。 语法格式: $"string {变量表达式}” 语…...

Nacos源码学习-本地环境搭建

本文主要记录如何在本地搭建Nacos调试环境来进一步学习其源码,如果你也刚好刷到这篇文章,希望对你有所帮助。 1、本地环境准备 Maven: 3.5.4 Java: 1.8 开发工具:idea 版本控制工具: git 2、下载源码 官方仓库地址 :https://git…...

windows 好工具

Windows文件夹目录大小分析工具WizTree...

计算机运行时提示错误弹窗“由于找不到 quazip.dll,无法继续执行代码。”是什么原因?“quazip.dll文件缺失”要怎么解决?

计算机运行时错误解析:解决“quazip.dll缺失”问题指南 在软件开发和日常计算机使用中,我们经常会遇到各种运行时错误。今天,我们将深入探讨一个常见的错误提示:“由于找不到quazip.dll,无法继续执行代码。”这一弹窗…...

创造未来:The Sandbox 创作者训练营如何赋能全球创造者

创作者训练营让创造者有能力打造下一代数字体验。通过促进合作和提供尖端工具,The Sandbox 计划确保今天的元宇宙是由一个个创造者共同打造。 2024 年 5 月,The Sandbox 推出了「创作者训练营」系列,旨在重新定义数字创作。「创作者训练营」系…...

R语言对简·奥斯汀作品中人物对话的情感分析

项目背景 客户是一家文学研究机构,他们希望通过对简奥斯汀作品中人物对话的情感分析,深入了解作品中人物的情感变化和故事情节的发展。因此,他们委托你进行一项情感分析项目,利用“janeaustenr”包中的数据集来构建情感分析模型。…...

股指期货基差为正数,这是啥意思?

在股指期货的世界里,有个挺重要的概念叫“基差”。说白了,基差就是股指期货的价格和它对应的现货价格之间的差价。今天,咱们就来聊聊当这个基差为正数时,到底意味着啥。 基差是啥? 先复习一下,基差 股指…...

黑马程序员MybatisPlus/Docker相关内容

Day01 MP相关知识 1. mp配置类: 2.条件构造器: 具体的实现例子: ①QuerryWapper: ②LambdaQueryWrapper: 3.MP的自定义SQL 4.MP的Service层的实现 5.IService下的Lambda查询 原SQL语句的写法: Lambda 查询语句的…...

使用 Vue 和 Canvas-Confetti 实现烟花动画特效

在开发中,为用户提供具有视觉冲击力的反馈是一种提升用户体验的好方法。今天,我们将结合 Vue 框架、canvas-confetti 和 Lottie 动画,创建一个动态对话框动画,其中包含炫酷的烟花特效。 效果图: 效果简介 当用户触发…...

【银河麒麟操作系统真实案例分享】内存黑洞导致服务器卡死分析全过程

了解更多银河麒麟操作系统全新产品,请点击访问 麒麟软件产品专区:https://product.kylinos.cn 开发者专区:https://developer.kylinos.cn 文档中心:https://documentkylinos.cn 现象描述 机房显示器连接服务器后黑屏&#xff…...

如何加强游戏安全,防止定制外挂影响游戏公平性

在现如今的游戏环境中,外挂始终是一个困扰玩家和开发者的问题。尤其是定制挂(Customized Cheats),它不仅复杂且隐蔽,更能针对性地绕过传统的反作弊系统,对游戏安全带来极大威胁。定制挂通常是根据玩家的需求…...

SpringBoot整合knife4j,以及会遇到的一些bug

这篇文章主要讲解了“Spring Boot集成接口管理工具Knife4j怎么用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Spring Boot集成接口管理工具Knife4j怎么用”吧! 一…...

城电科技|光伏廊道是什么?安装光伏廊道有什么好处?

光伏廊道是什么?光伏廊道专门设计用于集中安装太阳能光伏发电系统的建筑物或构筑物,它可以将光伏转换成可以用于供电的清洁绿电。光伏廊道通常由阳能电池板、太阳能电池、控制器、逆变器、混凝土、钢材等材料组成,具备发电、坚固、耐用、防水…...

当DHCP服务器分配了同一个IP地址

当DHCP服务器分配了同一个IP地址给多个设备时,这通常会导致网络问题,如IP地址冲突,进而影响设备的网络连接。以下是详细的分析和解决步骤: 原因分析: IP地址租约未过期: 租约管理:DHCP服务器维…...

储能能量自动化调配装置功能介绍

随着可再生能源的快速发展,光伏发电已成为全球能源结构转型的关键技术之一。与此同时,储能技术作为实现光伏发电稳定输出的核心技术,得到了广泛关注。在企业电网中,光伏储能系统的运维管理不仅关乎能源利用效率,还涉及…...

vite5+vue3+Ts5 开源图片预览器上线

images-viewer-vue3&#xff1a;一款Vue3的轻量级图像查看器&#xff0c;它基于Flip动画技术&#xff0c;支持PC和h5移动网页预览照片&#xff0c;如果它是Vue3开发的产品。 npm开源地址:https://www.npmjs.com/package/images-viewer-vue3?activeTabreadme Flip 动画 < …...

【深度学习】深入解析长短期记忆网络(LSTMs)

长短期记忆网络&#xff08;Long Short-Term Memory networks, LSTMs&#xff09;是一种特殊的递归神经网络&#xff08;RNN&#xff09;&#xff0c;专门设计用来解决标准 RNN 在处理长序列数据时的梯度消失和梯度爆炸问题。LSTMs 在许多序列数据任务中表现出色&#xff0c;如…...

从Web3到智能合约:探索新一代数据交互模式

随着互联网技术的不断演进&#xff0c;Web3的到来标志着互联网的一个新纪元。与传统的Web2相比&#xff0c;Web3倡导去中心化、更加开放和透明的网络架构&#xff0c;而智能合约则是其中的核心技术之一。本文将介绍Web3与智能合约的概念、应用以及它们如何改变数据交互模式&…...

排查bug的通用思路

⭐️前言⭐️ APP点击某个按钮没有反应/PC端执行某个操作后&#xff0c;响应较慢&#xff0c;通用的问题排查方法: 从多个角度来排查问题 &#x1f349;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f349;博主将持续更新学习记录收获&#xff0c;友友们有任何问题可以在评…...

生态学家都在用的R包MixSIAR:手把手教你用贝叶斯模型搞定食物网溯源

生态数据分析实战&#xff1a;用MixSIAR实现贝叶斯食物网溯源 河口湿地的鱼类究竟以藻类还是陆源有机物为主要食物&#xff1f;这个看似简单的问题背后&#xff0c;隐藏着复杂的生态关系网络。传统稳定同位素分析方法虽然能提供部分答案&#xff0c;但当面对多个潜在食物源和不…...

在OpenClaw中快速接入Taotoken并开始你的第一个Agent任务

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 在OpenClaw中快速接入Taotoken并开始你的第一个Agent任务 对于使用OpenClaw进行AI应用开发的工程师来说&#xff0c;接入不同的模型…...

小程序制作平台哪个好,新手好用开发工具推荐

小程序制作平台终极对决&#xff1a;码云数智、有赞、微盟&#xff0c;谁才是你的命定之选&#xff1f;2026年的小程序赛道&#xff0c;早已不是"一招鲜吃遍天"的时代。当数字化转型成为每一个商家的必答题&#xff0c;选平台就不再是选一个工具&#xff0c;而是选一…...

ESP8266-12F引脚功能详解与避坑指南:GPIO、ADC、Deep Sleep唤醒怎么用才不烧芯片?

ESP8266-12F引脚工程实战&#xff1a;从硬件陷阱到稳定运行的深度解析 引子&#xff1a;当GPIO突然失灵时 凌晨三点的实验室里&#xff0c;咖啡杯旁散落着七八片ESP8266-12F的残骸——这是我上周连续烧毁的第五块模组。每块价值二十元的开发板在接通电源的瞬间&#xff0c;GPIO…...

农业深度视觉:探究 YOLO 算法在植物叶片病害分类中的应用效能

点击蓝字关注我们关注并星标从此不迷路计算机视觉研究院公众号ID&#xff5c;计算机视觉研究院学习群&#xff5c;扫码在主页获取加入方式https://pmc.ncbi.nlm.nih.gov/articles/PMC12750877/pdf/13040_2025_Article_497.pdf计算机视觉研究院专栏Column of Computer Vision In…...

EPUBCheck测试框架深度解析:单元测试和集成测试最佳实践

EPUBCheck测试框架深度解析&#xff1a;单元测试和集成测试最佳实践 【免费下载链接】epubcheck The conformance checker for EPUB publications 项目地址: https://gitcode.com/gh_mirrors/ep/epubcheck EPUBCheck作为EPUB出版物的官方一致性检查工具&#xff0c;其强…...

Java JVM 面试题详解:JVM运行原理、内存模型、堆栈方法区、GC垃圾回收、JIT编译、类加载机制与线上调优全攻略

1. JVM 到底是什么&#xff1f;为什么 Java 程序离不开它&#xff1f;JVM&#xff0c;全称 Java Virtual Machine&#xff0c;可以理解为 Java 字节码的运行平台。Java 代码先被 javac 编译成 class 字节码&#xff0c;再由 JVM 负责加载、解释、编译、执行和管理内存。这样 Ja…...

从0开始详解网络安全自学全流程!附对应的视频教程和学习笔记

从0开始详解网络安全自学全流程&#xff01;附对应的视频教程和学习笔记 今天给大家梳理了从0开始详解网络安全自学全流程&#xff01;对应的视频教程和学习笔记也都整理好了&#xff0c;大家去文末自取就行。 第一步&#xff1a;刑法 为什么学&#xff1a;划清合法与违法的红…...

5分钟掌握MAA:解放双手的明日方舟智能助手终极指南

5分钟掌握MAA&#xff1a;解放双手的明日方舟智能助手终极指南 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手&#xff0c;全日常一键长草&#xff01;| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地址: https://gitcod…...

HS2-HF_Patch汉化补丁:3分钟打造完美中文游戏体验

HS2-HF_Patch汉化补丁&#xff1a;3分钟打造完美中文游戏体验 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 还在为Honey Select 2的日文界面而烦恼吗&#xf…...