数据是数据科学所有子领域的基础。无论您要建造的产品用途如何,都需要获取和分析数据。通常,您需要的这些数据存储在DBMS(数据库管理系统)中。

要与DBMS进行交互和通信,您需要使用其语言或它可以理解的语言。与DBMS进行交互的语言是SQL(结构化查询语言)。

近年来,在数据库领域出现了另一个术语,即NoSQL数据库。如果您刚开始学习数据科学,则可能听说过SQL和NoSQL数据库。

但是,它们之间有什么区别以及何时使用它们?

让我们从最简单的知识开始,为什么我们有两种与数据库交互的方法?

简单来说,SQL和NoSQL与不同类型的数据库交互,SQL是用于与关系数据库进行交互的方法,而NoSQL用于与非关系型数据库进行交互。

关系数据库

数据存储在关系数据库的不同表中,每个表包含多个记录 (行),这些表使用一种或多种关系相互连接。

键定义表之间的关系。键是表字段(列),其中包含每个记录的唯一值。如果将字段定义为表的主键,则该字段可以包含在多个表中,并且可以用于同时访问不同的表。一旦使用了主键,并将其表连接到另一个表,在另一个表中将其称为外键。

例如,下图显示了航空公司数据库的一部分。我们有两个表,飞行员表和航班表。这两个表已连接,用作飞行员表“PilotId”中的主键。我可以使用飞行员的ID来访问飞行员表中有关飞行员的信息,以及该飞行员正在处理的航班。

SQL和NoSQL sql和nosql要一起用吗_数据

因此,在飞行员表中,PoilotId是主键,而在Flights表中则是外键。 PilotId在这里用于形成两个表之间的关系。

非关系数据库

与关系数据库不同,非关系数据库(NoSQL数据库)不在表和记录中存储数据。

在非关系型数据库中,针对特定要求设计和优化了数据存储结构。

与关系型数据库使用SQL查询语言不同,NoSQL数据库使用对象关系映射(ORM)来促进与其数据的通信。

NoSQL数据库有四种流行类型:面向列,面向文档,键值对和图形数据库。这些类型可以单独使用或组合使用,选择将取决于您的应用程序和需要存储的数据类型。

1. 面向列(Column-oriented)的数据库

顾名思义,在面向列的数据库中,数据被存储并组织为列。如果您需要存储稀疏数据,则这种类型的数据库很有用。稀疏数据更趋向于面向列的数据组织方法。

2. 面向文档(Document-oriented)的数据库

在面向文档的数据库中,排序的数据的结构不需要严格。它实际上是文档结构中字段和数据值的集合。这些面向文档的数据库通常存储为JSON字符串,并且可以使用YAML,XML或纯文本进行编码以保护数据。

使用面向文档的数据库的好处是,您不必使所有文档都使用相同的结构。这使开发人员可以自由地对同一数据库中的不同数据类型进行排序。在Python中,MongoDB是面向文档的数据库的最佳示例。

3. 键值(key-value)数据库

如果您熟悉Python,则可以将键值数据库理解为Python字典。数据库中的每个数据对象都将存储为一对键和值。

4. 图形数据库

当数据高度互连时,您将需要使用一个数据库来有效地处理数据关系。图形数据库被认为是NoSQL数据库中最复杂的数据库。但是,它非常通用,适合许多应用场景。

SQL和NoSQL sql和nosql要一起用吗_SQL和NoSQL_02

如何在SQL和NoSQL之间选择?

那么,我们如何在SQL和NoSQL数据库之间进行选择?

为了回答这个问题,您需要考虑四个方面:灵活性,可伸缩性,一致性和可用技术。

  1. 灵活性: 当您的数据具有不同的结构和不同的类型时,NoSQL数据库为您提供了更多自由来设计架构并在同一数据库中存储不同类型的数据。另一方面,SQL数据库具有更严格的结构和架构。
  2. 可扩展性: 您见过日本的停车场电梯吗?它允许将车停在另一辆车的上方而不是旁边。现在,我想问你一个问题,建造更多电梯可以到达的楼层或者建造更多的电梯,哪个更有效?SQL数据库是垂直伸缩的,这意味着您可以向其添加级别以增加其负载。NoSQL数据库是水平伸缩,您可以通过将工作划分到多个服务器上来增加其负载。
  3. 一致性:SQL数据库具有高度一致的设计,NoSQL数据库可以一致也可以不一致。例如,MongoDB是一致的,而Cassandra之类的数据库则不是。
  4. 可用技术:您可能会考虑的一个方面是数据库技术的当前发展阶段。由于SQL数据库已经存在了很长时间,因此它比NoSQL数据库更加发达。因此,对于初学者来说,从SQL开始然后过渡到NoSQL可能是最佳选择。

根据经验,如果您要使用RDBMS(关系数据库管理系统),要分析数据的行为或要构建自定义的仪表盘,则SQL是更好的选择。而且,SQL通常允许更快的数据存储和恢复,并且可以处理更加复杂的查询。

如果您想扩展RDBMS的标准结构,或者需要创建一个灵活的架构,NoSQL将是更好的选择。当您存储的数据和日志记录来自分布式节点时,或者只需要临时缓存数据,NoSQL数据库会更好。

结论

我不能说SQL绝对比NoSQL更好,它们都有自己的优点和缺点,您应该根据要开发的产品和处理的数据结构,选择最适合的工具。

SQL数据库较旧,因此需要进行更多的研究和建立更稳健的模式设计;NoSQL数据库具有灵活的架构,它们易于扩展,灵活且相对易于使用。

那么,您的数据要求是什么?您的数据结构合理吗?您正在处理大量数据吗?始终聆听您的数据,您将做出正确的选择。


作者:Sara A. Metwalli
原文标题:Databases 101: SQL vs. NoSQL: Which Fits Your Data Better?