技术分享|SQL和 NoSQL数据库之间的差异:MySQL(VS)MongoDB

老吴与小仙 2021-05-04 15:43:40
技术 分享 数据库 SQL Nosql


图片

 

在当今市场上,存在各种类型的数据库,选择适合你业务类型的数据库对应用的开发和维护有着重要意义。本篇文章,将为大家分享SQL和NoSQL语言之间的区别,同时还将比较这两种类型的数据库,以帮助小伙伴们选择最适合你业务类型的数据库 。

 

ONE ——什么是SQL和NoSQL

一、什么是SQL?

结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。该语言以表格的形式从结构化数据格式中操作和检索数据。

图片

二、什么是NoSQL?

NoSQL,泛指非关系型的数据库,提供了一种存储和检索非结构化数据的机制。这种类型的数据库可以处理大量数据,并具有动态模式。因此,NoSQL数据库没有特定的查询语言,没有或只有很少的关系,但是数据以集合和文档的格式存储。

图片

如上图是一个Employee数据库,其中有2个集合,即Employee和Projects。现在这些集合中的每一个都有文档,这些文档基本上是数据值。因此,您可以假设集合是你的表,文档是你在表中的字段。

 

TWO ——SQL VS NoSQL

针对SQL和NoSQL的区别,将基于不同的方面进行比较:

一、数据库类型

SQL之所以称为关系型数据库,是因为它将结构化数据组织定义为行和列,每个表都与数据库中的其他表相关。

另一方面,NoSQL被称为非关系数据库,这是因为数据以集合的形式存储,它们之间没有或只有很少的关系。 

二、Schema架构

SQL需要用到结构化数据的预定义架构。因此,在开始使用SQL提取和操作数据之前,需要确保以表的形式预定义数据结构。

但是,NoSQL具有用于非结构化数据的动态架构。因此,如果您使用NoSQL数据库,则不存在预定义的架构,数据的完整架构完全取决于您希望存储数据的方式,即您想将哪些字段存储在文档和集合中。

三、数据库类别

SQL数据库是基于表格的数据库。因此您可以有n个相互关联的表,并且每个表可以具有行和列,这些行和列将数据存储在表的每个单元格中。

而NoSQL数据库则具有以下几类数据库:

  • 文档数据库–将每个密钥与称为文档的复杂数据结构配对。它可以包含许多不同的键值对,甚至嵌套的文档;

  • 键值存储–它们是最简单的NoSQL数据库。数据库中的每一项都作为属性名称或键及其值存储。

  • 图形存储–它们用于存储有关网络的信息,例如社交关系。图形存储包括Neo4J和HyperGraphDB。

  • 宽列存储– Cassandra和HBase等宽列存储针对大型数据集的查询进行了优化,并将数据列而不是行存储在一起。

因此,SQL数据库以表的形式存储数据,而NoSQL数据库以键值对,文档,图形数据库或宽列存储的形式存储数据 。

四、复杂查询

与NoSQL相比,SQL更适合复杂的查询环境,因为SQL数据库中的架构是结构化的,并且数据以表格格式存储。因此,即使您希望将嵌套查询与外部查询中的许多子查询一起应用,也可以通过使用适当的表名和列名轻松进行。NoSQL数据库不适用于复杂查询的原因是因为NoSQL数据库不是以SQL之类的标准语言查询的。

五、分层数据存储

与SQL数据库相比,NoSQL更适合分层存储 。

这是因为随着表数量的增加,维护它们之间关系的复杂性也不断增加。因此在这种情况下,您无法将大量的表彼此关联在一起。但是当您考虑使用NoSQL数据库时,这种数据库更适合分层数据存储,因为它遵循类似于JSON数据的键值对存储方式。

六、可扩展性

SQL数据库是垂直可伸缩的。您可以通过优化硬件(例如增加CPU,RAM,SSD等)来平衡数据服务器的负载。

另一方面,NoSQL数据库是水平可伸缩的。您可以通过向集群添加更多服务器以处理大量流量来执行负载平衡。

七、语言
SQL数据库有特定的语言,不会因为数据库不同而不同。NoSQL数据库没有特定的语言用于查询,会随数据库的变化而变化。在NoSQL数据库中,查询主要集中在文档集合上,该语言称为UnQL(非结构化查询语言)。

八、在线处理

在比较SQL和NoSQL时,基于此因素,  SQL数据库用于重事务型应用程序。这是因为SQL提供了数据的原子性,完整性和稳定性。您也可以将NoSQL用于事务目的,但是在高负载和复杂的事务应用程序中,它仍然不够稳定。因此,SQL主要用于OLTP(在线事务处理),而NoSQL主要用于OLAP(在线分析处理)。

九、基本属性

