适用于非关系型工作负载的 Spanner

Spanner 是一种高度可靠的全托管式数据库系统。虽然 Spanner 已演变成为关系型数据库管理系统,但其根源是非关系型键值对存储系统,并保留了此类系统的基本特征。因此,您可以将 Spanner 用作非关系型 (NoSQL) 数据库,并从其他非关系型数据库迁移到 Spanner。本文档可帮助您了解 Spanner 是否适合您的非关系型工作负载。

NoSQL 数据库的兴起,源于传统关系型数据库缺乏相应的功能来支持需要较高可伸缩性、可用性和计算弹性的新兴应用。为此,这类数据库牺牲了一些通常对数据管理至关重要的功能,例如事务、一致性和临时查询。Spanner 旨在同时支持高可用性应用的苛刻要求和传统关系型数据库所提供的功能,以便客户可以同时利用这两组功能。

借助 Spanner,您可以从简单的非关系型存储需求开始,并根据需要扩缩应用。

Spanner 如何满足 NoSQL 数据库条件

Spanner 可满足 NoSQL 工作负载的以下关键条件。

扩缩和性能

NoSQL 数据库因其能够横向扩缩读写而广受欢迎。使用 Spanner 时,您无需担心扩缩或性能问题。键值对样式 Spanner 数据库可以横向扩缩,以支持每秒数亿次读取或写入请求以及 PB 级数据。Spanner 的计算容量可随工作负载而扩缩,即使应用扩缩了几个数量级,也能保持一致的低延迟时间配置。

NoSQL API

传统关系型数据库通常使用 SQL 进行访问,这对于不熟悉关系型数据库的开发者而言学习难度较大。这些数据库的客户端通常还依赖于持久性连接,并且需要部署连接池基础架构才能进行扩缩。相比之下,Spanner API 基于 gRPC/HTTP2 请求和响应模型而构建,可自动处理连接失败问题。Spanner 提供了简单、原生于语言且高效的 NoSQL 读写 API,无需 SQL 知识即可使用。此外,Spanner 客户端无需任何连接池即可进行扩缩。

全代管式

NoSQL 数据库的一大吸引力在于,人们认为它们更易于管理。作为一种全托管式服务,Spanner 不会给客户带来任何运营负担。Spanner 会在后台执行零停机时间软件和硬件更新,同时保持向后兼容性。Spanner API 和语义与对单机数据库执行操作时相同,不需要了解 Spanner 的内部架构。Spanner 可在各种规模的部署上运行(从 1/10 个节点到数万个节点),并通过托管式自动扩缩器自动且灵敏地进行扩缩。

半结构化数据

Spanner 支持用于存储半结构化数据或非结构化数据的灵活数据类型,例如 JSON 和 BYTES。与其他 NoSQL 数据库一样,您可以使用这些数据类型来避免预先指定所有存储架构。

访问权限控制

与其他 NoSQL 数据库一样,Spanner 支持基于 IAM 的访问权限控制。管理员可以配置和管理访问权限控制政策,而无需将用户名和密码存储在数据库中。

Spanner 与传统 NoSQL 数据库的区别

与传统 NoSQL 数据库相比,Spanner 具有以下优势。

交易

随着应用变得越来越复杂,它们通常需要对数据库执行多行和多表事务性操作。使用 Spanner 时,您无需随着数据库的增长而迁移到事务性数据存储区,因为 Spanner 完全支持读写事务。作为一种符合 ACID 标准的数据库,无论规模如何,Spanner 都会始终保持数据库的事务一致性。

数据建模

NoSQL 数据库中的架构设计可能不太自然,因为需要将所有数据都放入一个表中,并且由于无法执行联接,因此需要强制对数据进行反规范化。而在使用 Spanner 时,您可以指定架构,无需使用单个表或反规范化。如需优化涉及多个表的访问模式,您可以使用表交织。您还可以跨表执行联接。

临时查询

即使您主要使用 NoSQL API,运行临时查询对进行调试或分析通常仍然很有用。Spanner 遵循 SQL 标准查询语言。您可以使用请求优先级将临时低优先级流量与在线流量隔离开来,也可以使用 Spanner Data Boost 在与在线数据库流量完全隔离的计算资源上运行分析查询。

具有强一致性的二级索引

应用通常需要二级索引来支持低延迟时间查找。典型 NoSQL 数据库提供具有最终一致性的二级索引,或者对索引的增长大小施加限制。这可能会使需要应对限制条件的应用逻辑变得复杂。Spanner 可大规模提供具有强一致性的二级索引,且没有任何大小限制条件。这样,您就可以专注于应用逻辑,而无需担心一致性问题。

Spanner 是否适合您的 NoSQL 数据库需求?

Spanner 是一种灵活的数据存储系统,同时支持 SQL 和 NoSQL 应用场景。虽然有些应用最初只需要简单的存储功能,但随着应用变得越来越复杂,它们需要更多 NoSQL 数据库通常不提供的功能,例如事务、一致的二级索引和灵活的查询语言。使用 Spanner 时,您不受这些限制的约束,可以根据需要扩展应用。

大多数非关系型工作负载都非常适合使用 Spanner。Spanner 不仅可提供简单的 NoSQL 读写 API,还具备高可用性、高可靠性、低延迟时间、计算弹性和极高的可伸缩性。借助 Spanner,您可以将各种工作负载整合到单一的灵活平台上。