首页 > 数据库 >何时使用MongoDB而不是MySql

何时使用MongoDB而不是MySql

时间:2023-08-09 18:14:48浏览次数:59  
标签:存储 MongoDB 何时 使用 文档 MySQL 数据 MySql

什么是 MySQL 和 MongoDB

MySQL 和 MongoDB 是两个可用于存储和管理数据的数据库管理系统。MySQL 是一个关系数据库系统,以结构化表格格式存储数据。相比之下,MongoDB 以更灵活的格式将数据存储为 JSON 文档。两者都提供性能和可扩展性,但它们为不同的应用场景提供了更好的性能。

MySQL 是一种关系型数据库管理系统,它使用结构化查询语言(SQL)来操作数据。SQL 是一种通用的、标准化的、声明式的语言,它可以定义数据的结构、约束、操作、查询等。MySQL 使用表(table)来存储数据,表由行(row)和列(column)组成,每一行代表一条记录,每一列代表一个属性。表之间可以通过主键(primary key)和外键(foreign key)来建立关联,实现数据的完整性和一致性。

MongoDB 是一种非关系型数据库管理系统,它使用文档(document)来存储数据。文档是一种类似于 JSON 的格式,它由键值对(key-value pair)组成,每一个键值对代表一个属性。文档之间没有固定的结构,可以根据需要灵活地添加或删除属性。文档存储在集合(collection)中,集合类似于表,但没有预定义的模式(schema)。集合之间可以通过引用(reference)或嵌入(embedding)来建立关联,实现数据的灵活性和效率。

推荐博主开源的 H5 商城项目waynboot-mall,这是一套全部开源的微商城项目,包含三个项目:运营后台、H5 商城前台和服务端接口。实现了商城所需的首页展示、商品分类、商品详情、商品 sku、分词搜索、购物车、结算下单、支付宝/微信支付、收单评论以及完善的后台管理等一系列功能。 技术上基于最新得 Springboot3.0、jdk17,整合了 MySql、Redis、RabbitMQ、ElasticSearch 等常用中间件。分模块设计、简洁易维护,欢迎大家点个 star、关注博主。

github 地址:https://github.com/wayn111/waynboot-mall

相似之处

MySQL 和 MongoDB 都是数据库管理系统。它们存储数据并具有内置的用户界面和查询语言,因此我们都可以进行添加、编辑、修改和分析数据等操作。

开源许可证

MySQL 和早期版本的 MongoDB 都有开源许可证,可以免费下载开源版本。我们可以根据需要对代码执行的操作来对其进行修改。

MySQL 使用 GPL 协议,使得任何人均可以免费使用 MySQL 并且可以对其进行代码修改。而 MonogoDB 在 2018 年 10 月 16 日更改 License 为 SSPL 协议,这对于开源社区没啥影响,但是对于云厂商而言 MongoDB 公司会明确要求托管 MongoDB 实例的云厂商要么从 MongoDB 公司获取商业许可证,要么向社区开源其服务代码。

索引支持

MySQL 和 MongoDB 使用索引来提高查询速度和性能。索引是加快数据查询的一种数据库结构,有助于非常快速地查找和检索数据。

MySQL 和 MongoDB 数据库平台都使用哈希索引、B- 树(MySql实际使用的是B+ 树)索引和其他几种索引。

用户界面

MongoDB 和 MySQL 都易于使用。它们提供基于自然语言的查询语言来更新和读取数据,还提供图形用户界面(GUI),以便更直观地管理和分析数据。

编程语言

MySQL 和 MongoDB 与各种相同的编程语言兼容。MongoDB 和 MySQL 都可以与 Java、Python、Node.js、PHP、Ruby 以及 C# 结合使用。

安全性

MySQL 和 MongoDB 都使用身份验证、访问控制和加密手段来确保其数据库的安全。它们使用 TLS/SSL 加密来保护传输中数据和静态数据,还允许定义不同的用户访问级别。

文档和社区支持

MySQL 和 MongoDB 在各自的网站上都有详细的官方文档。两者的教程、手册和指南包含安装、配置和运行操作任务的完整说明。

MongoDB 和 MySQL 都有一个活跃的开发人员社区,可以回答问题并帮助进行故障排除。它们还提供企业版,针对特定要求提供专属支持。

主要区别

MySQL 是一个关系数据库管理系统,MongoDB 则是一个 NoSQL 数据库系统。MySQL 使用 SQL,大多数开发人员都有这方面的经验。相反 MongoDB 使用 MongoDB 查询语言(MQL)。尽管 MQL 和 SQL 有相似之处,但 MQL 通常需要额外花费精力进行学习。 接下来,博主将介绍一些主要差异。

数据模型

MySQL 是一个关系数据库系统,它将数据存储在列、行和表中。我们将数据存储在行中,每列代表不同类型的数据。然后我们就可以使用外键和主键定义数据之间的关系。每个表都有一个用于标识它的主键,外键用于创建关系。