SQL数据库基于ACID属性 (原子性,一致性,隔离性和持久性),而NoSQL数据库基于Brewers CAP定理(一致性,可用性和分区容限)。首先让我解释一下ACID属性:

  • 原子性:原子性是指完全完成或失败的事务,其中事务是指数据的单个逻辑操作。这意味着,如果任何事务的一部分失败,则整个事务都会失败,并且数据库状态将保持不变。

  • 一致性:一致性可确保数据必须符合所有验证规则。简而言之,您可以说您的事务永远不会离开数据库而不完成其状态。

  • 隔离:隔离的主要目标是并发控制。

  • 持久性:持久性意味着如果事务已提交,则事务之间可能发生任何事情,例如断电,崩溃或任何类型的错误。

谈到CAP定理,Brewers CAP定理指出,数据库最多只能实现以下三个保证中的两个:一致性,可用性和分区容限。这里

  • 一致性:所有节点同时看到相同的数据。

  • 可用性:确保每个请求是否成功失败。

  • 分区容限:保证即使消息丢失或系统部分故障,系统是否仍可继续运行。

NoSQL不能同时提供一致性和高可用性。

十、外部支持

自从SQL诞生超过40年以来,所有SQL供应商都提供了出色的支持。但是,对于某些NoSQL数据库,是有限制的,您仍然必须依靠社区支持来部署大规模的NoSQL。这是因为NoSQL于2000年代末期出现,人们尚未对其进行太多

 

THREE——MySQL VS MongoDB

目前我们已经了解了SQL和MySQL之间的区别,下面将通过分享两者中最受欢迎的数据库MySQL和MongoDB来更深入的认识他们。

图片

 

一、什么是MySQL?

MySQL是可在许多平台上运行的开源关系数据库管理系统。它提供了多用户访问、支持许多存储引擎。

以下是MySQL的功能:

图片

  • 易于管理 – 该软件非常容易下载,并使用事件计划程序自动计划任务。

  • 强大的事务支持–拥有ACID(原子性,一致性,隔离性,耐久性)属性,还允许分布式多版本支持。

  • 全面的应用程序开发– MySQL具有用于将数据库嵌入任何应用程序的插件库。它还支持用于应用程序开发的存储过程,触发器,函数,视图等。

  • 高性能–为快速加载实用程序提供独特的内存缓存和表索引分区。

  • 较低的拥有成本–这减少了成本和硬件支出。

  • 开源和24 * 7支持–该RDBMS可以在任何平台上使用,并为开源和企业版提供24 * 7支持。

  • 安全数据保护 – MySQL支持强大的机制,以确保只有授权用户才能访问数据库。

  • 高可用性 – MySQL可以运行高速主/从复制配置,并提供集群服务器。

  • 可伸缩性和灵活性–使用MySQL,您可以运行深度嵌入式应用程序,并创建包含大量数据的数据仓库。

二、什么是MongoDB?MongoDB是一个非关系数据库,用于将数据存储在文档中。这种类型的数据库将相关信息存储在一起,以进行快速查询处理。

图片

MongoDB的功能如下:

  • 索引:创建索引是为了提高搜索性能。

  • 复制:MongoDB将数据分布在不同的计算机上。

  • 临时查询:它通过为BSON文档建立索引并使用唯一的查询语言来支持临时查询。

  • 无模式:由于它的无模式数据库是用C ++编写的,因此非常灵活。

  • 分片:MongoDB使用分片来启用具有非常大的数据集和高吞吐量操作的部署。

 

下面我们看看这两个数据库之间的区别:

1、查询语言

MySQL使用结构化查询语言(SQL)。该语言很简单,主要由DDL,DML DCL和TCL命令组成,以检索和处理数据。 另一方面,MongoDB使用非结构化查询语言。因此,查询语言基本上是MongoDB查询语言。请参考下图:

图片

2、模式的灵活性

MySQL具有结构化数据架构的灵活性,因为您只需要清楚地定义表和列即可。另一方面,MongoDB对模式设计没有任何限制。您可以直接提及集合中的几个文档,而这些文档之间没有任何关系。但是,MongoDB的唯一问题是您需要根据访问数据的方式来优化架构。

3、关系处理

MySQL借助JOIN语句支持关系,但MongoDB不支持JOIN语句。但是,它支持将一个文档放在另一个文档(也称为文档嵌入)和多维数据类型(例如数组)内。

4、安全
MySQL基本上使用基于特权的安全模型。这种安全模型对用户进行身份验证,并在特定数据库上促进用户特权。另一方面,MongoDB使用基于角色的访问控制以及一组灵活的特权,这些特权提供诸如授权和身份验证之类的安全功能。

5、表现当考虑使用大型数据库时,与MongoDB相比,MySQL的运行速度很慢。这主要是由于MySQL无法用于大量和非结构化的数据。但是,MongoDB具有处理大型非结构化数据的能力。因此,它比考虑大型数据库的MySQL更快,因为它允许用户以减少服务器负载的方式进行查询。注意:并没有硬性规定,即MongoDB始终会为您的数据提供更快的速度,这完全取决于您的数据和基础架构。

6、复写

