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

【文档数据库】ES和MongoDB的对比

目录

1.由文档存储牵出的问题

2.什么是MongoDB?

3.ES和MongoDB的对比


1.由文档存储牵出的问题

本文或者说关于mongodb的这个系列文章的源头:

前面我们聊过了分布式链路追踪系统,在基于日志实现的分布式链路追踪的方式seluth+zipkin中为了防止数据丢失,需要将数据持久化。我们给出的是持久化进mysql中的示例。

【JAVA】分布式链路追踪技术概论-CSDN博客

https://bugman.blog.csdn.net/article/details/135258207?spm=1001.2014.3001.5502

后面我们发现存放日志以及需要进行后期统计这个场景来说的话关系型数据库是不合适的,于是引出了用ES系列:

https://bugman.blog.csdn.net/article/details/135342256?spm=1001.2014.3001.5502

https://bugman.blog.csdn.net/article/details/135425284?spm=1001.2014.3001.5502

https://bugman.blog.csdn.net/article/details/135515805?spm=1001.2014.3001.5502

https://bugman.blog.csdn.net/article/details/135581380?spm=1001.2014.3001.5502

聊完ES后,这时候我们难免就避不开mongodb这个热门的文档数据库,什么是MongoDB,MongoDB的核心概念,ES和MongoDB的对比,将会是本文的核心内容。

2.什么是MongoDB?

MongoDB(由“Humongous Database”缩写而来)是一种开源的、面向文档的 NoSQL 数据库系统,自4.0版本开始支持ACID。它在设计上采用了分布式文件存储的思想,适用于大规模数据的存储和处理。

说的直白点,MongoDB在设计的时候就是冲着解决海量文档的存储来的。

mongodb的架构如下:

database(数据库):数据库是一个仓库,里面可以存放集合。

collection(集合):类似于数组,可以在集合中存放文档。

document(文档):mongodb最小的单位,我们存储和操作的内容都是文档。

数据库类比数据库,集合类比表,文档类比一条数据。

数据库和集合都不需要我们手动创建,当我们创建文档时,文档所在的数据库或者集合不存在,会自动创建数据库和集合。

mongodb的数据结构:

MongoDB的数据结构是其用来应对海量文档存储的核心,其是以类JSON的方式来存储数据,也就是BSON。BSON是二进制的,这样做的目的是为了增强存储能力,具体的细节后文说。先来看看JSON和BSON的比较:

假设我们有如下的 JSON 对象,用于描述一个人的基本信息:

这个 JSON 对象包含了一些基本的数据类型,如字符串、数字、布尔值、对象和数组。

{
  "name": "John Doe",
  "age": 30,
  "isStudent": false,
  "birthday": "1990-01-01",
  "address": {
    "street": "123 Main St",
    "city": "Anytown"
  },
  "hobbies": ["reading", "cycling"]
}

现在,我们将同样的数据转换为 BSON 格式。在 BSON 中,我们可以使用一些 JSON 中不存在的数据类型。以下是 BSON 版本的同一数据,包含一些 BSON 特有的字段(请注意,这是概念性的表示,因为 BSON 实际上是二进制格式,无法以纯文本形式直观展示):

{
  "name": "John Doe",                // 字符串
  "age": Int32(30),                  // 32位整数
  "isStudent": false,                // 布尔值
  "birthday": ISODate("1990-01-01"), // 日期类型
  "address": {                       // 嵌套文档
    "street": "123 Main St",
    "city": "Anytown"
  },
  "hobbies": ["reading", "cycling"]// 数组
}

在这个 BSON 示例中,我们可以看到一些与 JSON最大的不同就是其数据是有类型的,BSON最是二进制的,有类型声明这样能准确的从二进制里解析出准确的值来,从而避免了还要转一遍的这种解析过程。所有我们可以看到BSON是很适合用来进行文档存储的,二进制化后减小了原始数据的体积,又由于有类型的存在,能直接读出来,又很适合检索。

3.ES和MongoDB的对比

其实到这里很多人都会有疑惑,ES和MongoDB都能存储海量文档,都支持文档的搜索,很多功能上都是高度重合的,那为什么会出现如此相似的两个东西?他们各自的应用场景有什么不同?

首先我们要知道:

ES的核心是冲着全文检索去的,MongoDB的核心是冲着文档存储去的。

