公告推出MongoDB 8.0,史上最快的MongoDB!阅读更多 >>推出MongoDB 8.0,史上最快的MongoDB!>>

什么是NoSQL?

免费启动NoSQL集群
使用Atlas尝试NoSQL数据库
什么是NoSQL?

NoSQL数据库(又称“非SQL”)以不同于关系表的方式存储数据。根据其数据模型,NoSQL数据库有多种类型。主要类型包括文档型、键值、宽列和图。它们提供灵活的模式,并易于扩展以适应大量大数据和高用户负载。

在这篇文章中,你将了解什么是NoSQL数据库,为什么(以及何时!)你应该使用它,以及如何开始使用。

目录
什么是NoSQL数据库?

当人们使用“NoSQL数据库”这个术语时,他们通常指的是任何非关系型数据库。有人说“NoSQL”代表“非SQL”,而另一些人说它代表“不仅限于SQL”。无论如何,大多数人同意NoSQL数据库以更自然和灵活的方式存储数据。与SQL相比,NoSQL是一种数据库管理方法,而SQL只是一种查询语言,类似于NoSQL数据库的查询语言。

数据库类型 — NoSQL

随着时间的推移,已出现四种主要的NoSQL数据库类型:文档数据库、键值数据库、宽列存储和图数据库。如今,多模型数据库也变得越来越受欢迎。

面向文档的数据库

面向文档的数据库存储数据的方式类似于JSON(JavaScript对象表示法)对象。每个文档包含字段和值的对。值通常可以是多种类型,包括字符串、数字、布尔值、数组,甚至是其他对象。文档数据库提供灵活的数据模型,非常适合半结构化和通常非结构化的数据集。它们还支持嵌套结构,这使得表示复杂关系或层次数据变得容易。

文档数据库的例子有 MongoDB 和 Couchbase。一个典型的文档可能看起来像以下这样

键值数据库

键值存储是一种更简单的数据库类型,其中每个项目包含键和值。每个键都是唯一的,并关联一个单一值。它们用于缓存和会话管理,由于它们通常存储在内存中,因此在读写方面提供高性能。例如,Amazon DynamoDB 和 Redis。以下是一个键值数据库中存储数据的简单视图

宽列存储

宽列存储在表格、行和动态列中存储数据。数据存储在表中。然而,与传统SQL数据库不同,宽列存储是灵活的,不同的行可以有不同的列集。这些数据库可以采用列压缩技术来减少存储空间并提高性能。宽行和列可以有效地检索稀疏和宽数据。宽列存储的例子有 Apache Cassandra 和 HBase。以下是如何在宽列中存储数据的典型例子

姓名id电子邮件出生日期城市
Foo bar12345[email protected]某个城市
Carn Yale34521[email protected]12-05-1972

图数据库

图数据库以节点和边的形式存储数据。节点通常存储有关人物、地点和事物(如名词)的信息,而边存储节点之间的关系信息。它们适用于高度连接的数据,其中关系或模式可能一开始并不明显。图数据库的例子有 Neo4J 和 Amazon Neptune。MongoDB 也使用聚合管道的 $graphLookup 阶段提供图形遍历功能。以下是如何存储数据的例子

Graph databases example.
多模型数据库

多模型数据库支持多种NoSQL数据模型,以便开发人员可以根据其应用需求进行选择。这些数据库有一个统一的数据库引擎,可以在数据库实例内处理多个数据模型。例子有 CosmosDB 和 ArangoDB。

NoSQL数据库类型快速比较

每个NoSQL数据库都提供不同的功能。例如,图数据库可能更适合分析实体之间的复杂关系和模式,而文档数据库则提供更灵活、自然的方式来存储和检索大量类似文档类型的数据。数据库的选择取决于您想要开发的使用案例。

Comparison of types of NoSQL databases.

了解更多,请阅读了解不同的NoSQL数据库类型.

NoSQL数据库的简短历史

NoSQL数据库在2000年代后期出现,因为存储成本大幅下降。不再需要创建复杂的、难以管理的数据模型来避免数据重复。NoSQL数据库优化了开发人员的生产力。

