公告推出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。以下是一个宽列存储中数据存储的典型例子

nameidemaildobcity
Foo bar12345[email protected]Some city
Carn Yale34521[email protected]12-05-1972

图数据库

图数据库以节点和边的形式存储数据。节点通常存储有关人、地点和事物(如名词)的信息,而边存储有关节点之间关系的信

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: RDBMS使用表格数据结构,数据以行和列的集合形式表示,使模型适合结构化数据。

模式

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

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

查询语言

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

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

可伸缩性

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

RDBMS: 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查询教程

您可以以MongoDB为例开始,根据DB-Engines,它是世界上最受欢迎的NoSQL数据库。开始使用MongoDB的最简单方法是MongoDB Atlas。Atlas是MongoDB的完全托管数据库服务。Atlas有一个永久免费的级别,您可以用它来尝试。查看MongoDB Atlas教程以开始。

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

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

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

总结

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

MongoDB是全球最受欢迎的NoSQL数据库。了解更多关于MongoDB Atlas的信息,并尝试免费的层级。

现在你已经拥有了自己的Atlas账户,想了解更多吗?请访问MongoDB大学,在那里你可以从MongoDB工程师那里获得免费的在线培训,并获得MongoDB认证。《快速入门》也是开始的好地方;它们将帮助你快速入门你最喜欢的编程语言。

常见问题解答

NoSQL的优势是什么?

许多NoSQL数据库具有以下优势

什么是最终一致性?
最终一致性是分布式数据库的一个属性。最终一致性确保了对数据库的更新最终会在分布式数据库的所有节点上反映出来。
什么是CAP定理?
CAP定理表明,分布式计算系统最多只能提供以下三个属性中的两个:consistency(一致性)、availability(可用性)和

partition tolerance(分区容错性)。

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数据库。MongoDB,全球最受欢迎的NoSQL数据库,可以使用MongoDB查询语言(MQL)进行查询。
NoSQL有模式吗?
NoSQL数据库通常具有灵活的模式。请注意,某些NoSQL数据库(如MongoDB)也支持模式验证,因此当开发人员准备好时,可以根据需要将模式锁定得多或少。

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

了解更多关于NoSQL与SQL数据库之间关键差异的信息NoSQL与SQL数据库

了解更多

跟随MongoDB Atlas本教程

在云上使用MongoDB,领先的NoSQL数据库,体验其益处。
免费开始!