MySQL与MongoDB,该如何做技术选型?

news2025/7/27 22:08:44

hello,大家好,我是张张,「架构精进之路」公号作者。

15acb26f8ff79b2e22543c9dbd2334f8.png

引言

ccbed56a3a8fe0d128b551239c21dec0.png

一般情况下,会考虑到MySQL与MongoDB如何做技术选型的时候,你一定是遇到了类似于非结构化数据JSON的存取难题,否则大家都直接MySQL开始搞起了。

为什么要关注MongoDB呢?

下图是DB-Engines 2023年10月数据库的排名统计,可以看到MongoDB总排名在第5,在Nosql数据库中排名第1。

6834a824d60ab619f45fc11dcc355875.jpeg

既然要做技术选型,那就先要弄明白其中的一些区别和差异。

262340f518c16d349740fecfe514461a.png

1、什么是MySQL?

4f0f0389d5744f8279b0c93ac3394de5.png

826b8fcd35686ed194242a45c7da3135.png

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的RDBMS (Relational Database Management System,关系数据库管理系统)应用软件之一。

主要特点:

1、强大的体系结构

2、集群架构的多样性

3、完整的复制体系

4、强大的多行事务的支持

5、不同的插件式存储引擎的支持(InnoDB)

6、第三方工具种类丰富,社区用户活跃

400e2c9fa3b901f01ef56d99f932d89b.png

2、什么是MongoDB?

63e4c5f97e7f4d51a0763730cef6df01.png

4710a23736e1bd8f560d329fea9a5ec7.png

MongoDB 是一个基于分布式文件存储的数据库。由C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。

MongoDB将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB文档类似于JSON 对象。字段值可以包含其他文档,数组及文档数组。

主要特点:

1、文档模式,无结构化数据,灵活的数据结构,适合快速开发,迭代场景

2、功能强大,位置索引、文本索引、TTL索引

3、副本集自动切换,保证数据的高可靠,服务的高可用性。

4、自动分片,存储容量、服务能力横向能力

5、适应于物流,物联网等海量数据场景

6、aggregation & mapreduce

3、MongoDB与MySQL之间的差异

3.1 相关概念及术语的差异

9c4d9829efe0f3c0a88c0796ad2dd05c.jpeg


3.2 存储数据结构的差异

MySQL 的存储结构分为5 级:表空间、段、簇、页、行。表空间可以看做是InnoDB 存储引擎逻辑结构的最高层,所有的数据都存放在表空间中。

MySQL 不同引擎有不同的存储方式,而 MongoDB 以类JSON的文档的格式存储。

f353d89d70481b82b36883745a8aec77.png

3.3 增删改查操作的差异

当从数据库表或表组合中请求信息时,MySQL 使用 结构化查询语言(SQL),SQL是最流行和利用最广泛的查询语言,大多数开发人员都有这方面的经验。

相反,MongoDB 则使用非结构化查询语言(MQL)。要从JSON文档数据库请求数据或信息,首先必须指定具有结果应匹配的属性的文档。

尽管 MQL 和 SQL 有相似之处,但 MQL 通常需要额外花费精力进行学习。

a14876864f7c021c3c8ff6b8ef904c86.png

3.4 事务支持的差异

当应用程序类型需要多行事务时,关系数据库是最合适的选择。除了提供安全性,MySQL还实现了高事务处理率。而 MongoDB 仅支持单文档事务操作,弱一致性。

cfebd41c5be62c5afd6fe79ac633d9e1.png

3.5 性能测试总结分析

  • 插入速度总结:MongoDB不指定_id插入 > MySQL不指定主键插入 > MySQL指定主键插入 > MongoDB指定_id插入。

  • MongoDB在指定_id插入的时候,插入性能下降非常厉害。

  • MySQL非常稳定,无论在指定主键还是在不指定主键插入的情况下,其效率都差不了。

  • MongoDB会充分利用内存作为缓存。

3.6 其他主要差异

接下来,我们将介绍一些其他主要差异。

f1037eac7966947ca5d5f670ac62d630.png

c4a2182c9c69e1b85ec43f67007d7a49.png

4、应用场景分析

7e2d232b6ee39b92a1461062fed5a7b2.png

作为文档数据库,由于MongoDB并不限制用户存储数据的体量和类型,因此适合大数据的应用环境。而得益于MongoDB的水平可扩展能力,以及与云服务的敏捷性结合,它不但能够减少开发者的工作量,简化业务与项目的扩展流程,还能够提供高可用性和数据的快速恢复。