随着存储成本的迅速下降,应用程序需要存储和查询的数据量增加。这些数据形状和大小各异——结构化、半结构化和非结构化 — 在事先定义模式变得几乎不可能。NoSQL数据库允许开发者存储大量非结构化数据,给他们提供了很大的灵活性。
Brief history of NoSQL databases.

在21世纪初,谷歌发布了一篇关于BigTable(一个宽列数据库)的论文,探讨了分布式存储系统的广泛可能性。2009年,NoSQL数据库迎来了重大增长,其中MongoDB和CouchDB这两种关键文档数据库浮出水面。

到了2010年代,各种类型的NoSQL数据库出现,NoSQL的接受度变得普遍,企业变得更加数据驱动。

此外,敏捷宣言越来越受欢迎,软件工程师重新思考他们开发软件的方式。他们必须迅速适应不断变化的需求,快速迭代,并在软件堆栈的各个层级进行更改——一直到数据库。NoSQL数据库为他们提供了这种灵活性。

云计算也越来越受欢迎,开发者开始使用公有云托管他们的应用程序和数据。他们希望能够在多个服务器和地区之间分配数据,使他们的应用程序具有弹性,横向扩展而不是纵向扩展,并智能地地理定位他们的数据。一些NoSQL数据库,如MongoDB Atlas,提供了这些功能。

由于数字化指数级增长,企业现在尽可能收集非结构化数据。为了能够分析并从这样的实时洞察中得出可操作的信息,企业需要超越简单存储的现代解决方案。企业需要一个能够轻松扩展转换可视化数据的平台;创建仪表板、报告和图表;并与人工智能和商业智能工具合作,以提高业务生产力。由于它们的灵活性和分布式特性,NoSQL数据库(例如MongoDB)在这些任务中表现出色。

NoSQL数据库特性

NoSQL数据库是灵活、可扩展和分布式数据库。不同类型的NoSQL数据库有其独特的特性。

NoSQL features illustration.

从高层次来看,NoSQL数据库通常具有以下特性

BASE一致性

NoSQL数据库符合BASE一致性,即基本可用性、软状态和最终一致性。基本可用性是指系统容忍部分故障(如节点丢失)的能力。软状态意味着系统在最终自动达到一致性之前允许暂时的不一致性。BASE一致性确保了高可用性、更快的数据处理、可扩展性和灵活性。然而,MongoDB也可以配置为提供多文档ACID一致性

了解更多关于NoSQL数据库的优势

关系型数据库与NoSQL数据库示例

让我们考虑一个存储用户及其爱好信息的示例。我们需要存储用户的姓名、姓氏、手机号码、城市和爱好。

在关系型数据库管理系统(RDBMS)中,我们可能会创建两个表:一个用于用户,一个用于爱好。

为了检索关于用户及其爱好的所有信息,需要将用户表和爱好表中的信息联合起来。

为NoSQL数据库设计的数据库模型将取决于我们选择的NoSQL数据库类型。让我们考虑如何在MongoDB这样的文档数据库中存储有关用户及其爱好相同的信息。

为了检索有关用户及其爱好的所有信息,可以从数据库中检索一个文档。不需要进行连接,从而实现更快的查询。

RDBMS vs NoSQL (Document)

要查看此数据建模示例的更详细版本,请阅读从SQL到MongoDB的术语和概念映射.

关系数据库管理系统(RDBMS)与NoSQL数据库之间的区别

关系型数据库管理系统和非关系型数据库之间存在许多差异。其中之一是数据库中数据建模的方式。以下是每个功能的某些关键差异:

数据建模

NoSQL:数据模型根据所使用的NoSQL数据库类型而变化——例如,键值、文档、图和宽列——使模型适用于半结构化和非结构化数据。

RDBMS:关系数据库管理系统使用表格数据结构,数据以行和列的集合表示,使模型适用于结构化数据。

模式

NoSQL:它提供了一种灵活的模式,其中每个文档/行-列/键-值对集合可以包含不同类型的数据。由于灵活性,如果需要,更容易更改模式。

RDBMS:这是一个固定模式,其中每行都应该包含预定义的列类型。数据存储后,很难更改模式。

查询语言

