SQL 和 NoSQL 数据库之间的差异【绽放吧!数据库】

举报
Yuchuan 发表于 2021/07/27 18:31:46 2021/07/27
【摘要】 现在,我们结束对SQL 与 NoSQL 的比较 。我希望你们喜欢这篇文章并理解所有的差异。因此,如果您已阅读本文,您可能对哪种数据库适合您的需求有一个清晰的认识。

由于世界上存在大量数据,几乎不可能在没有适当数据库的情况下管理数据。在当今市场上,存在着不同种类的数据库,决定最适合您业务的数据库可能是一项艰巨的任务。因此,在这篇关于SQL与 NoSQL 的文章中,我将比较这两种类型的数据库,以帮助您选择哪种类型的数据库可以帮助您和您的组织。   

本文将涵盖以下主题:

所以,让我们开始吧,伙计们!!

什么是 SQL?

SQL又名结构化查询语言是关系数据库的核心,用于访问和管理数据库。这种语言用于以表格的形式从结构化数据格式中操作和检索数据,并保存这些表格之间的关系。关系可能如下:

SQL 中的关系 - SQL 与 NoSQL - Edureka

  • 一对一关系是指表 A 中的一行与表 B 中的一行相关。
  • 一对多关系是指表 A 中的单行与表 B 中的多行相关。
  • 多对多关系是指表 A 中的许多行可以与表 B 中的许多行相关。
  • 自引用关系是指表 A 中的记录与同一个表本身相关。

现在,本文接下来让我们了解什么是 NoSQL?

什么是 NoSQL?

NoSQL,或者最常称为 Not only SQL 数据库,提供了一种用于存储和检索非结构化数据的机制。这种类型的数据库可以处理海量数据并具有动态模式。因此,NoSQL 数据库没有特定的查询语言,没有或只有很少的关系,而是以集合和文档的格式存储数据。

因此,一个数据库可以有“n”个集合,每个集合可以有“m 个文档。考虑下面的例子。

NoSQL 数据库的表示 - SQL 与 NoSQL - Edureka

正如你所看到的上图中,有一个员工数据库,其中有 2 个集合,即员工和项目集合。现在,这些集合中的每一个都有文档,它们基本上是数据值。因此,您可以假设集合是您的表,而文档是您在表中的字段

好的,既然您知道什么是 SQL 和 NoSQL,现在让我们看看这些数据库是如何相互对抗的。

SQL 与 NoSQL

因此,面对这种情况,我将基于以下理由比较这两个数据库:

  1. Type of Database
  2. Schema
  3. Database Categories
  4. Complex Queries
  5. Hierarchical Data Storage
  6. Scalability
  7. Language
  8. Online Processing
  9. Base Properties
  10. External Support

数据库类型

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

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

架构

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

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

数据库类别

在 SQL数据库是牛逼能够根据数据库。因此,您可以拥有 'n' 个相互关联的表,并且每个表都可以有行和列,用于在表的每个单元格中存储数据。

现在,如果我们谈论 NoSQL 数据库,那么 NoSQL 数据库有以下几类数据库:

  • 文档数据库- 它将每个键与称为文档的复杂数据结构配对。它可以包含许多不同的键值对、键数组对甚至嵌套文档
  • 键值存储——它们是最简单的 NoSQL 数据库。数据库中的每个项目都作为属性名称或键与其值一起存储。
  • 图存储- 它们用于存储有关网络的信息,例如社交关系。图存储包括 Neo4J 和 HyperGraphDB。
  • 宽列存储——CassandraHBase等宽列存储针对大型数据集的查询进行了优化,并将数据列存储在一起,而不是行。

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

复杂查询

与 NoSQL 相比,SQL更适合复杂的查询环境,因为 SQL 数据库中的架构是结构化的,并且数据以表格格式存储。因此,即使您希望在外部查询中应用具有许多子查询的嵌套查询,您也可以通过使用正确的表名和列名轻松实现。

现在,NoSQL 数据库不适合复杂查询的原因是因为 NoSQL 数据库不是使用 SQL 等标准语言进行查询的。 

分层数据存储

好吧,当我们根据这个因素比较数据库时,与 SQL 数据库相比,NoSQL 更适合分层存储 

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

可扩展性

SQL 数据库可垂直扩展。您可以通过优化硬件(例如增加 CPU、RAM、SSD 等)来对数据服务器进行负载平衡。

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

语言

SQL数据库有一个特定的语言,它不从数据库到数据库的不同而不同。这种数据库使用SQL(结构化查询语言)来检索和操作数据。

NoSQL数据库没有特定的语言用于查询,并从数据库到数据库的变化。在 NoSQL 数据库中,查询主要集中在文档的集合上,该语言被称为 UnQL(非结构化查询语言)。

在线处理

