Spanner Graph 概览

Spanner Graph 是 Spanner 和 Spanner Omni 的一项功能,可让您直接在 Spanner 中使用图数据库构建和查询属性图。 Spanner Graph 将 Spanner 的可伸缩性和可靠性与图表建模和查询的强大功能相结合。

属性图将数据建模为节点(实体)和边(实体之间的关系),两者都可以具有属性(标签和元数据)。这对于社交网络、欺诈检测和推荐引擎等复杂且高度关联的数据特别有用。

本文档中的主题适用于 Spanner Omni,就像它们适用于 Spanner 一样。

设置和查询 Spanner Graph

如需开始使用 Spanner Graph,您必须先创建 Spanner Omni 部署和数据库。创建数据库后,您需要定义一个属性图表架构,将现有的 Spanner Omni 表映射到图表节点和边缘。

设置架构并将数据插入到基础表中后,您可以使用 Graph Query Language (GQL)(一种实现 ISO GQL 标准的 GoogleSQL 扩展)运行图查询。如需了解详情,请参阅 Spanner 文档中的设置和查询 Spanner Graph。

Spanner Graph 架构概览

Spanner Graph 架构会将关系型数据解读为图。架构用于指定构成图的节点表和边表。每个表都会将 Spanner 表中的行映射到图表元素。元素可以具有用于对其进行分类的标签,以及用于存储属性的属性。如需了解详情,请参阅 Spanner 文档中的架构概览。

创建和管理 Spanner Graph 架构

您可以使用数据定义语言 (DDL) 语句来创建、更新或删除属性图定义。CREATE PROPERTY GRAPH 语句用于定义图,并指定基础表、键和标签。如需了解详情,请参阅 Spanner 文档中的创建和管理 Spanner Graph 架构。

设计架构的最佳实践

高效的架构设计对于提升性能至关重要。最佳实践包括:

  • 使用交织将边与其源节点共置。

  • 使用参照限制条件(外键)来帮助确保图的完整性。

  • 对经常过滤的属性创建二级索引。

  • 根据查询模式选择结构化设计还是非结构化设计。

如需了解详情,请参阅 Spanner 文档中的设计架构的最佳实践。

使用 SQL 视图创建属性图

您可以使用 SQL 视图来定义图的节点和边。如需了解使用 SQL 视图和表创建图之间的区别,请参阅 Spanner 文档中的使用视图而非表创建图的好处。

根据 SQL 视图创建的图表概览

将视图用作抽象层可提供行级访问权限控制、灵活的数据转换,并实现从无架构数据模型到正式数据模型的平稳过渡。如需了解详情,请参阅基于 SQL 视图创建的图表概览。

基于 SQL 视图创建图

如需从视图创建图,请使用标准 SQL 定义视图。然后,在 CREATE PROPERTY GRAPH 语句的 NODE TABLES 或 EDGE TABLES 子句中引用它们。您必须为每个基于视图的元素明确定义一个 KEY。KEY 子句用于指定来源视图中唯一标识每个图元素的列。如需了解详情,请参阅 Spanner 文档中的从 SQL 视图创建图。

管理 Spanner Graph 数据

您可以通过修改定义图表的底层表来管理 Spanner Graph 中的数据。如需了解详情,请参阅 Spanner 文档中的管理 Spanner Graph 数据。

操作 说明
插入 使用 INSERT 语句或 mutation API 向节点表和边表添加新行。
更新 通过更新底层表中的相应列来修改现有属性。
删除 通过删除相应的行来移除节点或边。使用 ON DELETE CASCADE 在删除节点时自动移除关联的边。

Spanner Graph 查询

Spanner Graph 支持使用 Graph Query Language (GQL) 进行查询,以遍历和分析图表数据。

查询概览

图表查询使用 GRAPH 子句指定目标图表,并使用 MATCH 子句定义要查找的模式。您可以返回节点和边的属性,也可以对结果执行汇总。如需了解详情,请参阅 Spanner 文档中的查询概览。

使用路径

路径表示图中的节点和边的序列。您可以使用 PATH_LENGTH()、NODES() 和 EDGES() 等函数查找两个节点之间的所有路径、查找最短路径,或根据路径的属性或长度过滤路径。如需了解详情,请参阅 Spanner 文档中的使用路径。

查询调优方面的最佳实践

如需优化图表查询,请执行以下操作:

  • 从基数较低的节点开始遍历。

  • 为所有节点和边缘模式明确指定标签。

  • 使用 IS_FIRST() 函数可限制从高基数超级节点遍历的边的数量。

如需了解详情,请参阅 Spanner 文档中的查询调优最佳实践。

Spanner Graph 与 Spanner 全文搜索功能集成,可让您使用 SEARCH() 函数根据非结构化文本属性搜索节点或边。如需了解详情,请参阅 Spanner 文档中的将全文搜索与 Spanner Graph 搭配使用。

您可以对图数据执行向量相似度搜索,以查找 K 最近邻 (KNN) 或近似最近邻 (ANN)。这对于基于相似性的推荐和 AI 驱动的应用非常有用。如需了解详情,请参阅 Spanner 文档中的将向量搜索与 Spanner Graph 搭配使用。

使用 Spanner Graph 管理无架构数据

对于数据模型不断演变的应用,Spanner Graph 支持无架构数据管理。您可以将所有节点和边存储在具有 JSON 列(用于存储属性)的单个通用表中,这样您就可以添加新类型和属性,而无需进行 DDL 更改。如需了解详情,请参阅 Spanner 文档中的使用 Spanner Graph 管理无架构数据。

迁移到 Spanner Graph

您可以将其他数据库中的现有图数据迁移到 Spanner Graph。此过程通常涉及将数据导出为 CSV 或 JSON 文件,然后将其导入到支持新属性图的 Spanner 表中。如需了解详情,请参阅 Spanner 文档中的将数据迁移到 Spanner Graph。

适用于 openCypher 用户的 Spanner Graph 参考文档

如果您之前使用过 openCypher,那么 Spanner Graph 中的 GQL 实现对您来说应该很熟悉,但两者在语法上存在一些差异。此参考文档可帮助您将 openCypher 概念和查询映射到 Spanner Graph MATCH 和 RETURN 语义。如需了解详情,请参阅 Spanner 文档中的适用于 openCypher 用户的 Spanner Graph 参考文档。

排查 Spanner Graph 问题

Spanner Graph 中的常见问题包括引用完整性违规(悬空边)和运行缓慢的查询。问题排查包括检查架构定义、检查是否存在缺失的节点或边,以及使用查询计划来识别性能瓶颈。如需了解详情,请参阅 Spanner 文档中的排查 Spanner Graph 问题。

后续步骤