NoSQL:它根据所使用的NoSQL数据库类型而变化。例如,MongoDB有MQL,而Neo4J使用Cypher。

RDBMS:这使用结构化查询语言(SQL)。

可伸缩性

NoSQL:NoSQL旨在进行垂直和水平扩展。

RDBMS:关系数据库管理系统旨在进行垂直扩展。然而,它可以扩展有限的能力以进行水平扩展。

数据关系

NoSQL:关系可以是嵌套的、显式的或隐式的。

RDBMS:关系通过外键定义并通过连接访问。

事务类型

NoSQL:事务可以是ACID-或BASE兼容的。

RDBMS:事务是ACID兼容的。

性能

NoSQL: NoSQL适用于实时处理、大数据分析和分布式环境。

关系数据库管理系统(RDBMS): RDBMS适用于读写密集型和事务型工作负载。

数据一致性

NoSQL: 这提供了高数据一致性。

RDBMS: 在大多数情况下,这提供最终一致性。

分布式计算

NoSQL: 引入NoSQL的一个主要原因是分布式计算,NoSQL数据库支持分布式数据存储,通过分片、复制和集群实现垂直和水平扩展。

RDBMS: RDBMS通过集群和复制支持分布式计算。然而,由于其传统上并未设计用于支持分布式架构,因此其可扩展性和灵活性较低。

容错性

NoSQL: 由于数据复制,NoSQL具有内置的容错性和高可用性。

RDBMS: RDBMS使用复制、备份和恢复机制。然而,由于它们是为这些而设计的,因此可能需要在应用程序开发期间实施额外的措施,例如灾难恢复机制。

数据分区

NoSQL: 这通过分片和复制完成。

RDBMS: 它支持基于表的分区和分区剪枝。

了解更多关于数据分区的信息。

数据到对象映射

NoSQL: NoSQL以多种方式存储数据——例如,作为JSON文档、宽列存储或键值对。它通过ODM(对象-数据映射)框架提供抽象,以便以面向对象的方式处理NoSQL数据。

RDBMS: RDBMS更依赖于数据到对象映射,以便数据库列和面向对象的应用程序代码之间无缝集成。

了解更多关于关系数据库和NoSQL数据库之间差异的信息,请阅读NoSQL与SQL数据库的差异

NoSQL用例

几乎在每一个行业中,都使用了NoSQL数据库系统,用于实时分析、内容管理、物联网应用、推荐系统、欺诈检测、产品目录管理等等。用例范围从高度关键的(例如,存储金融数据医疗记录)到更有趣和轻松的(例如,存储智能猫砂盆的物联网读数)。

何时应该使用NoSQL?

在决定使用哪种数据库时,决策者通常会找到以下一个或多个因素,这些因素导致他们选择NoSQL数据库

  • 快速敏捷开发
  • 存储结构化和半结构化数据
  • 大量数据
  • 对横向扩展架构的要求
  • 现代应用范式,如微服务和实时流

有关上述原因的更多详细信息,请参阅何时使用NoSQL数据库探索NoSQL数据库示例

NoSQL数据库的误解

多年来,许多关于NoSQL数据库的误解在开发社区中传播开来。在本节中,我们将讨论两个最常见的误解。

误解:关系数据最适合关系数据库

一个常见的误解是NoSQL数据库或非关系数据库不擅长存储关系数据。NoSQL数据库可以存储关系数据——它们只是以不同于关系数据库的方式存储。

实际上,当与关系数据库相比时,许多人发现,在NoSQL数据库中建模关系数据比在关系数据库中更容易,因为相关数据不需要在表之间分割。NoSQL数据模型允许将相关数据嵌套在单一数据结构中。

误解:NoSQL数据库不支持ACID事务

另一个常见的误解是NoSQL数据库不支持ACID事务。一些NoSQL数据库,如MongoDB,实际上确实支持ACID事务

请注意,在NoSQL数据库中数据建模的方式可以消除许多用例中多记录事务的需求。考虑我们之前提到的示例,我们同时在关系模型和文档存储中存储了有关用户及其爱好的信息。为了确保在关系数据库中用户及其爱好的信息一起更新,我们需要使用事务来更新两个表中的记录。在文档存储中完成同样的事情,我们可以更新单个文档——无需多记录事务。

