1.1 NoSQL 数据库的工作原理

NoSQL 数据库使用各种数据模型来访问和操作数据。这些类型的数据库针对需要低延迟和灵活数据模型的数据密集型应用程序进行了优化。所有这一切都是通过放宽对其他类型数据库的典型严格数据一致性要求来实现的。

考虑一个简单的书籍数据库的模式建模示例。

  • 在关系数据库中,书籍条目通常被分成多个部分(或“规范化”)并存储在单独的表中,这些表的关系由主键和外键约束定义。在此示例中,Books表有ISBN书名“ISBN”“Author”Author-ISBN,列Author NameAuthor IDAuthors版本. 关系模型旨在维护数据库中表之间的引用完整性。数据被规范化以减少冗余,并且通常针对存储进行优化。

  • 在 NoSQL 数据库中,书籍记录通常存储为 JSON 文档。对于每本书或元素,ISBN书名版本号作者姓名作者 ID值都作为属性存储在单个文档中。在此模型中,数据针对直观开发和水平可扩展性进行了优化。

1.2 NoSQL 数据库有什么用?

NoSQL 数据库非常适合许多现代应用程序,例如移动、游戏、Web 应用程序,这些应用程序需要灵活、可扩展的数据库,这些数据库具有高性能和丰富的功能,可以提供最大的可用性。

  • 灵活性。通常,NoSQL 数据库提供灵活的模式,允许更快的开发和增量实施。由于使用灵活的数据模型,NoSQL 数据库非常适合半结构化和非结构化数据。

  • 可扩展性。NoSQL 数据库旨在使用分布式硬件集群进行扩展,而不是通过添加昂贵、可靠的服务器来扩展。一些云服务提供商在后台运行这些操作,提供完全托管的服务。

  • 高性能。NoSQL 数据库针对特定数据模型和访问模式进行了优化,以实现比关系数据库更高的性能。

  • 广泛的功能。NoSQL 数据库提供了丰富的 API 和数据类型,这些 API 和数据类型是专门为其各自的数据模型设计的。

1.3 NoSQL 数据库的类型

NoSQL 数据库用于不太方便以表格形式存储数据的地方。因此,它们以非常不同的格式存储。通常,NoSQL 数据库有 6 种主要数据类型。

基于键值对的数据库

使用键值对的数据库支持高可分离性,并提供其他类型数据库无法实现的前所未有的横向扩展。键值数据库的良好用例是游戏、广告和物联网应用程序。

例如,Amazon DynamoDB 可确保在任何规模下延迟不超过几毫秒的稳定数据库操作。这种强大的性能是将 Snapchat Stories 迁移到 DynamoDB 的主要原因,因为此 Snapchat 功能与最大的存储写入负载相关联。

文档

在应用程序代码中,数据通常表示为类似 JSON 格式的对象或文档,因为对于开发人员而言,它是一种高效且直观的数据模型。文档数据库允许开发人员使用他们在应用程序代码中使用的相同文档模型在数据库中存储和查询数据。文档和文档数据库灵活的、半结构化的、分层的特性允许它们随着应用程序的需要而发展。

文档模型在目录、用户配置文件和内容管理系统中运行良好,在这些系统中,每个文档都是唯一的并且会随时间变化。Amazon DocumentDB(与 MongoDB 兼容)和 MongoDB 是常见的文档数据库,它们为敏捷开发提供功能性和直观的 API。

图数据库

图形数据库使开发和运行处理复杂数据集的应用程序变得更加容易。使用图数据库的典型例子是社交网络、推荐服务、欺诈检测系统和知识图谱。Amazon Neptune 是一种完全托管的图形数据库服务。Neptune 支持 Property Graph 和 Resource Description Framework (RDF),提供两种图形 API 可供选择:TinkerPop 和 RDF/SPARQL。常见的图数据库包括 Neo4j 和 Giraph。

内存中的数据库

游戏和广告应用程序通常使用排行榜、会话存储和实时分析。这种能力需要在几微秒内做出响应,而流量的急剧增加随时都可能发生。

Amazon MemoryDB for Redis 是一种与 Redis 兼容的可靠内存数据库服务,可将读取延迟降低至毫秒,并提供跨多个可用区的持久性。MemoryDB 专为超高性能和可靠性而构建,因此它可以用作现代基于微服务的应用程序的主数据库。

Amazon ElastiCache 是一种完全托管的 Redis 和 Memcached 兼容内存缓存服务,用于处理低延迟、高吞吐量的工作负载。像 Tinder 这样需要应用程序实时响应的客户正在使用内存而不是磁盘存储系统。另一个专门构建的数据仓库示例是 Amazon DynamoDB Accelerator (DAX)。DAX 允许 DynamoDB 以数倍的速度读取数据。

搜索数据库

许多应用程序都会生成日志,以便开发人员更轻松地进行故障排除和修复问题。Amazon OpenSearch 是一项专门构建的服务,通过索引、聚合和搜索半结构化日志和指标,对自动生成的数据流进行近乎实时的可视化和分析。

此外,Amazon OpenSearch 是一项功能强大的高性能全文搜索服务。Expedia 利用 150 多个 Amazon OpenSearch 服务域、30 TB 数据和 300 亿份文档来处理各种关键任务用例,从运营监控和故障排除到分布式应用程序堆栈跟踪和成本优化。

1.4 SQL(关系型)和NoSQL(非关系型)数据库的比较

NoSQL有很多优点,所以你至少应该在理论上知道你需要的工具在你自己写之前已经存在了。下面我将给出NoSQL和SQL数据库的对比:

合适的工作负载

关系数据库专为事务性和高度一致的实时事务处理 (OLTP) 应用程序而设计,非常适合实时分析处理 (OLAP)。

NoSQL 数据库旨在处理一系列数据访问模式,包括低延迟应用程序。NoSQL 搜索数据库专为分析半结构化数据而设计。

数据模型

关系模型规范化数据并将其转换为行和列的表。模式严格定义表、行、列、索引、表之间的关系以及其他数据库元素。这样的数据库确保表之间关系中参考数据的完整性。

NoSQL 数据库提供了多种数据模型,例如针对高性能和可扩展性进行了优化的键值对、文档和图形。

酸性物质

关系数据库提供一组 ACID 属性:原子性、一致性、隔离性、可靠性。

  • 原子性要求事务全部执行或根本不执行。
  • 一致性意味着事务一旦完成,数据就必须符合数据库模式。
  • 隔离要求并行事务彼此分开运行。
  • 可靠性是指在意外的系统故障或断电后恢复到上次保存状态的能力。

NoSQL 数据库通常会做出折衷,放宽对 ACID 属性的严格要求,支持允许水平扩展的更灵活的数据模型。这使得 NoSQL 成为需要水平扩展到单个实例之外的高带宽、低延迟用例的绝佳选择。

表现

性能主要取决于磁盘子系统。通常需要优化查询、索引和表结构以获得最佳性能。

性能通常取决于底层硬件集群的大小、网络延迟和调用应用程序。

缩放

关系数据库通常通过增加硬件的计算能力或通过为读取工作负载添加单独的副本来扩展。

NoSQL 数据库通常通过基于分布式架构的可扩展访问模式来支持高可分离性。这提高了吞吐量并在几乎无限的规模下提供一致的性能。

应用程序接口

写入和检索数据的请求是用 SQL 编写的。这些查询由关系数据库解析和执行。

面向对象的 API 允许应用程序开发人员轻松编写和检索数据结构。使用分区键,应用程序可以搜索键值对、列集或包含串行对象和应用程序属性的半结构化文档。