全文搜索和文档存储在某种程度上可以被视为对立的或至少是有着不同优化方向的技术,也就是说二者是不能相互兼顾的,只能二选一。

  1. 全文搜索的特点:

    • 全文搜索的核心在于能够快速有效地检索出包含特定词汇或词组的文档。
    • 为此,搜索引擎(如 Elasticsearch)建立复杂的索引来存储每个词汇的出现位置、频率等信息。
    • 这些索引通常需要快速访问,因此搜索引擎可能会牺牲一些存储效率来提高读取速度。
  2. 文档存储的特点:

    • 文档存储(如 MongoDB)主要关注于存储和查询结构化或半结构化数据。
    • 这些系统可能采用不同的存储优化技术,如数据压缩、分片等,以提高存储效率和处理大量数据的能力。
    • 文档数据库的索引通常不是为了全文搜索设计的,而是为了快速查找特定字段或数据结构。
  3. 优化方向的差异:

    • 全文搜索引擎的设计重点在于最大化检索效率,特别是在处理大量文本数据时的搜索性能。
    • 文档数据库则更侧重于数据的灵活性、存储效率和结构化查询的性能。

OK,到这里其实我们就已经知道了ES和MongoDB最核心的区别了,也就不会疑惑。也可以得出:

es拥有更细粒度的查询能力,也就是能对全文进行各种检索,但在文档的存储上要差一点。

MongoDB在文档的存储上更优秀,适合存储海量文档,但是只支持简单的文档搜索,而不是全文检索。

相关文章:

【文档数据库】ES和MongoDB的对比

目录 1.由文档存储牵出的问题 2.什么是MongoDB? 3.ES和MongoDB的对比 1.由文档存储牵出的问题 本文或者说关于mongodb的这个系列文章的源头: 前面我们聊过了分布式链路追踪系统,在基于日志实现的分布式链路追踪的方式seluthzipkin中为了…...

VUE工程化项目--vue组件化

组件化开发 & 根组件 : ① 组件化: 一个页面可以拆分成 一个个组件 ,每个组件有着自己独立的 结构、样式、行为 。 好处:便于 维护 ,利于 复用 → 提升 开发效率 。 组件分类:普通组件、根组件。 …...

iOS base64 转 data |图片Base64转NSData | UIImageView | UIImage

Api 接口返回 base64 图片字符串,需要显示在UIImageView 上。 假设 string类型的 base64ImageStr 为 api返回的 base64字符串 将base64字符串进行处理 //去除掉首尾的空白字符和换行字符NSString * img64 [img stringByTrimmingCharactersInSet:[NSCharacterSet …...

Unity面试笔记:Unity常见关键词概念