要了解更多关于常见误解的信息,请阅读关于MongoDB你所知道的一切都是错误的

NoSQL查询教程

根据DB-Engines,您可以从MongoDB开始,这是世界上最流行的NoSQL数据库。开始使用MongoDB最简单的方法是MongoDB Atlas。Atlas是MongoDB的全托管数据库服务。Atlas提供永久免费的级别,您可以用它来尝试。查看MongoDB Atlas教程以开始学习。

您可以通过使用Atlas数据探索器来插入新文档、编辑现有文档和删除文档,继续与您的数据进行交互。

当您准备好尝试更高级的查询来聚合您的数据时,创建一个聚合管道。聚合框架是分析您数据的强大工具。要了解更多信息,请参加免费的MongoDB大学课程M121 MongoDB聚合框架

当您想可视化数据时,请查看MongoDB Charts。图表允许您创建包含数据可视化的仪表板。

总结

NoSQL数据库提供了多种好处,包括灵活的数据模型、横向扩展、闪电般的查询速度以及开发者使用简便。NoSQL数据库有多种类型,包括文档存储、键值数据库、宽列存储、图数据库和多模型数据库。

MongoDB是世界上最流行的NoSQL数据库。了解MongoDB Atlas的更多信息,并尝试免费级别。

现在您有了自己的Atlas账户,想要学习更多吗?前往MongoDB大学,在那里您可以免费接受MongoDB工程师的在线培训,并获得MongoDB认证。《快速入门》是另一个很好的开始点;它们将帮助您快速使用您喜欢的编程语言开始。

常见问题解答

NoSQL的优点是什么?

许多NoSQL数据库具有以下优点:

什么是最终一致性?
最终一致性是分布式数据库的一个属性。最终一致性确保当对数据库进行更新时,最终,分布式数据库中的所有节点都将反映该更新。
什么是CAP定理?
CAP定理指出,分布式计算系统最多只能同时提供以下三个特性中的两个:一致性可用性分区容错性
NoSQL数据库用于什么?

NoSQL数据库在几乎所有行业中都用于各种使用场景

NoSQL数据库的类型决定了其典型使用场景。例如,MongoDB这样的文档数据库是通用数据库。键值数据库适用于大量简单查找查询的数据。宽列存储适用于大量数据且查询模式可预测的使用场景。图数据库擅长分析和遍历数据之间的关系。有关更多信息,请参阅了解不同类型的NoSQL数据库

什么是NoSQL数据库?
NoSQL数据库是一种以非关系表格式存储数据的数据库。
如何编写NoSQL查询?

每个NoSQL数据库都有自己的查询方法。请访问MongoDB的交互式文档,了解更多关于如何查询MongoDB数据库的信息。

NoSQL难学吗?

不,NoSQL数据库不难学。事实上,许多开发者发现,在NoSQL数据库中建模数据非常直观。例如,MongoDB中的文档映射到最流行的编程语言中的数据结构,这使得编程更快、更简单。

请注意,那些在关系数据库方面有培训和经验的人,在适应NoSQL数据库中新的数据建模方式时可能会遇到一些学习曲线。

JSON是NoSQL吗?
文档数据库是NoSQL数据库的一种,它以JSON或BSON文档的形式存储数据。
用于查询NoSQL的语言是什么?
NoSQL数据库跨越了多种类型和实现。因此,可以使用许多查询语言和API来查询NoSQL数据库。作为世界上最受欢迎的NoSQL数据库,MongoDB可以使用MongoDB查询语言(MQL)进行查询。
NoSQL有模式吗?
NoSQL数据库通常具有灵活的模式。请注意,某些NoSQL数据库(如MongoDB)也支持模式验证,因此开发者在准备好时可以锁定他们想要的模式程度。

本文由Lauren Schaefer,MongoDB 开发者倡导者。

了解更多关于 NoSQL 和 SQL 数据库之间的关键区别NoSQL 与 SQL 数据库

了解更多

跟随 MongoDB Atlas 的教程

体验使用 MongoDB(领先的 NoSQL 数据库)在云端的益处。
免费开始!