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

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

引言

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

为什么要关注MongoDB呢?

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

6834a824d60ab619f45fc11dcc355875.jpeg

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

1、什么是MySQL?826b8fcd35686ed194242a45c7da3135.png

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

主要特点:

1、强大的体系结构

2、集群架构的多样性

3、完整的复制体系

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

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

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

2、什么是MongoDB?

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

4、应用场景分析

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

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

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

6ef8f4a91698f04614e24b76d71cf5f2.png

总结

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

8e5b04bab0c4263e8d739c161eec5adf.png

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

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

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

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

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

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

·END·

相关阅读:

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

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

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

8c8667392db50c414d41899dbed7fe03.png

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
一个完整的外卖系统,包括手机端,后台管理,api 基于spring boot和vue的前后端分离的外卖系统 包含完整的手机端,后台管理功能 技术选型 核心框架:Spring Boot 数据库层:Spring data jpa/Spring data mongodb 数据库连接池:Druid 缓存:Ehcache 前端:Vue.js 数据库mysql5.5以上,Mongodb4.0(不要使用最新版4.2) 模块 flash-waimai-mobile 手机端站点 flash-waimai-manage后台管理系统 flash-waimai-api java接口服务 flash-waimai-core 底层核心模块 flash-waimai-generate 代码生成模块 快速开始 数据存储采用了mysqlmongodb,其中基础管理配置功能数据使用mysql,业务数据使用mongodb存储。 创建mysql数据库 CREATE DATABASE IF NOT EXISTS waimai DEFAULT CHARSET utf8 COLLATE utf8_general_ci; CREATE USER 'waimai'@'%' IDENTIFIED BY 'waimai123'; GRANT ALL privileges ON waimai.* TO 'waimai'@'%'; flush privileges; mysql数据库创建好了之后,启动flash-waimai-api服务,会自动初始化数据,无需开发人员自己手动初始化数据 安装mongodb并创建数据库:flash-waimai 使用mongorestore命令 导入mongodb数据,由于测试数据量较大,打包放在了百度云盘:链接:https://pan.baidu.com/s/1mfO7yckFL7lMb_O0BPsviw 提取码:apgd 下载后将文件解压到d:\elm,如下命令导入数据: mongorestore.exe -d flash-waimai d:\\elm 下载项目测试数据的图片(商家和食品图片):链接:https://pan.baidu.com/s/1rvZDspoapWa6rEq2D_5kzw 提取码:urzw ,将图片存放到t_sys_cfg表中system.file.upload.path配置的目录下 启动管理平台:进入flash-waimai-manage目录:运行 npm install --registry=https://registry.npm.taobao.org运行npm run dev启动成功后访问 http://localhost:9528 ,登录,用户名密码:admin/admin 启动手机端:进入flash-waimai-mobile目录:运行 npm install --registry=https://registry.npm.taobao.org运行npm run local启动成功后访问 http://localhost:8000
基于Java的网络通讯系统设计与实现如下: 系统架构: 客户端-服务器架构:采用客户端-服务器模式,其中服务器负责接收、处理和转发消息,而客户端负责发送和接收消息,并提供用户界面。 多线程支持:服务器端和客户端都需要支持多线程,以处理多个客户端的并发连接和消息传输。 功能设计: 用户注册与登录:用户可以注册新账号并登录系统,系统应提供身份验证机制来确保用户身份安全。 消息传输:支持文本消息、表情符号、图片、文件等多种类型的消息传输,并确保消息的可靠性和安全性。 消息广播:服务器可以向所有在线用户广播消息,或者向特定用户组发送消息。 在线状态管理:显示用户的在线状态,包括在线、离线、忙碌等状态,并及时更新在线用户列表。 文件传输:支持用户之间的文件传输功能,包括文件上传和下载。 技术选型: 网络通信:使用Java的Socket编程实现客户端与服务器之间的通信,可以选择TCP或UDP协议。 图形界面:可以使用JavaFX或Swing等GUI库来实现客户端的用户界面设计。 数据存储:可以使用关系型数据库MySQL或非关系型数据库MongoDB来存储用户信息、消息记录等数据。 安全性考虑: 数据加密:对用户登录、消息传输等敏感信息进行加密处理,保障数据的机密性和完整性。 身份认证:采用安全的身份验证机制,如用户名密码验证、Token验证等,防止未经授权的用户访问系统。 异常处理与日志记录: 实现良好的异常处理机制,捕获并处理各种可能的异常情况,保证系统的稳定性和可靠性。 记录系统运行日志,包括错误日志、操作日志等,方便进行故障排查和系统性能分析。 通过以上设计与实现,基于Java的网络通讯系统能够为用户提供安全、稳定和便捷的即时通讯服务,满足用户的沟通交流需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

架构精进之路

觉得不错可以请作者喝杯茶

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值