Unity面试笔记:Unity常见关键词概念 Invoke 延迟函数 和 Coroutine协程 和 Thread线程帧缓冲区(Frame buffer)颜色缓冲区(Color buffer)深度缓冲区(Depth buffer)模板缓冲区(Stencil…...

gRPC vs HTTP

性能 gRPC 消息使用 Protobuf(一种高效的二进制消息格式)进行序列化。 Protobuf 在服务器和客户端上可以非常快速地序列化。 Protobuf 序列化产生的有效负载较小,这在移动应用等带宽有限的方案中很重要。 gRPC 专为 HTTP/2(HTTP…...

vue 导出el-table表格数据

1.先安装 file-saver 、xlsx 组件 npm install file-saver -Snpm intsall xlsx -S 2.html 代码 <el-table :data"elTable" ref"" id"table-content"><el-table-column label"其他" align"center"></el-…...

【问题记录】AttributeError: module ‘numpy‘ has no attribute ‘bool‘

服务器上运行代码报错&#xff1a; /opt/conda/envs/clrnet/lib/python3.8/site-packages/imgaug-0.4.0-py3.8.egg/imgaug/augmenters/meta.py:3368: FutureWarning: In the future np.bool will be defined as the corresponding NumPy scalar. augmenter_active np.zeros((n…...

WordPress企业模板

首页大图wordpress外贸企业模板 橙色的wordpress企业模板 演示 https://www.zhanyes.com/waimao/6250.html...

Intel Quartus II IP之DP1.4 工程的创建与使用

前述&#xff1a; Win10电脑安装了Quartus 21.4&#xff0c;这可以满足绝大多数工程&#xff0c;特别是对于简单调用fifo/ram等的工程&#xff0c;但是想要学习Quartus的HDMI/DP等高速接口类IP&#xff0c;首先需要创建HDMI/DP IP的设计demo工程&#xff0c;此时还需要安装Ecl…...

k8s集群环境搭建以及插件安装

前置条件 终端工具MobaXterm很好用。 1、虚拟机三台&#xff08;ip按自己的网络环境相应配置&#xff09;(master/node) 节点ipk8s-master192.168.200.150k8s-node1192.168.200.151k8s-node2192.168.200.152 2、关闭防火墙(master/node) systemctl stop firewalld systemc…...

面试的那些事儿

先从面试来说 假如你是网申&#xff0c;你的简历必然会经过HR的筛选&#xff0c;一张简历HR可能也就花费10秒钟看一下&#xff0c;然后HR 就会决定你这一关是Fail还是Pass。 假如你是内推&#xff0c;如果你的简历没有什么优势的话&#xff0c;就算是内推你的人再用心&#x…...

ffmpeg音视频解码

ffmpeg音视频解码 一.编译ffmpeg1.安装vmware虚拟机2.vmware虚拟机安装linux操作系统3.安装ftp和fshell软件4.在Ubuntu&#xff08;Linux&#xff09;中编译Android平台的FFmpeg&#xff08; arm和x86 &#xff09;5.解压FFmpeg6.Android编译脚本&#xff08;1&#xff09;修改…...

uniapp uni.chooseLocation调用走失败那里,错误码:112

问题&#xff1a;我配置了百度上所有能配置的&#xff0c;一直调用不成功&#xff0c;如下图配置的 1:第一个 配置 代码&#xff1a; "permission": {"scope.userLocation": {"desc": "你的位置信息将用于小程序位置接口的效果展示"}…...

第一次开发基于SpringBoot的Java应用

第一次开发基于SpringBoot的Java应用 一、 方式1&#xff1a;IDEA创建New Project Spring Boot官方文档的Getting Started1、IDEA创建New Project2、Spring Boot官方文档的Getting Started2.1 Creating the POM &#xff08;实际是&#xff0c;更新pom.xml&#xff09;2.2 Add…...

回归预测 | Matlab实现MSADBO-CNN-LSTM基于改进蜣螂算法优化卷积神经网络-长短期记忆神经网络多特征回归预测

回归预测 | Matlab实现MSADBO-CNN-LSTM基于改进蜣螂算法优化卷积神经网络-长短期记忆神经网络多特征回归预测 目录 回归预测 | Matlab实现MSADBO-CNN-LSTM基于改进蜣螂算法优化卷积神经网络-长短期记忆神经网络多特征回归预测预测效果基本描述程序设计参考资料 预测效果 基本描…...

数据结构--排序

参考【算法】排序算法之希尔排序 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/122632213 1. 排序的定义 2. 插入排序 2.1 直接插入排序 在插入第i&#xff08;i>1)个记录时&#xff0c;前面的i-1个记录已经排好序 void insertSort(int r[],int n) {for(int i2;i<…...

Androidmanifest文件加固和对抗

前言 恶意软件为了不让我们很容易反编译一个apk&#xff0c;会对androidmanifest文件进行魔改加固&#xff0c;本文探索androidmanifest加固的常见手法以及对抗方法。这里提供一个恶意样本的androidmanifest.xml文件&#xff0c;我们学完之后可以动手实践。 1、Androidmanife…...

openssl3.2 - 官方demo学习 - cms - cms_denc.c

文章目录 openssl3.2 - 官方demo学习 - cms - cms_denc.c概述笔记END openssl3.2 - 官方demo学习 - cms - cms_denc.c 概述 将CMS数据结构写入PEM文件, 并将分离后的加密数据单独写到数据文件. 笔记 /*! \file cms_denc.c * \note openssl3.2 - 官方demo学习 - cms - cms_d…...

【Linux 命令】tree 对目录进行树形展示

目录 1、tree 命令功能展示 2、tree 命令安装 3、tree 命令语法及其参数功能 4、终止 tree 展开树命令 1、tree 命令功能展示 在 Linux 中&#xff0c;我们使用 ll 命令对目录的展示并不太方便我们查看&#xff0c;不太清晰明了&#xff0c;所以我们可以使用 tree 命令以…...

掌握Spring MVC拦截器整合技巧,实现灵活的请求处理与权限控制!

拦截器 1.1 拦截器概念1.2 拦截器入门案例1.2.1 环境准备1.2.2 拦截器开发步骤1:创建拦截器类步骤2:配置拦截器类步骤3:SpringMVC添加SpringMvcSupport包扫描步骤4:运行程序测试步骤5:修改拦截器拦截规则步骤6:简化SpringMvcSupport的编写 1.3 拦截器参数1.3.1 前置处理方法1.3…...

健康系列: 你缺乏维生素B2吗?什么时候需要使用维生素B2补充剂?

写着玩的&#xff0c;如有疏漏欢迎指出 维生素B2是什么&#xff1f; 维生素B2也叫核黄素&#xff0c;英文是 Riboflavin&#xff0c;属于水溶性维生素B族。 它在体内主要参与能量代谢。身体把碳水、脂肪、蛋白质转化成能量时&#xff0c;需要B2参与。B2还和皮肤、口腔黏膜、眼…...

【习题05】求n的阶乘

题目&#xff1a; 分别利用递归和非递归的方法求n的阶乘 1、题目分析 规定&#xff1a;0的阶乘为1。 非递归&#xff1a; 我们先列举几个求阶乘的案例&#xff0c;从中找寻规律。 0&#xff01; 11&#xff01; 12&#xff01; 1 * 23&#xff01; 1 * 2 * 3 从上述几个例子可…...

微信聊天记录永久保存指南:5分钟掌握WeChatMsg完整备份方案

微信聊天记录永久保存指南&#xff1a;5分钟掌握WeChatMsg完整备份方案 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/…...

2026企业网盘选型对比:坚果云领衔,5款主流产品优劣与场景建议

随着企业数字化办公不断加深&#xff0c;企业网盘已从“文件存储工具”演变为“组织级协作平台”。到2026年&#xff0c;各厂商在同步机制、协作效率、权限体系与安全合规方面差距进一步拉大。本文对5款主流企业网盘做横向对比&#xff0c;帮助管理者按业务场景选到更合适的方案…...

“--tile”失效了?深度逆向Midjourney纹理无缝拼接底层逻辑(含Python自动化Tile校验脚本)

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;Midjourney纹理无缝拼接的核心价值与失效现象洞察 在游戏开发、建筑可视化与数字孪生等高频复用表面材质的场景中&#xff0c;Midjourney生成的纹理若能实现像素级无缝拼接&#xff08;tiling&#xff09;&am…...

全栈开发简历:避免 “样样通样样松”,突出核心技术栈

一、开篇暴击:你的全栈简历,可能正在被HR当“笑话”看 “熟练掌握HTML、CSS、JavaScript、Python、Java、PHP、MySQL、MongoDB、AWS、Docker、K8s……” 当你在简历上敲下这串“技术彩虹屁”时,是不是觉得自己就是传说中“一人顶一个团队”的全栈大神?醒醒!某互联网公司…...

知识竞赛电子计分板 vs 手工计分板:差距有多大

知识竞赛电子计分板 vs 手工计分板&#xff1a;差距有多大 无论是学校班级的趣味问答&#xff0c;还是企业年会、电视直播的知识竞赛&#xff0c;计分板都是整场活动的核心视觉焦点。传统的手工计分板&#xff08;如白板、翻牌、纸质表格&#xff09;曾陪伴我们多年&#xff0c…...

第11章:故障诊断与处理

第11章:故障诊断与处理 11.1 常见故障类型与原因 集群级故障 故障类型 症状 常见原因 集群Red 存在未分配的主分片 节点故障、磁盘满、分片损坏 集群Yellow 存在未分配的副本分片 节点不足、磁盘满、副本数过多 集群脑裂 多个Master节点 网络分区、Master配置错误 集群无响应…...

ElevenLabs台湾话语音上线后用户留存率骤降47%?揭秘方言语料清洗盲区与3步合规性校验法

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;ElevenLabs台湾话语音上线后用户留存率骤降47%&#xff1f;揭秘方言语料清洗盲区与3步合规性校验法 ElevenLabs于2024年Q2正式上线台湾话&#xff08;闽南语&#xff09;语音合成服务&#xff0c;初期D…...

二年级下册语文看图写话作文:长大以后做什么

二年级下册语文《长大以后做什么》看图写话&#xff0c;重点是&#xff1a;长大想做什么职业为什么想做以后会怎么努力老师最喜欢“有梦想 有原因 有行动”的内容。我用夸克网盘分享了「二年级下册语文作文」&#xff0c;链接&#xff1a;https://pan.quark.cn/s/3ee38f2d976…...