在比较 SQL 和 NoSQL 时,基于这个因素,  SQL 数据库用于重型事务型应用程序。嗯,这是因为 SQL 提供了数据的原子性、完整性和稳定性。此外,您可以将 NoSQL 用于事务目的,但是,它在高负载和复杂的事务应用程序中仍然不够稳定。所以,你可以理解SQL主要用于OLTP(Online Transactional Processing),NoSQL主要用于OLAP(Online Analytical Processing)。

基础属性

SQL 数据库基于ACID 属性 (原子性、一致性、隔离性和持久性),而 NoSQL 数据库基于Brewers CAP 定理(一致性、可用性和分区容错性)。

让我先解释一下 ACID 属性:

  • 原子性:原子性是指完全完成或失败的事务,其中事务是指数据的单个逻辑操作。这意味着如果任何事务的一部分失败,则整个事务失败并且数据库状态保持不变。
  • 一致性:一致性确保数据必须满足所有验证规则。简而言之,您可以说您的事务永远不会在未完成其状态的情况下离开数据库。
  • 隔离隔离的主要目标是并发控制。
  • 持久性:持久性意味着如果事务已提交,它将发生介于两者之间的任何事情,例如断电、崩溃或任何类型的错误。

来到CAP定理,

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

  • 一致性:所有节点同时看到相同的数据。
  • 可用性:保证每个请求是否成功或失败。
  • 分区公差: ģ uarantees一个系统是否仍旧尽管该系统的一部分信息丢失或故障运行。

NoSQL 无法同时提供一致性和高可用性。

外部支持

自从 SQL 出现 40 多年以来,所有 SQL 供应商都提供出色的支持。但是,对于某些 NoSQL 数据库,只有有限的专家可用,您仍然必须依靠社区支持来部署您的大规模 NoSQL 部署。这是因为 NoSQL 是在 2000 年代后期出现的,人们还没有对其进行太多探索。

所以,如果我必须在这篇关于 SQL vs NoSQL 的文章中总结 SQL 和 NoSQL 的区别,你可以参考下表。

Key Areas SQL
NoSQL
Type of database Relational Database 关系型数据库 Non-relational Database 非关系型数据库
Schema Pre-defined Schema 预定义架构  Dynamic Schema 动态模式
Database Categories Table based Databases 基于表的数据库 Document-based databases, Key-value stores, graph stores, wide column stores 基于文档的数据库、键值存储、图形存储、宽列存储
Complex Queries  Good for complex queries 适用于复杂查询 Not a good fit for complex queries 不适合复杂查询
Hierarchical Data Storage Not the best fit 不是最合适的 Fits better when compared to SQL 与 SQL 相比更适合
Scalability Vertically Scalable 垂直可扩展 Horizontally Scalable 水平可扩展
Language Structured Query language 结构化查询语言 Unstructured Query language 非结构化查询语言
Online Processing Used for OLTP 用于 OLTP Used for OLAP 用于 OLAP
Base Properties Based on ACID Properties 基于 ACID 属性 Based on CAP Theorem 基于CAP定理
External Support Excellent support is provided by all SQL vendors 所有 SQL 供应商都提供出色的支持  Rely on community support.  依靠社区支持。

表 1: SQL 和 NoSQL 之间的差异——SQL 与 NoSQL

所以,伙计们,到此我们结束了 SQL 和 NoSQL 之间的对峙。 现在,我们已经讨论了很多关于 SQL 和 NoSQL 的内容,让我向您展示一些相同的示例。

SQL 和 NoSQL 的示例

SQL 和 NoSQL 的示例如下:

SQL 和 NoSQL 示例 - SQL 与 NoSQL - Edureka

现在,最流行的 SQL 和 NoSQL 数据库是MySQLMongoDB

所以,接下来在这篇关于 SQL 与 NoSQL 的文章中,我们将比较 MySQL 和 MongoDB。但是,在此之前,您还可以观看有关 SQL 与 NoSQL 的视频。

什么是 MySQL?

MySQL是一个开源的关系数据库管理系统,可在许多平台上运行。它提供多用户访问以支持许多存储引擎,并由 Oracle 提供支持。因此,您可以从 Oracle 购买商业许可版本以获得高级支持服务。

MySQL的特点如下:

SQL 的特点 - SQL vs NoSQL - Edureka

  • 易于管理 - 该软件很容易下载,并且还使用事件调度程序来自动安排任务。
  • 强大的事务支持——拥有 ACID(原子性、一致性、隔离性、持久性)属性,还允许分布式多版本支持。
  • 全面的应用程序开发 MySQL具有插件库,可将数据库嵌入到任何应用程序中。它还支持用于应用程序开发的存储过程、触发器、函数、视图等。可以参考RDS教程,了解亚马逊的RDBMS。
  • 高性能– 提供具有不同内存缓存和表索引分区的快速加载实用程序。
  • 低总体拥有成本——这降低了许可成本和硬件支出。
  • 开源 & 24 * 7 支持——这个 RDBMS 可以在任何平台上使用,并为开源和企业版提供 24 * 7 支持。
  • 安全数据保护 – MySQL 支持强大的机制,以确保只有授权用户才能访问数据库。
  • 高可用性 – MySQL 可以运行高速主/从复制配置,并提供集群服务器。
  • 可扩展性和灵活性– 使用 MySQL,您可以运行深度嵌入的应用程序并创建包含大量数据的数据仓库。

接下来,在这篇文章中让我们了解一下什么是MongoDB?

什么是MongoDB?

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

MongoDB的特点如下:

  • 索引:创建索引是为了提高搜索性能。
  • 复制: MongoDB 将数据分布在不同的机器上。
  • Ad-hoc 查询:它通过索引 BSON 文档和使用独特的查询语言来支持临时查询。
  • 无模式:它非常灵活,因为它的无模式数据库是用 C++ 编写的。
  • 分片 MongoDB 使用分片来支持具有非常大的数据集和高吞吐量操作的部署。

好的,那么,既然您知道什么是 MySQL 和 MongoDB,现在让我们看看这些数据库是如何相互对抗的。

MySQL 与 MongoDB

因此,面对这种情况,我将基于以下理由比较这两个数据库:

  1. Query Language
  2. Flexibility of Schema
  3. Relationships
  4. Security
  5. Performance
  6. Support
  7. Key Features
  8. Replication
  9. Usage
  10. Active Community

查询语言

MySQL 使用结构化查询语言(SQL)。这种语言很简单,主要由用于检索和操作数据的 DDL、DML DCL 和 TCL 命令组成。 另一方面,MongoDB使用非结构化查询语言。所以,查询语言基本上就是MongoDB的查询语言。请参考下图。

插入数据 - SQL 与 NoSQL - Edureka

架构的灵活性

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

关系

基于这个因素比较 MySQL 和 MongoDB 时,MySQL 支持借助 JOIN 语句的关系,MongoDB 不支持 JOIN 语句。但是,它支持将一个文档放在另一个文档中(也称为文档嵌入)和多维数据类型,例如数组。

 安全

MySQL 基本上使用基于特权的安全模型。这种安全模型对用户进行身份验证并促进用户对特定数据库的特权。

另一方面,MongoDB 使用基于角色的访问控制和一组灵活的权限,提供授权和身份验证等安全功能。

表现

在这个参数上比较 MySQL 和 MongoDB 时,让我告诉你,当考虑大型数据库时,MySQL 与 MongoDB 相比相当慢。这主要是因为 MySQL 无法用于处理大量非结构化数据。

但是,MongoDB 具有处理大型非结构化数据的能力。因此,在考虑大型数据库的情况下,它比 MySQL 更快,因为它允许用户以减少服务器负载的方式进行查询。

注意:因此没有硬性规定 MongoDB 会一直为您的数据更快,这完全取决于您的数据和基础设施。

支持

好吧,它们都  为安全修复、维护版本、错误修复、补丁和更新提供了 24*7 的出色支持。因此,基于此参数,它们之间没有区别。

主要特征

MySQL和MongoDB的主要特性可以参考下图:

主要特性 - SQL 与 NoSQL - Edureka

复制

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

用法

可以参考下图了解在何处使用 MySQL 和 MongoDB:

主要特性 - SQL 与 NoSQL - Edureka

活跃社区

基于这个因素比较 MySQL 和 MongoDB 时,MySQL 数据库提供了比 MongoDB 更好的社区,因为它由 Oracle Corporation拥有和维护。

所以,如果非要总结一下 MySQL 和 MongoDB 的区别,大家可以参考下表。

Key Areas MySQL
MongoDB
Query Language Uses Structured Query Language(SQL) 使用结构化查询语言 (SQL) Uses MongoDB Query Language 使用 MongoDB 查询语言
Flexibility of Schema Pre-defined schema design 预定义架构设计 No restrictions on schema design 对架构设计没有限制
Relationships Supports JOIN statements 支持 JOIN 语句 Does not support JOIN statements 不支持 JOIN 语句
Security Uses privilege-security based model 使用基于权限安全的模型 Uses role-based access control 使用基于角色的访问控制
Performance Slower than MongoDB 比MongoDB慢 Faster than MySQL 比 MySQL 快
Support Provides excellent support 24*7 提供卓越的支持 24*7 Provides excellent support 24*7 提供卓越的支持 24*7
Key Features
  • Triggers & SSL Support
  • Provides text searching and indexing
  • Query caching
  • Integrated replication support
  • Different storage engines with various
  • 触发器和 SSL 支持
  • 提供文本搜索和索引
  • 查询缓存
  • 集成复制支持
  • 不同的存储引擎具有不同的
  • Auto-sharding
  • Comprehensive secondary indexes
  • In-memory speed
  • Native replication
  • Embedded data models support
  • 自动分片
  • 综合二级指标
  • 内存速度
  • 本机复制
  • 嵌入式数据模型支持
