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

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

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

借助 Spanner,您可以先满足简单的非关系型存储需求,然后根据需要扩缩应用。

Spanner 如何满足 NoSQL 数据库条件

Spanner 符合 NoSQL 工作负载的以下关键条件。

规模和性能

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

NoSQL API

传统的关系型数据库通常使用 SQL 进行访问,对于不熟悉关系型数据库的开发者来说,需要学习 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,您可以将各种工作负载整合到一个灵活的平台上。