zhcn 技术 教育科技 SQL 与 NoSQL – 您的下一个项目应该使用哪一个?

SQL 与 NoSQL – 您的下一个项目应该使用哪一个?

最常见的问题之一是我应该使用哪个数据库?

SQL 代表结构化查询语言。 NoSQL 数据库最初由 IBM 研究人员团队于 20 世纪 70 年代开发。另一方面,NoSQL 数据库由 Carlo Strozzi 于 1998 年首次使用。

这两种数据库 (DB) 系统之间最常见的区别是 SQL 是关系型的,而 NoSQL 是非关系型的。

让我们仔细看看这两个数据库,以便您下次考虑为项目选择数据库时更好地了解情况。

SQL 与 NoSQL - 您的下一个项目应该使用哪一个?
SQL 与 NoSQL – 您的下一个项目应该使用哪一个?

数据库结构

我们来谈谈结构。

SQL

SQL数据库具有清晰的模式结构。

架构包含表,每个表包含一定数量的列。这意味着用户更新表的列数不能超过为表指定的列数。当您需要维护数据完整性或检查数据库中存储的数据类型时,这尤其有用。

SQL 数据库中的每个表都可以关联。换句话说,您可以在表之间创建关系。这些关系可以是一对多、多对多或一对一。您实施的关系类型取决于您的需要。

例如,考虑一个假设的情况。我有一个用户和一个公司,用户可以订购产品。然后,您可以决定用户可以创建多个订单,但只有一个用户可以创建每个订单。这是一种一对多的关系:一个用户和多个订单。因此两个表的表结构如下:

数据库可以包含具有以下结构的用户表:

 users_table
----------------------------------------------------
id          |          name       |           email
-----------------------------------------------------
1                    Idris              idris@idrislawal.com

您还可以创建订单表

orders_table
---------------------------------------------------------------------------------
id                   |             user_id             |             order_number
---------------------------------------------------------------------------------
1                                      1                               20000001

订单表user_id允许您轻松地将订单表中的每个订单映射到其所属的用户。对于一对一关系,如果您决定通过关联的订单 ID 检索用户,则users_table还可以包含order_id

多对多情况通常涉及一个称为数据透视表的附加表。这允许您将多个记录相互映射。使用上面的例子。我们会这样做,

 users_table
-------------------------------------------------------------------------------------
id               |                    name                   |                  email
-------------------------------------------------------------------------------------
1                               Idris                             idris@idrislawal.com

订单表看起来像这样

orders_table
---------------------------------------------------------
id                      |                    order_number
---------------------------------------------------------
1                                             2000001

然后,数据透视表将两个 ID 作为外键保存。

 users_orders_table
------------------------------------------------------------------------------
id               |                  order_id              |           user_id
------------------------------------------------------------------------------
1                                     1                                 1

基于 SQL 提供的这一结构,您可以轻松地在表之间创建联接,这些联接提供来自在一个查询中联接的不同表的数据。

SQL 与 NoSQL - 您的下一个项目应该使用哪一个?
SQL 与 NoSQL – 您的下一个项目应该使用哪一个?

NoSQL

NoSQL数据库比 SQL 数据库更灵活,并且还可以包含大量数据。

NoSQL 数据库没有预定义的架构或表。我有收藏,每个收藏都有文档。这允许数据在接收时以不同的格式保存。您可以选择在一个集合中包含具有不同字段的多个不同文档。还可以手动建立集合之间的关系。然而,它不适合这样的目的。相反,您可以将单个查询所需的所有内容存储在同一个集合中。

如果您是 SQL 人员,您可能会将集合视为表,将文档视为包含表的行。但是,对于可以添加到表中的数据列没有限制。

返回到您公司的虚拟实例,其中包含您之前定义的用户和订单。

用户集合可以定义如下:

 {id: 1, name: 'idris', email: 'idris@idrislawal.com'}

Orders 集合可以这样定义:

 {id: 1, order_number: 2000001, user_id:1}

但是,在这种情况下,我不想手动组合两个集合(在这种情况下,我不应该这样做)。您可以将最常阅读的条目保存到集合中。我决定将其设为 Orders 集合(在本例中)。

 {id:1, order_number:200001, user{id:1, name: 'idris', email:'idris@idrislawal.com'}}

在这种情况下,您不再需要从 Users 集合中读取,只需从 Orders 集合中读取。它现在包含您需要的所有数据。

这里需要注意的重要一点是:如果您正在构建一个读取次数多于写入次数的应用程序,那么 NoSQL 选项可能更适合。因为您可以将所有数据存储在同一个集合中,并且可以轻松地从该源读取并获取所需的所有数据。