MongoDB 是一个面向文档的数据库,将其所有数据存储为二进制 JSON(BSON)文档。BSON 允许序列化多种形式的数据。使用 BSON 文档可以存储非结构化、半结构化和结构化数据。MongoDB 没有使用数据库架构,而是采用了一种灵活的方法,将文档存储在集合中。

可扩展性

在 MySQL 数据库系统中,可用的扩展选项是有限的。有以下方案可供选择:

  • 通过向当前数据库服务器添加更多资源来实现纵向可扩展性
  • 通过在其他服务器上创建数据库的只读副本来读取复制

创建制度副本有限制,最多只能有五个副本。副本还可能滞后于主副本,会造成一致性问题。纵向可扩展性也受限于单机性能瓶颈。

相比之下,MongoDB 在可扩展性方面具有显著的优势。它具有两个用于扩展的关键功能:

  • 副本集 — 包含相同数据的 MongoDB 服务器备份
  • 分片 — 将数据分布在不同的服务器上

MongoDB 允许创建分片集群,因此我们的部分数据将在多个服务器上复制。例如如果我们有大量的客户记录,则可以对其进行分发,以便将 A-J 的姓名和 K-Z 的姓名保存在各自的副本集中。因此 MongoDB 可以横向扩展,以大规模优化读写性能。

性能

MySQL 设计为可在建立适当索引的多个表之间实现高性能连接。但是它需要逐行插入数据,因此写入性能较慢。

MongoDB 文档遵循分层数据模型,将大部分数据保存在单个文档中,从而减少了跨多个文档进行联接的需要。通过 $lookup 操作支持联接,但并未针对性能对其进行优化。但是 MongoDB 提供了 insertMany() API,用于快速插入数据,可优先考虑写入性能。

灵活性

作为关系数据库管理系统,MySQL 的结构比 MongoDB 更严格。MySQL 使用固定架构,将数据整理成行和表。必须将数据结构化并放入表格系统中才能使用 MySQL。

通过将数据存储为 JSON 文档,MongoDB 允许构建具有许多不同数据类型的复杂应用程序。例如可以通过更新嵌套数组字段来创建新字段。还可以使用聚合管道(这是一个 MongoDB 功能),允许通过将多个操作合并为一个工作流程来转换数据。

访问控制

在 MongoDB 中,可以控制操作、集合或数据库级别的访问权限。它使用 Kerberos、X.509 和 LDAP 证书对用户进行身份验证。相比之下,MySQL 允许在用户、数据库和表级别上限制用户访问权限。MySQL 使用自己的身份验证系统。它会在 SQL 注入攻击中带来另一个安全漏洞,MongoDB 的无架构方法则可以避免这个漏洞。

差异表格

MongoDB MySql
数据模型 MongoDB 将数据存储在 JSON 文档中,然后将其整理成集合。 MySQL 将数据存储在列和行中。数据存储是表格式和关系式的。
可扩展性 MongoDB 使用复制和分片进行水平扩展。 MySQL 使用纵向扩展和只读副本来大规模提高性能。
查询语言 MongoDB 使用 MongoDB 查询语言。 MySQL 使用 SQL。
性能 MongoDB 擅长插入或更新大量记录。 查询大量记录时,MySQL 的速度更快。
灵活性 MongoDB 没有架构,因此具有更大的灵活性,并且能够处理非结构化、半结构化和结构化数据。 MySQL 有严格的架构,可以很好地处理结构化数据。
安全性 MongoDB 使用 Kerberos、X.509 和 LDAP 证书对用户进行身份验证。 MySQL 使用内置的身份验证方法。

优缺点

MySQL 和 MongoDB 各有优缺点,如下展示:

  • MySQL 的优点:

    • 成熟稳定:MySQL 是一个历史悠久、广泛使用、经过测试的数据库系统,有着丰富的文档和社区支持。
    • 易用强大:MySQL 提供了一个简单易用、功能强大的 SQL 语言,可以实现复杂的查询和操作。
    • 数据安全:MySQL 支持 ACID 事务,可以保证数据的完整性和一致性,避免数据丢失或错误。
  • MySQL 的缺点:

    • 灵活性低:MySQL 需要预先定义好数据的结构和类型,不适合存储动态变化或非结构化的数据。
    • 扩展性差:MySQL 只支持垂直扩展,不适合处理海量或分布式的数据。
    • 性能瓶颈:MySQL 在处理大量的连接、并发、索引、关联等操作时,可能会出现性能瓶颈或故障。
  • MongoDB 的优点:

    • 灵活性高:MongoDB 使用文档模型,可以动态地调整数据的结构和类型,适合存储动态变化或非结构化的数据。
    • 扩展性好:MongoDB 支持水平扩展,可以处理海量或分布式的数据,提高系统的可用性和容错性。
    • 性能高效:MongoDB 在处理大量的读写、索引、嵌入等操作时,可以实现高效的性能和吞吐量。
  • MongoDB 的缺点:

    • 难用复杂:MongoDB 提供了一个难用复杂、功能有限的 MQL 语言,不能实现复杂的查询和操作。
    • 数据不安全:MongoDB 不支持 ACID 事务,不能保证数据的完整性和一致性,可能导致数据丢失或错误。

