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

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

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

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

相关文章

matlab simulink PMSM_SVPWM PI转速控制

1、内容简介 略 8-可以交流、咨询、答疑 2、内容说明 略PMSM_SVPWM PI转速控制 PMSM SVPWM PI转速控制 3、仿真分析 4、参考论文 略

电脑办公最佳拍档 夸克网盘升级低耗能备份、PDF阅读器等功能

临近年终,上班族不仅要总结过去一年的成绩还要开始制定新规划,在这个过程中整理资料是必不可少的环节。对于经常需要使用文件备份和PDF的用户,推荐大家试一下夸克网盘电脑端,升级后的“低耗能备份”和“PDF阅读器”让备份体验更丝…

面试150题做题记录

面试150题做题记录 题目1: 合并两个有序数组 题目1: 合并两个有序数组 题目:https://leetcode.cn/problems/merge-sorted-array/?envTypestudy-plan-v2&envIdtop-interview-150 最优思路:利用原有数列的单调性质,从右往左遍历&#xff…

MySQL启动后反复重新启动故障

MySQL版本为5.6.45 系统为Ubuntu 20.04 LTS 该服务器重启后,MySQL需要手动执行启动。 运行执行脚本后发现异常,如下图: 提示MySQL服务在不停重复启动。 反复使用ps -ef |grep mysql命令查看,发现mysql进程号一直在变化&#x…

Spring Boot Web MVC

文章目录 一、Spring Boot Web MVC 概念二、状态码三、其他注解四、响应操作 一、Spring Boot Web MVC 概念 Spring Web MVC 是⼀个 Web 框架,一开始就包含在Spring 框架里。 1. MVC 定义 软件⼯程中的⼀种软件架构设计模式,它把软件系统分为模型、视…

redis的分布式锁

分布式锁是一种用在分布式系统中实现同步和互斥访问的机制。 1、分布式锁概念 满足分布式系统或者集群模式下,多进程可见并且互斥的锁。 分布式锁的核心思想就是让分布式集群中的节点都适用同一把锁,只要大家使用的是同一把锁,就能锁住线程…

038-第三代软件开发-简易视频播放器-自定义Slider (二)

第三代软件开发-简易视频播放器-自定义Slider (二) 文章目录 第三代软件开发-简易视频播放器-自定义Slider (二)项目介绍简易视频播放器自定义Slider (二)横向纵向 关键字: Qt、 Qml、 关键字3、 关键字4、 关键字5 项目介绍 欢迎来到我们的 QML & C 项目&…

我在Vscode学OpenCV 初步接触

OpenCV是一个开源的计算机视觉库,可以处理图像和视频数据。它包含了超过2500个优化过的算法,用于对图像和视频进行处理,包括目标识别、面部识别、运动跟踪、立体视觉等。OpenCV支持多种编程语言,包括C、Python、Java等&#xff0c…

golang 实现雪花算法

雪花算法概述 snowflake 是 twitter 开源的分布式ID生成算法,其核心思想为,一个long型的ID: 41 bit 作为毫秒数 - 41位的长度可以使用69年10 bit 作为机器编号 (5个bit是数据中心,5个bit的机器ID) - 10位…

【网络知识必知必会】聊聊网络层IP协议

文章目录 前言IP 协议格式总结 前言 在之前的博文中, 我们聊过了传输层中的两个重点协议 TCP 和 UDP, 本文我们再来聊聊网络层中的一个协议IP, 简单认识一下 IP 协议格式. IP 协议与 TCP 协议的复杂度也不妨多让, 不过我们在这里只是简单的聊一聊 IP 协议的报文格式就行, 毕竟…

图书馆书目推荐数据分析与可视化

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性:…

【Java初阶练习题】-- 循环练习题

循环练习题 1. 根据年龄, 来打印出当前年龄的人是少年(低于18), 青年(19-28), 中年(29-55), 老年(56以上)2. 判定一个数字是否是素数3. 打印 1 - 100 之间所有的素数4. 输出 1000 - 2000 之间所有的闰年5. 输出乘法口诀表6. 求两个正整数的最大公约数7. 求出0~999之…

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

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

滚动条默认是隐藏的只有鼠标移上去才会显示

效果 在设置滚动条的类名中写 /* 滚动条样式 */.content-box::-webkit-scrollbar {width: 0px; /* 设置纵轴(y轴)轴滚动条 */height: 0px; /* 设置横轴(x轴)轴滚动条 */}/* 滚动条滑块(里面小方块) */.…

分享一下微信小程序抽奖链接怎么做

标题:微信小程序抽奖链接制作全攻略,轻松玩转营销抽奖活动 一、引言 在当今的数字化时代,抽奖活动已经成为一种高效的市场营销策略,而微信小程序作为一个功能强大的移动端平台,为企业和个人提供了制作抽奖链接的便捷…

浅析Redis大Key | 京东云技术团队

一、背景 在京东到家购物车系统中,用户基于门店能够对商品进行加车操作。用户与门店商品使用Redis的Hash类型存储,如下代码块所示。不知细心的你有没有发现,如果单门店加车商品过多,或者门店过多时,此Key就会越来越大…

不同源安装nginx

Nginx是一款高性能的Web服务器软件。在安装Nginx时,可以选择不同的安装源。 1.官方源:在官方网站下载Nginx的源代码,然后进行编译安装。 2.EPEL源:EPEL (Extra Packages for Enterprise Linux)源是针对Red Hat、CentOS、Scienti…

IDEA初步入门

1 安装 现在的系统更迭很快,很多软件都只支持win10 和 11了,但我们过时党还在用win7. 所以就必须找到合适的版本。在windows 7 64位系统下,可以使用IDEA 2020.1.4版本。 在Jetbrain官方下,找到历史版本,找到windows版…

reactive与ref VCA

简介 Vue3 最大的一个变动应该就是推出了 CompositionAPI,可以说它受ReactHook 启发而来;它我们编写逻辑更灵活,便于提取公共逻辑,代码的复用率得到了提高,也不用再使用 mixin 担心命名冲突的问题。 ref 与 reactive…

torch.div()不支持round_mode参数

问题怎么定位的呢,把报错信息一股脑甩给chatgpt,问他什么意思,他就反馈说“在标准的Python库中,div() 函数不接受 rounding_mode 参数。”(虽然这个问题也不难,但是改偷的懒还是要偷) 问题再现…