MySQL 与 MongoDB 的区别

286 阅读5分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第23天,点击查看活动详情

数据库管理系统(DBMS)负责从组织良好的数据片段中管理和检索所有所需的信息。MySQL和MongoDB就是这样的数据库,也是web应用程序最需要的数据库服务。两者都允许您从站点或应用程序提取数据并生成报告,但它们的设计不同。MySQL是一个遗留的表结构系统,而MongoDB是一个基于文档的系统。在本文中,我们将进行一场有趣的MySQL和MongoDB之战,看看这两种DBMS有何不同。

MySQL vs MongoDB

MySQL

MySQL是著名的、免费使用的、开源的关系型数据库管理系统(RDBMS)。与其他关系系统一样,MySQL在表和行的帮助下存储数据,执行引用完整性,并使用SQL即结构化查询语言来访问数据。当用户需要从MySQL数据库中恢复数据时,他们必须执行一个SQL查询,将多个表合并在一起,以生成所需数据的视图。它充分利用SQL来查询和操作数据库系统。

必须尽早定义数据库模式和数据模型,并且数据必须与存储在数据库中的该模式相对应。这种存储数据的严格方法提供了一定程度的安全性,但牺牲了灵活性。如果需要在数据库中存储一种新的数据类型或格式,则应该进行模式迁移,随着数据库规模的增长,模式迁移可能变得复杂且代价高昂。

MongoDB

与MySQL类似,MongoDB也是免费使用和开源的,尽管它的设计原则不同于传统的关系系统。总的来说,它被设计成一个非关系系统(NoSQL), MongoDB采用了一种非常不同的技术来存储数据,以一系列类似json的文档的形式传递信息,而不是关系系统的表和行结构。

MongoDB文档包括一系列不规则类型的键/值对,包括数组和嵌套文档,然而,最直接的区别是共享集合中的键/值对的结构可能因文档而异。这种更轻松的方法是可行的,因为文档是自描述的。

我们有关于MongoDB和MYSQL的一般信息。让我们使用重要参数开始比较。

比较参数

MongoDB

MySQL

简介

非关系数据库系统,提高了灵活性和水平可伸缩性

一个强大的关系数据库系统,为熟练的IT专家提供一个通用的数据库环境

发布年

2009

1995

组织机构

MongoDB

甲骨文

性能

采用分层数据模型并一起维护数据,减少了对连接的需求,优化了写入性能

优化用于与大量索引表的高性能连接,优化用于跨多个表的高性能

数据管理

大块数据易于管理

当有大量数据时就很难了

系统类型

非关系型或NoSQL系统

使用SQL设计的遗留系统

应用程序

实时分析、内容管理系统、传统商业网站、物联网、移动应用程序、分析网站等等

高安全性网站、电子商务网站、架构清晰的结构化数据、社交媒体网站等。

数据表示

将数据显示为JSON文档

显示表和行中的数据

编程语言支持

C, c++

C, c++, JavaScript

支持

内置复制、分片和自动选举

主从复制和主复制

模式定义

不需要定义模式,只需删除文档

必须在存储之前定义表和列

查询语言

JavaScript作为查询语言

SQL作为查询语言

加入支持

不支持JOIN操作

支持JOIN操作

适合

有用于增长的结构化或非结构化数据的项目

项目中有结构化数据和传统的RDBMS

风险

不需要模式定义,因此攻击风险最小

SQL注入攻击风险较高

外键

不允许使用外键

允许使用外键

可伸缩性

水平和垂直缩放

仅垂直缩放

术语

表,行,列,连接

集合,文档,字段,嵌入式文档

社区支持

GitHub上大概有213个存储库

GitHub上大约有23个存储库

App 保护

使用基于角色的访问控制(RBAC)来保证安全性

具有基于特权的安全模型(PBSM)

用户友好性

为开发人员提供有吸引力和简单的UI

管理表、模式、规范化等有时令人困惑

体系结构

Nexus架构是否具有更大的灵活性

包含具有更多存储空间的客户端-服务器架构 分布式体系结构

是的

没有

事务模型

遵循更具可访问性的BASE模型

更一致地遵循ACID模型

开发人员的生产力

开发周期很快,是开发人员的乐趣

MySQL的开发速度很慢,因为它有严格的表结构

集成支持

与多种存储引擎集成良好,使用JSON语言MongoDB查询语言

使用SQL进行数据库管理支持编程语言,但灵活性较差

查询语言

MongoDB查询语言(MQL)

像任何其他RDBMS一样使用SQL

相关的指标

如果没有找到索引,则数据库引擎将查找文档集合

在这里,如果没有找到索引,数据库引擎将在整个表中查找这些行

模式设计的灵活性

动态模式和设计可以更改

一旦定义了模式设计,就不能修改

原子事务

多文档交易

原子事务