应用场景

MySQL 和 MongoDB 适合不同的应用场景,以下是一些主要的例子:

MySQL 适合以下场景:

  • MySQL 中的数据存储格式使其适用于数据仓库和在线分析处理。它符合 ACID 标准,这使得 MySQL 适用于处理复杂事务,例如在电子商务、交易应用场景中。
  • 需要确保数据安全、一致性、可靠性等特性的场景,例如政府、金融等领域。

MongoDB 适合以下场景:

  • MongoDB 在社交网络、媒体或物联网(IoT)等应用场景中处理非结构化数据时,该数据库更为合适。
  • 需要进行大量的读写、索引、嵌入等操作的场景,并且需要数据可扩展可变化,例如内容管理、个性化推荐等领域。

关注公众号【waynblog】每周分享技术干货、开源项目、实战经验、高效开发工具等,您的关注将是我的更新动力!

标签:存储,MongoDB,何时,使用,文档,MySQL,数据,MySql
From: https://www.cnblogs.com/waynaqua/p/17617598.html

相关文章

  • 面试博客:MySQL中的访问控制详解
    引言在当今互联网时代,数据安全是每个企业和个人都必须重视的问题。作为最流行的关系型数据库之一,MySQL提供了强大的访问控制功能,以确保只有授权用户可以访问和操作数据库。本文将深入探讨MySQL中的访问控制机制,并提供一个代码示例来帮助读者更好地理解。什么是访问控制?访问控制......
  • MySQL数据库笔记(一)
    第一章数据库概述1、什么是数据库数据库是一种存储并管理数据的软件系统存储:持久化管理:增删改查常用的存储数据的方式:1、Java中的变量:生命周期短,不能实现持久化[内存]2、序列化:管理数据时依赖于Java中的反序列化[硬盘]3、txt,办公软件:没有统一的方式管理数据[硬盘]4......
  • MySQL和Java中的货币字段类型选择
    引言在互联网应用中,处理货币是一项常见的任务。为了确保准确性和精度,我们需要选择适当的字段类型来存储货币数据。本文将讨论在MySQL和Java中记录货币时应选择的字段类型,并提供相应的代码示例。MySQL中的货币字段类型在MySQL中,我们可以使用DECIMAL数据类型来存储货币数据。DECIM......
  • MySQL中的外键(foreign key)
    [转]https://blog.csdn.net/weiguang102/article/details/126409406 版权声明:本文为CSDN博主「知其黑、受其白」的原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/weiguang102/article/details/126409406......
  • mysql主从环境Auto_Position=1下的主备切换
    环境:OS:Centos7mysql:5.7.29 1.停止从服务器slave服务:mysql>stopslave;2.将从服务器切换为主服务器,在从服务器上执行mysql>resetmaster;mysql>resetslaveall; 3.这个时候查看下新主库的gtidmysql>showslavestatus\G;Emptyset(0.00sec)ERROR:Noque......
  • MongoDB 位置查询报错 planner returned error: unable to find index for $geoNear q
     执行查询语句,使用 $nearSphere/***1千米=0.6213712英里15千米=9.3205679英里查询通过除以地球的大约赤道半径(3963.2英里)将距离转换为弧度。*①:如果是第一页,查询50公里内的老朋友店铺,*②:查询15公里内所以的置顶服务商家,然后根据分页参数来截取*③:0.0015678......
  • MySQL——《监控Zabbix部署》
    一、简介zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。zabbix能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。zabbix由2部分构成,zabbixserver与可选组件zabbixagent。......
  • MySQL 优化—— SQL 性能分析
    SQL性能分析SQL执行频率MySQL客户端连接成功后,通过show[session|global]status命令可以提供服务其状态信息。通过下面指令,可以查看当前数据库CRUD的访问频次:SHOWGLOBALSTATUSLIKE'Com_______';七个下划线代表这个七个占位。查询数据库中整体的CURD频次,一般......
  • 基于keepalived+gtid半同步主从复制的MySQL集群
    mysql的安装(二进制安装)[root@my-slv1~]#catmysql_install.sh#!/bin/bash#解决软件的依赖关系yuminstallcmakencurses-develgccgcc-c++vimlsofbzip2openssl-develncurses-compat-libs-y#解压mysql二进制安装包tarxfmysql-5.7.38-linux-glibc2.12-x86_64.ta......
  • 记录mysql排序字段有重复值,分页数据错乱问题
    引用http://vsalw.com/9768.html记录mysql排序字段有重复值,分页数据错乱问题,下面2个sql除了分页limit外,其他都一样,但是第三页的结果却包含部分第二页的数据。SELECT id, show_flag, sort, vote_title, img_url, max_option_count, vote_option_type, begin_time, ......