但是,对于需要大量写入(每秒大约 10,000 次写入)的这种规模的应用程序,使用 NoSQL 选项并不是一个好主意,因为它需要将相同的数据写入多个位置。在这种情况下,所有表上都存在关系,一个位置更新的数据不需要您将相同的数据重复写入多个位置,而是更新现有的关系。当然,这并不意味着这些数据库中的每一个都无法扩展。

缩放

让我们看看缩放是如何工作的。

SQL

SQL DB 不能水平扩展,只能垂直扩展。这究竟意味着什么?

水平扩展是指将数据从一个数据库拆分到多个数据库以减少负载。然而,由于其严格的性质,SQL 数据不能拆分到单独的 DB 中。要扩展SQL DB,需要适当增加现有DB服务器的CPU、内存和磁盘空间,这意味着垂直扩展。

水平缩放
水平缩放
水平缩放

垂直缩放


NoSQL

NoSQL DB 可以水平和垂直扩展。这是由于数据存储的灵活性。因此,这允许您将数据拆分到多个数据库中,类似于水平扩展。如果需要,您还可以垂直缩放它。

这里需要注意的重要一点是,在扩展方面,SQL 和 NoSQL 数据库都可以有效地扩展。然而,对于 SQL DB,垂直扩展可能是一个限制。单个数据库服务器可以拥有的计算能力是有限的。

这里还需要注意的是,您构建的大多数应用程序可能无法达到服务器的最大计算能力,但记住这一点会很有帮助。然而,对于实现 SQL 的大型业务应用程序,分片是克服此限制的流行选项。

什么是分片?

分片是将大表划分为更小的块(称为分片)的过程。可以通过水平分区数据库来执行分片。不要将其与水平和垂直缩放混淆。水平分区是指将表的行存储在多个数据库节点上的过程。另一方面,垂直分区要求表的列存储在不同的节点上。这使您可以有效地扩展数据库并提高性能。

数据库示例

SQL

  • MySQL – 一种非常流行的开源数据库。然而,很明显,许多 PHP 开发人员选择的数据库也适用于 Node.js、C#、C++、Java、Perl、Ruby 和 Python。
  • MSSQL – Microsoft SQL 是直接由 Microsoft 开发的,因此它提供了很大的稳定性并在灾难恢复方面提供了一些支持。
  • MariaDB – 这是由 MySQL 的创建者在 MySQL 之上构建的,旨在使 MariaDB 成为永久免费版本。
  • PostgresSQL – 一个非常流行的开源数据库。我们为成为世界上最先进的开源数据库而感到自豪
  • Oracle – 这通常是针对 Oracle 的企业解决方案量身定制的,但免费版本有一些限制。

NoSQL

  • MongoDB – 可能是最著名的 NoSQL DB,在使用 MERN 堆栈(MongoDB、Express、React、Node)或 MEAN 堆栈(MongoDB、Express、Angular、Node)的应用程序开发人员中很受欢迎。
  • Firebase – 于 2011 年推出,2014 年被 Google 收购,并被 Web 和移动应用程序开发人员广泛使用。
  • Apache Couch DB – 一种基于文档的 NoSQL DB,将数据存储为 JSON。
  • Redis:这是一个 NoSQL 数据库,最著名的可能是它用于存储具有可选生命周期的数据。它还以速度快而闻名。

结论

您可以使用 SQL 或 NoSQL 数据库创建各种应用程序。这取决于您的要求。如果您正在考虑一个读重和写重的数据库,NoSQL 可能是一个不错的选择。但是,如果您希望构建一个编写次数多于阅读次数的应用程序,那么 SQL 可能是更好的解决方案。关于可扩展性,如果您的应用程序变得非常大,您最终可能会使用这两个数据库。

对“SQL 与 NoSQL – 您的下一个项目应该使用哪一个?”的简单易懂的解释您必须观看的最佳 2 个视频

新しいプロジェクトには SQL か NoSQL か?
https://www.youtube.com/watch?v=y7nYSfIfgcA&pp=ugMICgJqYRABGAHKBV0gU1FMIOOBqCBOb1NRTCAtIOasoeOBruODl-ODreOCuOOCp-OCr-ODiOOBq-OBr-OBqeOBoeOCieOCkuS9v-eUqOOBmeOCi-OBueOBjeOBp-OBmeOBiz8maGw9SkE %3D
NoSQLとは何か【メリット・デメリットなどポイントを11分で解説】
https://www.youtube.com/watch?v=4M4bh_sdT48&pp=ygVdIFNRTCDjgaggTm9TUUwgLSDmrKHjga7jg5fjg63jgrjjgqfjgq_jg4jjgavjga_jganjgaHjgonjgpLkvb_nlKjjgZnjgovjgbnjgY3jgafjgZnjg _JmhsPUbB