MySQL支持主从复制和主主复制。另一方面,MongoDB支持内置的复制,分片和自动选择。因此,借助MongoDB中的自动选择,您可以设置另一个数据库或辅助数据库,以在主数据库发生故障时自动接管。 

7、用法

您可以参考下图以了解在哪里使用MySQL和MongoDB:

MySQL MongoDB
最适合包含表和行的数据 最适合非结构化数据
适用于小型数据集 适用于大型数据集
经常更新 高写入负载
强烈依赖多行交易 不稳定环境中的高可用性
修改大量记录 基于数据位置

——————————————————————————————————————————————————————————————————————————————————————————————————————————————————

  关于SQL和NoSQL数据库比较就先简单给大家分享到这里!

掌握了这些对比概念,还需要结合真实项目才能够更深刻理解MySQL和MongoDB数据库不同的应用场景及操作方法。下面课程将带你进入真实项目的应用!

《2021年Web前端开发项目集合包》

  20套前端实战+工具类课程

  真实企业项目,实现技能提升

  高性价比,专属社群,优质服务

 

图片

 

扫码立即购买

图片

限时优惠

更多详情

扫码咨询

微信号|mixiu1573

图片

 

 

版权声明
本文为[老吴与小仙]所创,转载请带上原文链接,感谢
https://www.cnblogs.com/mrwu-missxian/p/14729551.html

  1. Help, Java how to get all the current processes of the system
  2. Has anyone ever used JMeter or written tests in httpUnit????
  3. Living in a mountain village in late spring
  4. Partridge day, spring of HKUST
  5. JavaScript异步编程4——Promise错误处理
  6. 海康摄像SDK开发笔记(一):海康威视网络摄像头SDK介绍与模块功能
  7. JavaScript asynchronous programming 4 -- promise error handling
  8. Haikang video SDK development notes (1): introduction and module functions of Hikvision webcam SDK
  9. JOP:用于FPGA的嵌入式实时系统中的Java优化处理器内核
  10. Spring Boot源码:使用MongoDB MongoTemplate公开REST在几分钟内实现CRUD功能
  11. Spring Boot应用程序事件教程 - reflectoring
  12. 带有Resilience4j断路器的Spring云网关 - rome
  13. 经验分享:Apache Kafka的缺点与陷阱 - Emil Koutanov
  14. 通过Spring Boot Webflux实现Reactor Kafka
  15. 从Java 8升级到Java 11应该注意的问题
  16. Jop: Java optimized processor core for FPGA embedded real time system
  17. Spring boot source code: use mongodb mongotemplate to open rest to realize crud function in a few minutes
  18. Spring boot application event tutorial - reflecting
  19. Spring cloud gateway with resilience4j circuit breaker - ROM
  20. Experience sharing: shortcomings and pitfalls of Apache Kafka - Emil koutanov
  21. Realization of reactor Kafka through spring boot Webflux
  22. RPC框架设计----Socket与I/0模型
  23. Problems in upgrading from Java 8 to Java 11
  24. RPC framework design -- socket and I / 0 model
  25. RPC框架设计----I/0模型
  26. RPC framework design: I / 0 model
  27. RPC框架设计----NIO编程缓冲区Buffer
  28. RPC框架设计----NIO编程缓冲区Buffer
  29. RPC framework design -- NiO programming buffer
  30. RPC framework design -- NiO programming buffer
  31. Java多线程基础
  32. Java multithreading Foundation
  33. 码农飞升记-00-Java发展历程
  34. Development history of coder-00-java
  35. 码农飞升记-00-Java发展历程
  36. Development history of coder-00-java
  37. Spring and Autumn Moon
  38. Node.js与Spring Boot比较? - Ryan Gleason
  39. Spring WebFlux的明显陷阱 - ŁukaszKyć
  40. Spring创始人Rod大叔对YAML的真实想法
  41. Compare node.js with spring boot- Ryan Gleason
  42. Obvious pitfalls of spring Webflux- Ł ukaszKy ć
  43. Spring founder uncle rod's real thoughts on yaml
  44. 码农飞升记-02-OracleJDK是什么?OracleJDK的版本怎么选择?
  45. What is manong feisheng-02-oracle JDK? How to choose the version of Oracle JDK?
  46. Spring tide surging Xinanjiang
  47. Linux内核软中断
  48. Linux kernel soft interrupt
  49. Linux内核软中断
  50. Linux kernel soft interrupt
  51. Java multithreading Foundation
  52. The construction of Maven private library nexus
  53. I / O stream in Java
  54. JDK 16:Java 16的新功能 - InfoWorld
  55. 在Java中本地进行线程间数据传输的三种方式和源码展示
  56. jdon导致cpu 99%最后tomcat死掉---banq给予回复
  57. 用领域事件模拟AOP注入
  58. JDK 16: new function of Java 16 - InfoWorld
  59. Cartoon: from JVM lock to redis distributed lock
  60. Spring 3.1 终于加入了Cache支持