不过,MongoDB在数据的可靠性、一致性、以及安全性等方面,不如MySQL。此外,当应用程序需要提供多行事务(如,会计和银行系统)时,以MySQL为首的关系型数据库提供了高事务处理率(high transaction rate)。实际上,与MySQL专注于提供事务的ACID和安全性不同的是,MongoDB更专注于提供高插入率(high insert rate)。

MongoDB 的应用已经渗透到各个领域,比如游戏、物流、电商、内容管理、社交、物联网、视频直播等。

6ef8f4a91698f04614e24b76d71cf5f2.png

53abcc6d9eeefb9fd9055cbe34e547eb.png

总结

37bace5e9fcbaa4d63714b42dc03623c.png

综上所述,MySQL是一个开放源代码的关系数据库,这意味着它的数据被组织成表格,使您可以将数据与数据库的其他部分相关联。MongoDB也是开源的,但是,它是一个文档数据库。因此,它不关联记录,并且其数据模式是不固定的,从而允许具有更高插入能力的更具动态性和灵活性的数据库。

8e5b04bab0c4263e8d739c161eec5adf.png

在确定最佳数据库系统之前,应明确并确定特定业务或项目的优先级。

  • MongoDB比MySQL更能处理大量数据

  • 因此,对于基于云的服务,易于增长和更改的应用程序以及数据量大的环境,它是最合适的选择。

  • 相反,MySQL的固定和结构化数据模式提供了比大多数数据库更高的一致性和可靠性。

  • 使用MySQL的另一个巨大好处是,由于符合ACID的事务而具有卓越的数据安全性,是重视此功能的应用程序的最合适选择。

总之,MongoDB和MySQL都很优秀,具体如何选择,完全取决于您的具体应用需求和系统特征。

·END·

相关阅读:

专注架构技术研究,一起跨越职业瓶颈!

关注公众号,免费领学习资料

如果您觉得还不错,欢迎关注和转发~     

8c8667392db50c414d41899dbed7fe03.png

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

西工大CSAPP第二章课后题2.56~2.58答案及解析

因为我获取并阅读CSAPP电子书的方式是通过第三方网站免费下载,没有付给原书作者相应的报酬,遵循价值交换原则,我会尽我所能通过博客的方式,推广这本书以及原书作者就职的大学,以此回馈原书作者的劳动成果。另外&#x…

【JMeter】逻辑控制器分类以及功能介绍

常用逻辑控制器的分类以及介绍 If Controller 满足if条件才会执行取样器 Loop Controller 对取样器循环多次 ForEach Controller

MySQL笔记--SQL语句

1--SQL的通用语法 2--SQL语句的分类 3--DDL语句 3-1--数据库操作 # 查询所有数据库 show databases;# 查询当前使用数据库 select database();# 创建数据库 create database 数据库名 create database if not exists 数据库名; # 不存在时创建,存在则不创建 creat…

【设计模式】第25节:行为型模式之“访问者模式”

一、简介 访问者模式允许一个或者多个操作应用到一组对象上,设计意图是解耦操作和对象本身,保持类职责单一、满足开闭原则以及应对代码的复杂性。 二、优点 分离操作和数据结构增加新操作更容易集中化操作 三、适用场景 数据结构稳定,操…

数据结构与算法-(7)---栈的应用拓展-前缀表达式转换+求值

🌈write in front🌈 🧸大家好,我是Aileen🧸.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流. 🆔本文由Aileen_0v0🧸 原创 CSDN首发🐒 如…

测试C#调用Aplayer播放视频(3:编写简易播放器)

学习了参考文献1中的示例代码,也找出了前一篇文章中自己测试控件但无法播放视频的问题(没有将解码库文件复制到可执行程序所在的codecs文件夹内),本文基于APlayer组件编写简单的视频播放器,主要实现以下功能&#xff1…

iOS实现弹簧放大动画