最常见的问题之一是我应该使用哪个数据库?

SQL 代表结构化查询语言。 NoSQL 数据库最初由 IBM 研究人员团队于 20 世纪 70 年代开发。另一方面,NoSQL 数据库由 Carlo Strozzi 于 1998 年首次使用。

这两种数据库 (DB) 系统之间最常见的区别是 SQL 是关系型的,而 NoSQL 是非关系型的。

让我们仔细看看这两个数据库,以便您下次考虑为项目选择数据库时更好地了解情况。

SQL 与 NoSQL - 您的下一个项目应该使用哪一个?
SQL 与 NoSQL – 您的下一个项目应该使用哪一个?

数据库结构

我们来谈谈结构。

SQL

SQL数据库具有清晰的模式结构。

架构包含表,每个表包含一定数量的列。这意味着用户更新表的列数不能超过为表指定的列数。当您需要维护数据完整性或检查数据库中存储的数据类型时,这尤其有用。

SQL 数据库中的每个表都可以关联。换句话说,您可以在表之间创建关系。这些关系可以是一对多、多对多或一对一。您实施的关系类型取决于您的需要。

例如,考虑一个假设的情况。我有一个用户和一个公司,用户可以订购产品。然后,您可以决定用户可以创建多个订单,但只有一个用户可以创建每个订单。这是一种一对多的关系:一个用户和多个订单。因此两个表的表结构如下:

数据库可以包含具有以下结构的用户表:

 users_table
----------------------------------------------------
id          |          name       |           email
-----------------------------------------------------
1                    Idris              idris@idrislawal.com

您还可以创建订单表

orders_table
---------------------------------------------------------------------------------
id                   |             user_id             |             order_number
---------------------------------------------------------------------------------
1                                      1                               20000001

订单表user_id允许您轻松地将订单表中的每个订单映射到其所属的用户。对于一对一关系,如果您决定通过关联的订单 ID 检索用户,则users_table还可以包含order_id

多对多情况通常涉及一个称为数据透视表的附加表。这允许您将多个记录相互映射。使用上面的例子。我们会这样做,

 users_table
-------------------------------------------------------------------------------------
id               |                    name                   |                  email
-------------------------------------------------------------------------------------
1                               Idris                             idris@idrislawal.com

订单表看起来像这样

orders_table
---------------------------------------------------------
id                      |                    order_number
---------------------------------------------------------
1                                             2000001

然后,数据透视表将两个 ID 作为外键保存。

 users_orders_table
------------------------------------------------------------------------------
id               |                  order_id              |           user_id
------------------------------------------------------------------------------
1                                     1                                 1

基于 SQL 提供的这一结构,您可以轻松地在表之间创建联接,这些联接提供来自在一个查询中联接的不同表的数据。

SQL 与 NoSQL - 您的下一个项目应该使用哪一个?
SQL 与 NoSQL – 您的下一个项目应该使用哪一个?

NoSQL

NoSQL数据库比 SQL 数据库更灵活,并且还可以包含大量数据。

NoSQL 数据库没有预定义的架构或表。我有收藏,每个收藏都有文档。这允许数据在接收时以不同的格式保存。您可以选择在一个集合中包含具有不同字段的多个不同文档。还可以手动建立集合之间的关系。然而,它不适合这样的目的。相反,您可以将单个查询所需的所有内容存储在同一个集合中。

如果您是 SQL 人员,您可能会将集合视为表,将文档视为包含表的行。但是,对于可以添加到表中的数据列没有限制。

返回到您公司的虚拟实例,其中包含您之前定义的用户和订单。

用户集合可以定义如下:

 {id: 1, name: 'idris', email: 'idris@idrislawal.com'}

Orders 集合可以这样定义:

 {id: 1, order_number: 2000001, user_id:1}

但是,在这种情况下,我不想手动组合两个集合(在这种情况下,我不应该这样做)。您可以将最常阅读的条目保存到集合中。我决定将其设为 Orders 集合(在本例中)。

 {id:1, order_number:200001, user{id:1, name: 'idris', email:'idris@idrislawal.com'}}

在这种情况下,您不再需要从 Users 集合中读取,只需从 Orders 集合中读取。它现在包含您需要的所有数据。

这里需要注意的重要一点是:如果您正在构建一个读取次数多于写入次数的应用程序,那么 NoSQL 选项可能更适合。因为您可以将所有数据存储在同一个集合中,并且可以轻松地从该源读取并获取所需的所有数据。

