MongoDB Vs Elasticsearch
文章目录
- 前言
- 一、核心区别
- 二、优缺点
- MongoDB
- Elasticsearch
- 三、如何选择
- 四、结合使用
- 总结
前言
MongoDB 和 Elasticsearch 在存储、查询方式、使用场景等方面有较大区别,以下是它们的核心区别、各自优缺点以及实际使用中的选择建议。
一、核心区别
对比项 | MongoDB | Elasticsearch |
---|---|---|
数据模型 | 文档数据库(JSON/BSON 结构) | 文档索引数据库(JSON 结构) |
存储方式 | 以 BSON 形式存储,支持结构化和非结构化数据 | 倒排索引、列存储 |
查询方式 | 类似 SQL(支持过滤、聚合、事务) | 主要基于全文搜索和向量搜索 |
索引机制 | 默认索引 _id,可手动创建索引 | 自动为字段创建倒排索引 |
搜索性能 | 适合结构化查询、事务处理 | 适合全文搜索、模糊匹配、向量搜索 |
事务支持 | 支持 ACID 事务(4.0+ 版本后支持多文档事务) | 无事务支持 |
写入速度 | 高(适合频繁写入) | 相对较慢(索引更新较重) |
数据一致性 | 强一致性(事务支持) | 最终一致性 |
扩展方式 | 水平扩展(Sharding) | 水平扩展(集群 + 分片) |
适用场景 | 结构化数据存储、日志管理、实时分析 | 搜索、日志分析、推荐系统 |
二、优缺点
MongoDB
✅ 优点:
- 文档存储(BSON),支持复杂数据结构(嵌套、数组)。
- 强一致性,支持多文档事务,适合金融、订单等场景。
- 写入性能高,适合日志存储、大量数据插入场景。
- 查询功能丰富,支持聚合查询、范围查询、索引优化。
❌ 缺点:
- 全文搜索性能较弱,虽然支持 $text 搜索,但不如 ES 强大。
- 查询速度慢于 ES,尤其在复杂检索时(缺少倒排索引优化)。
- 索引管理复杂,需要手动优化索引。
Elasticsearch
✅ 优点:
- 全文搜索强大,基于倒排索引,支持模糊匹配、拼写纠正、权重评分等功能。
- 实时搜索,索引更新后可立即查询(适合日志分析、实时搜索)。
- 向量搜索支持,可以用于 AI 召回、推荐系统等应用(结合 ANN 技术)。
- 分布式架构,可扩展性强,适合大规模数据处理。
❌ 缺点:
- 数据一致性较弱,使用 最终一致性,不适合事务场景。
- 写入速度较慢,索引创建较重,适合读多写少的场景。
- 存储占用大,索引结构复杂,存储开销比 MongoDB 大。
三、如何选择
适合使用 MongoDB 的场景
✅ 应用数据存储(NoSQL 结构化数据):用户信息、订单、日志存储。
✅ 事务支持(ACID):金融系统、订单管理。
✅ 大规模数据写入:需要高吞吐写入的应用,如日志管理系统。
✅ 缓存与会话管理:与 Redis 结合使用,存储短期会话数据。
✅ 实时数据分析:适用于聚合查询(但不如 ES 快)。
👉 推荐案例:
- 电商平台(用户数据、订单存储)
- 物联网数据(高频写入,存储传感器数据)
- 游戏后端(存储玩家数据、游戏进度)
适合使用 Elasticsearch 的场景
✅ 全文搜索:搜索引擎、站内搜索、文档搜索。
✅ 日志分析 & 监控:结合 ELK Stack(Elasticsearch + Logstash + Kibana),用于日志分析。
✅ 推荐系统 & AI 召回:结合向量搜索(ANN),用于智能推荐。
✅ 数据分析:用于复杂查询、数据可视化、实时 BI(如 Kibana)。
✅ 低延迟查询:需要毫秒级查询的业务(如自动补全、智能搜索)。
👉 推荐案例:
- 电商站内搜索(模糊匹配、商品推荐)
- 日志分析系统(实时监控,安全告警)
- 社交平台搜索(如微博、知乎搜索)
- AI 相关搜索(向量召回)
四、结合使用
在很多项目中,MongoDB 和 Elasticsearch 结合使用,可以取长补短:
- MongoDB 存储业务数据,保证事务一致性,高效写入。
- Elasticsearch 用于搜索,定期同步 MongoDB 数据,提供高效查询能力。
📌 典型架构:
- 数据写入 MongoDB(业务数据库)
- 定期同步到 Elasticsearch(搜索索引)
- 用户查询时,优先走 Elasticsearch(快速搜索)
- 如果需要事务或数据一致性,查询 MongoDB
🔹 工具:MongoDB + Logstash / Kafka + Elasticsearch
- 使用 MongoDB Change Stream 监听数据变更,并同步到 Elasticsearch。
- 使用 Kafka 作为中间层,异步同步数据,避免数据库写入压力。
👉 推荐案例:
- 电商系统:MongoDB 存储订单数据,Elasticsearch 提供商品搜索。
- 日志管理:MongoDB 存储原始日志,Elasticsearch 提供查询和分析。
总结
需求 | 选择 MongoDB | 选择 Elasticsearch |
---|---|---|
高频写入、实时存储 | ✅ 适合 | ❌ 写入较慢 |
全文搜索、模糊匹配 | ❌ 支持有限 | ✅ 倒排索引更快 |
数据一致性(事务) | ✅ 支持 ACID | ❌ 最终一致性 |
高吞吐日志处理 | ✅ 适合 | ✅ 适合 |
实时搜索 | ❌ 查询慢 | ✅ 毫秒级搜索 |
向量搜索(AI 推荐) | ❌ 不适合 | ✅ 支持 ANN |
🔹 最佳实践:
- 单独使用 MongoDB:如果业务以事务、存储为主,搜索需求不强(如订单系统)。
- 单独使用 Elasticsearch:如果主要是搜索、推荐、日志分析(如搜索引擎、AI 召回)。
- MongoDB + Elasticsearch 结合:业务数据存 MongoDB,搜索数据存 Elasticsearch。
选择建议
- 如果你需要数据存储、事务支持、频繁写入,选 MongoDB。
- 如果你需要搜索、分析、查询优化,选 Elasticsearch。
- 如果你同时需要事务存储 + 高效搜索,MongoDB + ES 结合使用。
相关文章:
MongoDB Vs Elasticsearch
文章目录 前言一、核心区别二、优缺点MongoDBElasticsearch 三、如何选择四、结合使用总结 前言 MongoDB 和 Elasticsearch 在存储、查询方式、使用场景等方面有较大区别,以下是它们的核心区别、各自优缺点以及实际使用中的选择建议。 一、核心区别 对比项MongoDB…...
《蓝耘容器全栈技术指南:企业级云原生与异构计算实战大全》
在数字化转型的浪潮中,容器技术已成为企业构建云原生架构的核心引擎,而蓝耘容器凭借其轻量化内核、异构计算支持及混合云调度能力,正成为企业级应用的首选方案。本文基于《蓝耘容器全栈技术指南》,结合实战案例与技术原理…...
【Android】RuntimeShader 应用
1 简介 RuntimeShader 是 Android 13(T)中新增的特性,用于逐像素渲染界面,它使用 AGSL(Android Graphics Shading Language)编写着色器代码,底层基于 Skia 图形渲染引擎。官方介绍详见 → Runti…...
python 提取视频中的音频
在Python中提取视频中的音频,你可以使用moviepy库,这是一个非常强大且易于使用的库,专门用于视频编辑。以下是如何使用moviepy来提取视频中的音频的步骤: 安装moviepy 首先,你需要安装moviepy。你可以通过pip安装它&a…...
HTML+CSS基础(了解水平)
html 的介绍 学习目标 能够知道html的作用 1. html的定义 2. html的定义 HTML 的全称为:HyperText Mark-up Language, 指的是超文本标记语言。 标记:就是标签, <标签名称> </标签名称>, 比如: <html></html>、<h1><…...
提示词工程(Prompt Engineering)
https://www.bilibili.com/video/BV1PX9iYQEry 一、懂原理,要知道 为什么有的指令有效,有的指令无效为什么同样的指令有时有效,又是无效怎么提升指令有效的概率 大模型应用架构师想什么? 怎样能更准确?答࿱…...
MySQL中的B+树索引经验总结
一、什么是B树 B树是一种二叉树,由二叉查找树,平衡二叉树,B树演化而来。 请看上图 B树的特点: 1)非叶子节点不存放数据,只存放键值,数据都存放在叶子节点中。 2)叶子节点都在同一…...
社交网络分析实战(NetworkX分析Twitter关系图)
目录 社交网络分析实战(NetworkX分析Twitter关系图)1. 引言2. 项目背景与意义3. 数据集生成与介绍3.1 数据集构成3.2 数据生成方法3.3 数据集示例4. 社交网络分析理论4.1 节点度数与度分布4.2 网络密度4.3 中心性指标5. GPU加速在社交网络分析中的应用6. PyQt GUI与交互式可视…...
Windows功能之FTP服务器搭建
一、创作背景 之前有用linux系统搭建过ftp服务器,最近想着用windows系统也顺便搭建一个,看网上有第三方服务软件一键部署,记得windows可以不借助第三方软件就可以搭建,就想顺便操作试试,结果老是连接不上,费…...
linux系统命令——权限
一、有哪些权限 读(r)——对应数字4 写(w)——对应数字2 执行(x)——对应数字1 二、权限及数字的对应 4对应r-- 2对应-w- 1对应--x 5对应r-x 6对应rw- 7对应rwx 三、文件的基本属性 如图&#…...
DeepSeek本地部署 (Windows+Ollama+Docker Desktop+ RAGFlow)
适用场景: 1、商城的小机器人自动根据实际情况回复 2、需要7*24小时运行在线回复,如:在线购物、在线咨询、在线招生等 3、无人值守环境 2025年1月,DeepSeek 正式发布 DeepSeek-R1 推理大模型,DeepSeek-R1 成本价格低…...
H3C无线控制器二层注册典型配置举例
介绍AP与AC间通过二层网络完成注册的配置举例 组网需求 如图所示,集中式转发架构下,AC旁挂在L2 switch1上,L3 switch做DHCP server为AP、Client和Host分配IP地址。需要实现无线客户端Client通过AP连接到AC上,并能与有线客户端Hos…...
前端面试笔试
前端面试笔试 1 相对路径和绝对路径的区别 区别:他们描述文件或目录位置的方式不同 绝对路径:绝对路径是指从系统的根目录开始的完整路径,无论当前工作目录在哪个位置,绝对路径始终指向文件或目录的确切位置。绝对路径适用…...
java的split分隔,使用regex
split(String regex) 是 Java 中 String 类的一个方法,用于根据正则表达式(regex)将字符串分割为子字符串数组。以下是一些常用的正则表达式及其用途: 按空格分割 正则表达式:“\s” 作用:匹配一个或多个…...
写时拷贝技术
目录 写时拷贝 核心思想 基本原理 基本过程 一个例子深入理解 补充知识--引用计数 小总结 写时拷贝实现 宏观理解(进程、线程角度) 资源共享 只读访问 写操作触发拷贝 独立修改 微观理解(fork系统调用角度) 进程创…...
HarmonyOS NEXT开发进阶(十二):build-profile.json5 文件解析
文章目录 一、前言二、Hvigor脚本文件三、任务与任务依赖图四、多模块管理4.1 静态配置模块 五、分模块编译六、配置多目标产物七、配置APP多目标构建产物八、定义 product 中包含的 target九、拓展阅读 一、前言 编译构建工具DevEco Hvigor(以下简称Hvigor&#x…...
ubuntu系统下添加pycharm到快捷启动栏方法
一、背景 之前在ubuntu系统下使用pycharm时,总是要进入/home/dlut/pycharm-community-2022.1/bin文件夹下,然后终端执行命令下面的命令才可修改代码: ./pycharm.sh为了以后方便,这里给出添加pycharm到快捷启动栏的方法 二、添加…...
简述计算机网络中的七层模型和四层模型
在计算机网络中,网络协议栈的设计通常采用分层结构来处理不同的通信任务。常见的分层结构有OSI七层模型和TCP/IP四层模型。虽然它们的层次数量不同,但本质上都在解决如何有效地进行计算机间通信。本文将分别介绍这两种结构的功能和各层的协议。 一、OSI七…...
golang开发支持onlyoffice的token功能
一直都没去弄token这块,想着反正docker run的时候将jwt置为false即可。 看了好多文章,感觉可以试试,但是所有文件几乎都没说思路。 根据我的理解和成功的调试,思路是: 我们先定义2个概念,一个是文档下载…...
【Linux】:封装线程
朋友们、伙计们,我们又见面了,本期来给大家带来封装线程相关的知识点,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! C 语 言 专 栏:C语言:从入门到精通 数据结…...
OpenCV多分辨率模板匹配与容错优化实战指南
第一章:问题背景与挑战 1.1 传统模板匹配的局限性 模板匹配(Template Matching)是计算机视觉中基础且广泛使用的技术,其核心思想是通过滑动窗口在目标图像中寻找与模板最相似的位置。然而,传统方法(如Ope…...
「为爱发电」的硬核打开方式,涂鸦智能用AIoT引领智慧能源变革
全球能源危机与气候变化的双重压力下,人类正面临着一场前所未有的考验。据国际能源署预测,到2050年,若要实现碳中和目标,清洁能源需贡献全球电力结构的90%以上。在这场关乎人类未来的能源革命中,不仅需要技术创新&…...
uniapp-x 子组件样式覆盖
不支持scoped 默认不支持scoped,所以写也没用 那如果我想修改子孙节点的样式是不是很方便,不需要v-deep了? 的确如此 自带页面样式隔离 在 uni-app x 中,不支持 css scoped,样式的作用范围遵循以下规则:…...
word处理控件Aspose.Words教程:使用 Python 删除 Word 中的空白页
Aspose.Words 是一种高级Word文档处理API,用于执行各种文档管理和操作任务。API支持生成,修改,转换,呈现和打印文档,而无需在跨平台应用程序中直接使用Microsoft Word。 Aspose API支持流行文件格式处理,并…...
MIDI,AI 3D场景生成技术
MIDI(Multi-Instance Diffusion for Single Image to 3D Scene Generation)是先进的3D场景生成技术,能在短时间内将单张图像转化为高保真度的3D场景。通过智能分割输入图像,识别出场景中的独立元素,再基于多实例扩散模…...
ICLR2025 | SLMRec: 重新思考大语言模型在推荐系统中的价值
note 问题背景:序列推荐(SR)任务旨在预测用户可能的下一个交互项目。近年来,大型语言模型(LLMs)在SR系统中表现出色,但它们巨大的规模使得在实际平台中应用变得低效和不切实际。 研究动机&…...
走路碎步营养补充贴士
走路碎步,这种步伐不稳的现象,在日常生活中并不罕见,特别是对于一些老年人或身体较为虚弱的人来说,更是一种常见的行走状态。然而,这种现象可能不仅仅是肌肉或骨骼的问题,它还可能是身体在向我们发出营养缺…...
【bug日记】 编译错误
在我使用vscode的时候,我想用一个头文件和两个cpp文件,头文件是用来声明一个类的,一个cpp是用来类的成员函数,一个cpp是主函数 但是我写完编译发现会弹出找不到这个类成员函数这个cpp文件,爆出这样的错误 提示我找不到…...
计算机视觉cv2入门之边缘检测
检测原理 边缘检测是指检测图像中的一些像素点,它们周围的像素点的灰度发生了急剧的变化,因此可以将这些像素点作为一个集合,用于标注图像中不同物体的边界。 边缘是图像上灰度级变化很快的点的集合。这些点的梯度往往很大。因此我们可以使用一阶导数和二…...
python脚本实现服务器内存和cpu使用监控,并记录日志,可以设置阈值和采样频率
Python 脚本,实现以下功能: 按日期自动生成日志文件(例如 cpu_mem_20231001.csv)当 CPU 或内存超过阈值时触发记录独立记录报警事件(保存到 alert.log)支持自定义阈值和监控间隔 脚本代码 import psutil …...
解决PC串流至IPad Pro时由于分辨率不一致导致的黑边问题和鼠标滚轮反转问题
问题背景 今天在做 电脑串流ipad pro 的时候发现了2个问题: 1.ipadpro 接上鼠标后,滚轮上下反转,这个是苹果自己的模拟造成的问题,在设置里选择“触控板与鼠标”。 关闭“自然滚动”,就可以让鼠标滚轮正向滚动。 2. ipadpro 分…...
星越L_三角指示牌及危险警示灯使用
目录 1.打开危险警告灯 2.取出反光背心穿上 3.取出指示牌 4.放置三角指示牌。 1.打开危险警示灯 2.取出反光背心穿上 3.取出指示牌...
使用WireShark解密https流量
概述 https协议是在http协议的基础上,使用TLS协议对http数据进行了加密,使得网络通信更加安全。一般情况下,使用WireShark抓取的https流量,数据都是加密的,无法直接查看。但是可以通过以下两种方法,解密抓…...
MySQL复习(检查本地MySQL是否安装、DataGrip数据库可视化工具使用、增删改查基础语法、唯一索引、SQL简单函数)
目录 一、快速检查本地MySQL是否安装。(详细教程) (1)MySQL本地系统环境变量配置。(简单说明) (2)cmd命令行——判断MySQL是否安装成功! 二、DataGrip数据库操作可视化工具。 (1)基本介绍。 &am…...
数学建模 第一节
目录 前言 一 优化模型的类型 二 线性规划1 线性规划2 三 0-1规划 总结 前言 数学建模主要是将问题转化为模型,然后再以编程的形式输出出来 算法都知道,数学建模也需要用到算法,但是不是主要以编程形式展示,而是…...
《Python实战进阶》No24: PyAutoGUI 实现桌面自动化
No24: PyAutoGUI 实现桌面自动化 摘要 PyAutoGUI 是一个跨平台的桌面自动化工具,能够模拟鼠标点击、键盘输入、屏幕截图与图像识别,适用于重复性桌面任务(如表单填写、游戏操作、批量文件处理)。本集通过代码截图输出日志的实战形…...
实验篇| CentOS 7 下 Keepalived + Nginx 实现双机高可用
为什么要做双机高可用? 想象一下:你的网站突然宕机,用户无法访问,订单流失、口碑暴跌…💸 双机热备就是解决这个痛点的终极方案!两台服务器互为备份,724小时无缝切换,保障业务…...
音视频入门基础:RTP专题(19)——FFmpeg源码中,获取RTP的音频信息的实现(下)
本文接着《音视频入门基础:RTP专题(18)——FFmpeg源码中,获取RTP的音频信息的实现(上)》,继续讲解FFmpeg获取SDP描述的RTP流的音频信息到底是从哪个地方获取的。本文的一级标题从“四”开始。 四…...
JAVA面试_进阶部分_dubbo负载均衡策略
前言:zookeeper作为dubbo的注册中心,有一个很重要的点,我们的程序是分布式应用,服务部署在几个节点(服务器)上,当消费者调用服务时,zk返回给dubbo的是一个节点列表,但是d…...
《我的Python觉醒之路》之转型Python(十三)——控制流
#今天风景不错,明天继续学习 请关注我之前的笔记啊...
QT6.8.2在线安装记录
命令行带安装源启动,但仍不能连接到服务器,开着VPN才通过 .\qt-online-installer-windows-x64-4.8.1.exe --mirror https://mirrors.ustc.edu.cn/qtproject 开始安装前断开VPN,其实启动安装器时的镜像源修改参数是起作用的,因为下…...
70.HarmonyOS NEXT PicturePreview组件深度剖析:从架构设计到核心代码实现
温馨提示:本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦! HarmonyOS NEXT PicturePreview组件深度剖析:从架构设计到核心代码实现 文章目录 HarmonyOS NEXT PicturePreview组件深度剖析…...
如何从受 Cloudflare 保护的网站提取数据:技术与挑战
引言 Web抓取是数据科学和市场研究的重要工具,但当面对受Cloudflare等先进保护系统守护的网站时,这项任务变得异常具有挑战性。Cloudflare的机器人检测系统需要精心设计的网页抓取解决方案才能成功提取数据。本文将介绍Cloudflare的防护机制以及如何使用…...
【DeepSeek应用】DeepSeek模型本地化部署方案及Python实现
DeepSeek实在是太火了,虽然经过扩容和调整,但反应依旧不稳定,甚至小圆圈转半天最后却提示“服务器繁忙,请稍后再试。” 故此,本文通过讲解在本地部署 DeepSeek并配合python代码实现,让你零成本搭建自己的AI助理,无惧任务提交失败的压力。 一、环境准备 1. 安装依赖库 …...
WPF程序使用AutoUpdate实现自动更新
AutoUpdate.NET使用 一、AutoUpdater.NET 简介 AutoUpdater.NET 是一个开源库,支持从各种源(如GitHub、FTP、HTTP服务器等)下载并安装更新。它提供了灵活的配置选项,允许开发者根据需求定制更新检查逻辑和用户体验。 二、安装 …...
A SURVEY ON POST-TRAINING OF LARGE LANGUAGE MODELS——大型语言模型的训练后优化综述——第2部分
3、微调(上一部分内容) 4、LLMs的对齐 大型语言模型(LLMs)中的对齐涉及引导模型输出以符合人类预期和偏好,特别是在安全关键或用户面对的应用程序中。本章讨论了实现对齐的三个主要范式: 带有反馈的人工…...
【2025】Electron Git Desktop 实战一(上)(架构及首页设计开发)
源代码仓库: Github仓库【electron_git】 Commit : bb40040 Github Desktop 页面分析 本节目标: 1、实现类似Github Desktop的「空仓库」提示页 2、添加本地仓库逻辑编写从 Github Desktop 我们看到 他的 主要页面分为三个区域 Head头部区域…...
996引擎-问题处理:缺失特效分割文件 ModelAtlasSplitConfigs
通常我们买的资源都是带会 ModelAtlasSplitConfigs.txt 或 sceneAtlasSplitConfigs.txt 的 但有时确实找不到的话,是可以用996工具生成的:...
2024年12月CCF-GESP编程能力等级认证C++编程三级真题解析
三级真题的难度: CCF-GESP编程能力等级认证的C++三级真题难度通常被认为是中等水平,适合具备一定编程基础的考生。以下是关于三级真题难度的一些具体信息: 1. 考试内容 C++三级考试主要涵盖以下几个方面的知识: 基本语法:包括数据类型、变量、运算符等基础知…...
Java面试八股—Redis篇
一、Redis的使用场景 (一)缓存 1.Redis使用场景缓存 场景:缓存热点数据(如用户信息、商品详情),减少数据库访问压力,提升响应速度。 2.缓存穿透 正常的访问是:根据ID查询文章&…...