效果图 实现代码 - (void)setUpContraints {CGFloat topImageCentery (SCREEN_HEIGHT - 370 * PLUS_SCALE) / 2;[self.topIconView mas_makeConstraints:^(MASConstraintMaker *make) {make.centerX.mas_equalTo(0);make.centerY.equalTo(self.view.mas_top).with.offset(t…

一定要看看的大模型【评测基准】及【评测报告】

评测标准 1.能力基础评测 为了检验大语言模型(LLM)的有效性和优越性,已有研究采用了大量的任务和基准数据集来进行实证评估和分析。根据任务定义,现有语言生成的任务主要可以分为语言建模、条件文本生成和代码合成任务。需要注意的是,代码合成不是典型的自然语言处理任务…

Qt6:子窗口向父窗口传值

终于解决了这个问题!这才怀着激动的心情跑来记录一下。你们是不知道这其中的艰辛啊,太难了,差亿点就放弃学Qt了…… 此处苦水省略一万字…… 关于子窗口向父窗口传值的方法,在网上搜了不下百遍,免费的、付费下载、会员…

STM智能小车——OLED实现测速小车

目录 1. 测速模块 2. 测试原理和单位换算 3. 定时器和中断实现测速开发和调试代码 4. 小车速度显示在OLED屏 1. 测速模块 用途:广泛用于电机转速检测,脉冲计数,位置限位等。有遮挡,输出高电平;无遮挡,输出低电平接线…

0基础学习VR全景平台篇第115篇:转换为立方体面 - PTGui Pro教程

上课!全体起立~ 大家好,欢迎观看蛙色官方系列全景摄影课程!PTGui的软件教程到了这节课即将结束,我们此前历数各种编辑、优化全景的方法步骤,相信可以带给大家一些帮助。可是因为一些人力不可抗拒因素,造成…

SSM校园设备管信息管理系统开发mysql数据库web结构java编程计算机网页源码eclipse项目

选题理由 随着计算机网络及多媒体技术的广泛应用,互联网已成为高校办学的基础设施和必备条件,基于互联网的高校信息管理越来越综合化,越来越多的教学管理、行政管理工作将架构在互联网上,互联网正在变为学校实施教学、科研和管理…

图数据库Neo4j概念、应用场景、安装及CQL的使用

一、图数据库概念 引用Seth Godin的说法,企业需要摒弃仅仅收集数据点的做法,开始着手建立数据之间的关联关系。数据点之间的关系甚至比单个点本身更为重要。 传统的**关系数据库管理系统(RDBMS)**并不擅长处理数据之间的关系,那些表状数据模…

python爬取csdn的文章内容

今天写了一个爬取csdn文章的 初学不太会,下面代码有时间可以自行优化 新建python文件,把我的代码复制进去保存 把依赖python install 一下 import re import urllib.error import urllib.request import os import tkinter as tk from bs4 import Bea…

2023年Zotero最新同步教程-使用TeraCloud的25G免费空间实时跨设备同步文献

文章目录 1. 前言2.1. 注册账号2.1.1. 填写注册信息2.1.2. 创建账号成功2.1.3. 注意2.2. 扩容空间2.3. 打开WebDAV 3. Zotero配置WebDAV同步3.1. 设置网址3.2. 验证服务器3.3. 文件同步成功 4. 结语 1. 前言 Zotero免费版的存储空间是300m,一个图文PDF动辄两三M&am…

基于JAYA算法的无人机航迹规划-附代码

基于JAYA算法的无人机航迹规划 文章目录 基于JAYA算法的无人机航迹规划1.JAYA搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要:本文主要介绍利用JAYA算法来优化无人机航迹规划。 1.JAYA搜索算法 …

高效学习工具之AnkiMobile新手入门指南(ios端,包括ipad、ihpone设备)————创建、使用、备份、设置参数、相关资料

文章目录 0 背景0.1 闭环学习0.2 什么是anki 1 开始使用1.1 导入1.2 创建空白组1.3 创建卡片1.3.1 利用anki创建卡片的两种方法1.3.2 复习材料分类 1.4 筛选(做减法,拆分学习(做子卡牌集合))(核心&#xff…

集简云slack(自建)无需API开发轻松连接OA、电商、营销、CRM、用户运营、推广、客服等近千款系统

slack是一个工作效率管理平台,让每个人都能够使用无代码自动化和 AI 功能,还可以无缝连接搜索和知识共享,并确保团队保持联系和参与。在世界各地,Slack 不仅受到公司的信任,同时也是人们偏好使用的平台。 官网&#x…

3.12每日一题(有理函数不定积分)

两种方法: 1、拆项,然后分别加项减项拆,把分母降幂 注: x凑x的平方时前面要乘1/2 分子为x的平方可以分一个x去凑x的平方 2、联想三角有理函数公式,使用三角函数求解 用tant替换x;再通过二倍角公式降幂即可 …

自定义的卷积神经网络模型CNN,对图片进行分类并使用图片进行测试模型-适合入门,从模型到训练再到测试,开源项目

自定义的卷积神经网络模型CNN,对图片进行分类并使用图片进行测试模型-适合入门,从模型到训练再到测试:开源项目 开源项目完整代码及基础教程: https://mbd.pub/o/bread/ZZWclp5x CNN模型: 1.导入必要的库和模块&…