什么是 NoSQL 数据库?
NoSQL 数据库专为特定数据模型而构建,并以灵活的模式存储数据,这些模式可以轻松扩展以适应现代应用程序。NoSQL 数据库因其易于大规模开发、强大的功能和良好的性能而被广泛认可。本页面包含的资源可帮助您更好地了解 NoSQL 数据库并开始使用。
NoSQL 数据库的优点
现代应用程序面临着一些挑战,而这些挑战可以通过 NoSQL 数据库解决。例如,应用程序需要处理来自社交媒体、智能传感器和第三方数据库等不同来源的大量数据。所有这些不同的数据都无法完全融入关系模型。强制使用表格结构可能会导致大规模的冗余、数据重复和性能问题。
NoSQL 数据库专为非关系数据模型而构建,并且具有构建现代化应用程序的灵活架构。该数据库因其易于大规模开发、强大的功能和良好的性能而获得广泛认可。下面列出了 NoSQL 数据库的优点。
灵活性
NoSQL 数据库通常提供灵活的架构,可以实现更快速、更多的迭代开发。灵活的数据模型使 NoSQL 数据库成为半结构化和非结构化数据的理想之选。
可扩展性
NoSQL 数据库通常被设计为通过使用分布式硬件集群来横向扩展,而不是通过添加昂贵和强大的服务器来纵向扩展。一些云提供商在后台将这些操作处理为完全托管服务。
高性能
NoSQL 数据库针对特定的数据模型和访问模式进行了优化。与尝试使用关系数据库实现类似功能相比,它们可以实现更高的性能。
功能强大
NoSQL 数据库提供功能强大的 API 和数据类型,专门针对其各自的数据模型而构建。
NoSQL 数据库的使用案例
您可以使用 NoSQL 数据库构建各种高性能移动、物联网(IoT)、游戏和 Web 应用程序,从而大规模提供出色的用户体验。NoSQL 数据库的范围及其各自的使用案例非常广泛。尽管介绍一组具有代表性的使用案例比较难,但我们在下面提供了一些能够启发思路的说明性示例,鼓励您更多地了解每个 NoSQL 数据库及其各自的使用案例。
实时数据管理
您可以使用 NoSQL 数据库进行实时推荐、个性化设置并改善用户体验。例如,Disney+ 使用 NoSQL 数据库技术向超过 1.5 亿订阅用户提供其庞大的数字内容库。它可以通过 Amazon DynamoDB 进行扩展并提供热门功能,例如“继续观看”、“关注列表”和“个性化推荐”。
云安全
您可以使用图形数据库来快速发现数据中的复杂关系。例如,Wiz 使用 Amazon Neptune 将云安全重新构想为图形。Wiz 通过快速识别和修复最严重的风险来帮助客户改善安全状况。他们使用存储在 Amazon Neptune 中的图形模型来揭示代表严重风险的风险因素的毒性组合。Wiz 风险引擎遍历图形,在几秒钟内即可将一系列相互关联的风险因素融入安全图形中。
高可用性应用程序
分布式 NoSQL 数据库非常适合用于构建高可用性、低延迟的消息收发、社交媒体、文件共享等应用程序。例如,Snapchat 有超过 2.9 亿用户,每天发送数十亿张照片和视频消息。它使用 NoSQL 数据库系统将发送消息的延迟中位数降低了 20%。
NoSQL 数据库的工作原理
NoSQL 数据库使用各种数据模型来访问和管理数据。 这些类型的数据库专门针对需要灵活的数据模型、大数据量和低延迟的应用程序进行了优化,这是通过放宽其他关系数据库的某些数据一致性限制来实现的。基于数据模型的实施存在差异。但是,许多 NoSQL 数据库使用 Javascript 对象表示法(JSON),这是一种开放的数据交换格式,将数据表示为名称-值对的集合。
NoSQL 数据库示例
考虑这个为简单的书籍数据库的架构建模的示例:
- 在关系数据库中,书籍记录通常被拆分(或“规范化”)并存储在单独的表中,并且关系由主键和外键约束来定义。在此示例中,书籍表包含 ISBN、书名和版本号列,作者表包含作者 ID 和作者姓名列,作者-ISBN 表包含作者 ID 和 ISBN 列。关系模型旨在使数据库能够在数据库中的表之间强制实施引用完整性,规范化以减少冗余,并且通常针对存储进行优化。
- 在 NoSQL 数据库中,书籍记录通常存储为文档。对于每本书,项目 ISBN、书名、版本号、作者姓名和作者 ID 都作为属性存储在单个文档中。在此模型中,针对直观开发和横向可扩展性对数据进行了优化。
SQL 与NoSQL 术语
下表将精选的 NoSQL 数据库使用的术语与 SQL 数据库使用的术语进行了比较。
SQL | MongoDB | DynamoDB | Cassandra | Couchbase |
---|---|---|---|---|
表 | 集合 | 表 | 表 | 数据存储桶 |
行 | 文档 | 项目 | 行 | 文档 |
列 | 字段 | 属性 | 列 | 字段 |
主键 | 对象 ID | 主键 |
主键 | 文档 ID |
索引 | 索引 | 二级索引 | 索引 | 索引 |
视图 | 视图 | 全局二级索引 | 具体化视图 | 视图 |
嵌套表或对象 | 嵌入文档 | 映射 | 映射 | 映射 |
数组 | 数组 | 列表 | 列表 | 列表 |
NoSQL 数据库的类型
由于管理和存储无架构数据的方式不同,因此存在几种不同的 NoSQL 数据库系统。我们将在下面介绍一些常见的类型。
键值数据库
键值数据库是高度可分区的,并且允许以其他类型的 NoSQL 数据库可能无法实现的规模来进行水平扩展。键值数据库将数据存储为键值对集合,其中键作为唯一标识符。键和值都可以是从简单对象到复杂复合对象的任何内容。诸如游戏、广告技术和 IoT 等使用案例本身特别适合键值存储数据设计。Amazon DynamoDB 旨在为任意规模的工作负载提供稳定的性能和低于 10 毫秒的延迟。
文档数据库
文档数据库的文档模型格式与开发人员在其应用程序代码中使用的格式相同。它们将数据存储为 JSON 对象,这些对象具有灵活、半结构化和分层的性质。文档和文档数据库的灵活、半结构化和层级性质允许它们随应用程序的需求而变化。文档数据库模型可以很好地与目录、用户配置文件和内容管理系统配合使用,其中每个文档都是唯一的,并会随时间而变化。Amazon DocumentDB(与 MongoDB 兼容)和 MongoDB 是流行的文档数据库,提供强大且直观的 API,可实现灵活的迭代开发。
图形数据库
图形数据库旨在轻松构建和运行与高度连接的数据集一起使用的应用程序。它们使用节点来存储数据实体,并使用边缘来存储实体之间的关系。边缘总是有起始节点、终止节点、类型和方向。它可以描述父子关系、操作和所有权等内容。一个节点可以拥有的关系的数量和类型没有限制。您可以使用图形数据库来构建和运行处理高度连接的数据集的应用程序。图形数据库的典型使用案例包括社交网络、推荐引擎、欺诈检测和知识图形。Amazon Neptune 是一项完全托管的图形数据库服务,支持属性图形模型和资源描述框架(RDF),同时提供两种图形 API 选择(TinkerPop 和 RDF/SPARQL)。
内存数据库
其他非关系数据库会将数据存储在磁盘或固态硬盘上,而内存中的数据存储则旨在消除访问磁盘的需求。它们非常适合需要微秒级响应时间或流量峰值较大的应用程序。您可以在游戏和广告技术应用程序中使用它们来实现排行榜、会话存储和实时分析等功能。适用于 Redis 的 Amazon MemoryDB 是一种与 Redis 兼容的持久内存数据库服务,可提供微秒级读取延迟、毫秒级写入延迟和多可用区持久性。Amazon ElastiCache 是一种完全托管式内存缓存服务,与 Redis 和 Memcached 兼容,用于服务低延迟、高吞吐量的工作负载。Amazon DynamoDB Accelerator(DAX)是专用数据存储的另一个示例,它使 DynamoDB 的读取速度提高了一个数量级。
搜索数据库
搜索引擎数据库是一种非关系数据库,专用于搜索数据内容,例如开发人员用于解决问题的应用程序输出日志。它们使用索引对数据中的相似特征进行归类,并且可以提高搜索能力。搜索引擎数据库经过优化,可对图像和视频等非结构化数据进行排序。Amazon OpenSearch Service 旨在通过对半结构化日志和指标建立索引、汇总和搜索来提供机器生成数据的近实时可视化和分析。
NoSQL 和 SQL 数据库之间的区别
几十年来,应用程序开发中的主要数据模型一直是关系数据模型,它将数据存储在由行和列组成的表中。结构化查询语言(SQL)用于创建和编辑这些关系表。 SQL 数据库将数据关系建模为表。表中的行表示一个对象或实体的相关值的集合。表中的每一列代表一个数据属性,字段(或表格单元格)将存储该属性的实际值。您可以使用关系数据库管理系统(RDBMS)以多种不同的方式访问数据,而无需重新组织数据库表本身。
直到 21 世纪中后期,才开始大规模采用和使用其他灵活的数据模型。为了对这些新类别的数据库和数据模型进行区分和分类,创造了术语“NoSQL”。NoSQL 不仅代表 SQL 或非 SQL。通常术语“NoSQL”与“非关系”一词可互换使用。 下表给出了关系数据库和非关系数据库之间的主要区别。
|
关系数据库 |
NoSQL 数据库 |
最佳工作负载
|
关系数据库专为事务性和高度一致的联机事务处理(OLTP)应用程序而设计。它们也适用于联机分析处理(OLAP)系统。 |
NoSQL 数据库适用于包括低延迟应用程序在内的多种数据访问模式。NoSQL 搜索数据库设计用于对半结构化数据进行分析。
|
数据模型 |
关系模型可将数据标准化为由行和列组成的表。采用一种架构来严格定义表、行、列、索引、各个表之间的关系及其他数据库元素。数据库在表之间的关系中强制实施引用完整性。 |
NoSQL 数据库提供了各种数据模型,如键值、文档、图形和列,这些模型针对性能和规模进行了优化。 |
ACID 属性 |
关系数据库提供原子性、一致性、隔离性和持久性(ACID)属性:
|
痘痘书 NoSQL 数据库通过放宽关系数据库的某些 ACID 属性来作出取舍,以获得可以水平扩展的更灵活的数据模型。这将使 NoSQL 数据库成为高吞吐量、低延迟使用案例的绝佳选择,这些使用案例需要水平扩展超出单个实例的限制。 |
性能 |
性能通常取决于磁盘子系统。要获得最佳性能,通常需要优化查询、索引和表结构。 |
性能通常由底层硬件集群大小、网络延迟以及调用应用程序来决定。 |
扩展 |
关系数据库通常通过增加硬件的计算能力进行纵向扩展或通过为只读工作负载添加副本进行横向扩展。 |
NoSQL 数据库通常是可分区的。这是因为访问模式可以通过使用分布式体系结构进行横向扩展来提高吞吐量,从而以接近无限的规模提供一致的性能。 |
API |
存储和检索数据的请求通过使用符合结构化查询语言(SQL)的查询来传达。这些查询由关系数据库解析和执行。 |
借助基于对象的 API,应用开发人员可以轻松存储和检索数据结构。通过分区键,应用程序可以查找键值对、列集或包含序列化应用程序对象和属性的半结构化文档。 |
何时应该选择使用 NoSQL 数据库而不是 SQL 数据库
NoSQL 数据库最适合处理不确定、不相关或快速变化的数据。当应用程序决定数据库架构时,对于开发人员来说,使用 NoSQL 数据库比较直观。您可以将其用于以下应用程序:
- 需要灵活的架构来实现更快、更具迭代性的开发。
- 优先考虑性能,而不是强数据一致性和维护数据表之间的关系(引用完整性)。
- 需要通过跨服务器分片进行横向扩展。
- 支持结构化、半结构化和非结构化数据。
非关系数据库架构和关系数据库架构并不总是非此即彼的。您可以在应用程序中结合使用 SQL 和 NoSQL 数据库。这种混合方法非常常见,可确保将每个工作负载映射到正确的数据库,以实现最佳的性价比。
AWS 如何满足您的 NoSQL 数据库需求
AWS 提供多项 NoSQL 数据库服务,可满足您的所有 NoSQL 需求。例如:
- Amazon DynamoDB 是一项无服务器、完全托管的键值数据库服务,可提供一致的个位数毫秒级性能和无限的可扩展性。
- Amazon DocumentDB(与 MongoDB 兼容)是一个完全托管的本机 JSON 文档数据库,有助于轻松且经济高效地处理几乎任何规模的关键文档工作负载,并且无需管理基础设施。
- Amazon Neptune 是一项完全托管的无服务器图形数据库服务,旨在提供卓越的可扩展性和可用性,能够在几秒钟内查询数十亿个关系。
- 适用于 Redis 的 Amazon MemoryDB 是一项耐用的内存数据库服务,可提供微秒级的读取和写入响应时间,从而实现超快的性能。
- Amazon ElastiCache 是一项完全托管且与 Redis 和 MemCached 兼容的内存中数据存储和缓存服务,可提供实时且经过成本优化的性能。
- Amazon Keyspaces(Apache Cassandra 兼容)是一个无服务器、完全托管的宽列数据库,可通过多区域复制实现高达 99.999% 的可用性。可扩展、高度可用且兼容 Apache Cassandra 的托管数据库服务。
- Amazon Timestream 是一项无服务器且完全托管的时间序列数据库服务,使每天存储和分析数万亿个事件变得更加容易,速度比于关系数据库提升多达 1000 倍。
- Amazon OpenSearch Service 是一款完全托管的分布式搜索和分析套件,可实现对业务和运营数据的实时搜索、监控和分析。
立即创建免费 AWS 账户,开始使用 AWS 上的 NoSQL!