但是,对于需要大量写入(每秒大约 10,000 次写入)的这种规模的应用程序,使用 NoSQL 选项并不是一个好主意,因为它需要将相同的数据写入多个位置。在这种情况下,所有表上都存在关系,一个位置更新的数据不需要您将相同的数据重复写入多个位置,而是更新现有的关系。当然,这并不意味着这些数据库中的每一个都无法扩展。

缩放

让我们看看缩放是如何工作的。

SQL

SQL DB 不能水平扩展,只能垂直扩展。这究竟意味着什么?

水平扩展是指将数据从一个数据库拆分到多个数据库以减少负载。然而,由于其严格的性质,SQL 数据不能拆分到单独的 DB 中。要扩展SQL DB,需要适当增加现有DB服务器的CPU、内存和磁盘空间,这意味着垂直扩展。

水平缩放
水平缩放
水平缩放

垂直缩放


NoSQL

NoSQL DB 可以水平和垂直扩展。这是由于数据存储的灵活性。因此,这允许您将数据拆分到多个数据库中,类似于水平扩展。如果需要,您还可以垂直缩放它。

这里需要注意的重要一点是,在扩展方面,SQL 和 NoSQL 数据库都可以有效地扩展。然而,对于 SQL DB,垂直扩展可能是一个限制。单个数据库服务器可以拥有的计算能力是有限的。

这里还需要注意的是,您构建的大多数应用程序可能无法达到服务器的最大计算能力,但记住这一点会很有帮助。然而,对于实现 SQL 的大型业务应用程序,分片是克服此限制的流行选项。

什么是分片?

分片是将大表划分为更小的块(称为分片)的过程。可以通过水平分区数据库来执行分片。不要将其与水平和垂直缩放混淆。水平分区是指将表的行存储在多个数据库节点上的过程。另一方面,垂直分区要求表的列存储在不同的节点上。这使您可以有效地扩展数据库并提高性能。

数据库示例

SQL

  • MySQL – 一种非常流行的开源数据库。然而,很明显,许多 PHP 开发人员选择的数据库也适用于 Node.js、C#、C++、Java、Perl、Ruby 和 Python。
  • MSSQL – Microsoft SQL 是直接由 Microsoft 开发的,因此它提供了很大的稳定性并在灾难恢复方面提供了一些支持。
  • MariaDB – 这是由 MySQL 的创建者在 MySQL 之上构建的,旨在使 MariaDB 成为永久免费版本。
  • PostgresSQL – 一个非常流行的开源数据库。我们为成为世界上最先进的开源数据库而感到自豪
  • Oracle – 这通常是针对 Oracle 的企业解决方案量身定制的,但免费版本有一些限制。

NoSQL

  • MongoDB – 可能是最著名的 NoSQL DB,在使用 MERN 堆栈(MongoDB、Express、React、Node)或 MEAN 堆栈(MongoDB、Express、Angular、Node)的应用程序开发人员中很受欢迎。
  • Firebase – 于 2011 年推出,2014 年被 Google 收购,并被 Web 和移动应用程序开发人员广泛使用。
  • Apache Couch DB – 一种基于文档的 NoSQL DB,将数据存储为 JSON。
  • Redis:这是一个 NoSQL 数据库,最著名的可能是它用于存储具有可选生命周期的数据。它还以速度快而闻名。

结论

您可以使用 SQL 或 NoSQL 数据库创建各种应用程序。这取决于您的要求。如果您正在考虑一个读重和写重的数据库,NoSQL 可能是一个不错的选择。但是,如果您希望构建一个编写次数多于阅读次数的应用程序,那么 SQL 可能是更好的解决方案。关于可扩展性,如果您的应用程序变得非常大,您最终可能会使用这两个数据库。

对“SQL 与 NoSQL – 您的下一个项目应该使用哪一个?”的简单易懂的解释您必须观看的最佳 2 个视频

新しいプロジェクトには SQL か NoSQL か?
https://www.youtube.com/watch?v=y7nYSfIfgcA&pp=ugMICgJqYRABGAHKBV0gU1FMIOOBqCBOb1NRTCAtIOasoeOBruODl-ODreOCuOOCp-OCr-ODiOOBq-OBr-OBqeOBoeOCieOCkuS9v-eUqOOBmeOCi-OBueOBjeOBp-OBmeOBiz8maGw9SkE %3D
NoSQLとは何か【メリット・デメリットなどポイントを11分で解説】
https://www.youtube.com/watch?v=4M4bh_sdT48&pp=ygVdIFNRTCDjgaggTm9TUUwgLSDmrKHjga7jg5fjg63jgrjjgqfjgq_jg4jjgavjga_jganjgaHjgonjgpLkvb_nlKjjgZnjgovjgbnjgY3jgafjgZnjg _JmhsPUbB