Replication Supports Master-Slave Replication 支持主从复制 Supports built-in replication, sharding, and auto-elections. 支持内置复制、分片和自动选举。
Usage
  • Best fit for data with tables and rows
  • Works better for small datasets
  • Frequent updates
  • Strong dependency on multi-row transactions
  • Modify large volume of records
  • 最适合包含表和行的数据
  • 更适合小数据集
  • 经常更新
  • 对多行事务的强依赖
  • 修改大量记录
  • Best fit for unstructured data
  • Works better for large datasets
  • High write loads
  • High availability in an unstable environment
  • Data is location-based
  • 最适合非结构化数据
  • 更适用于大型数据集
  • 高写入负载
  • 不稳定环境下的高可用性
  • 数据是基于位置的
Active Community Has a good active community. 拥有良好的活跃社区。 The community of MySQL is much better than that of MongoDB.  MySQL 的社区比 MongoDB 好很多。 

所以,伙计们,到此我们结束了 MySQL 和 MongoDB 之间的对峙。现在,对 MySQL 和 MongoDB 了解得更多可能会在您的脑海中提出一个问题,即企业应该选择 MySQL 还是 MongoDB? 

好吧,他们两个之间没有明显的赢家。数据库的选择完全取决于数据库的架构以及您希望如何访问它。然而,当您拥有固定架构、高事务、低维护、数据安全且预算有限时,您可以使用 MySQL,而当您拥有不稳定的架构、高可用性、云计算和内置分片时,您可以使用 MongoDB。

因此,对于其中哪一个是最好的,不会有任何最终裁决,因为这些中的每一个都根据您的要求表现出色。

现在,您知道 MySQL 和 MongoDB 之间的区别,接下来在这篇关于 SQL 与 NoSQL 的文章中,让我向您展示如何分别将数据插入 MySQL Workbench 和 MongoDB Compass 的表和集合中。

演示:将数据插入到表和集合中 

让我们从使用 MySQL Workbench 将数据插入表开始。

使用 MySQL Workbench 将数据插入表中

要使用 MySQL Workbench 将数据插入表中,您可以按照以下步骤操作:

步骤 1:打开 MySQL Workbench 并创建连接。要了解如何创建连接,请参阅MySQL Workbench 教程

第 2 步:现在,创建连接后,打开连接,然后您将被重定向到以下仪表板。

MySQL Workbench - SQL 与 NoSQL - Edureka

第 3 步:现在要创建数据库和表,请按照以下查询操作:

//Create Database
CREATE DATABASE Employee_Info;
//Use Database
USE Employee_Info;
//Create Table
CREATE TABLE Employee
(EmpID int,
EmpFname varchar(255),
EmpLname varchar(255),
Age int,
EmailID varchar(255),
PhoneNo int8,
Address varchar(255));

Step4:现在,一旦你的表被创建,要将值插入到表中,使用 INSERT INTO 语法如下:

//Insert Data into a Table
INSERT INTO Employee(EmpID, EmpFname, EmpLname,Age, EmailID, PhoneNo, Address)
VALUES ('1', 'Vardhan','Kumar', '22', 'vardy@abc.com', '9876543210', 'Delhi');

第 5 步:当您查看表格时,您将看到如下输出。

表 - SQL vs NoSQL - Edureka

现在,在这篇关于 SQL 与 NoSQL 的文章中,让我们看看如何在 MongoDB Compass 中创建数据库和集合。

使用 MongoDB Compass 将数据插入到集合中

要使用 MongoDB Compass 将数据插入表中,您可以按照以下步骤操作:

第 1 步:打开MongoDB Compass创建一个主机。创建主机后,单击“连接”。请参阅下文。

创建数据库 - SQL 与 NoSQL - Edureka

第 2 步:现在,一旦您的主机连接,要创建数据库,请单击“创建数据库”选项并提及“数据库”和“集合名称”。

第 3 步:现在,打开您的数据库,然后选择集合。这里我选择了samplecollection。要将文档添加到集合中,请选择“插入文档”选项并提及参数。这里我提到了 EmpID 和 EmpName。

创建文档 - SQL 与 NoSQL - Edureka

现在,我们结束对SQL 与 NoSQL 的比较 。我希望你们喜欢这篇文章并理解所有的差异。因此,如果您已阅读本文,您可能对哪种数据库适合您的需求有一个清晰的认识。

【绽放吧!数据库】有奖征文火热进行中:https://bbs.huaweicloud.com/blogs/285617

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。