Aura 图形分析无服务器

Aura 图形分析无服务器是一个按需的临时计算环境,用于运行 GDS 工作负载。每个计算单元称为一个 GDS 会话。它是 Neo4j Aura 的一部分,Neo4j Aura 是一个快速、可扩展、始终在线、全自动化的云图平台。

GDS 会话有三种类型

  • 附加型:数据源是 Neo4j AuraDB 实例。

  • 自管理型:数据源是自管理的 Neo4j DBMS。

  • 独立型:数据源不基于 Neo4j。

我们将用数据填充会话的过程称为 远程投影。一旦填充,GDS 会话就可以运行 GDS 工作负载,例如算法和机器学习模型。这些计算的结果可以使用附加型和自管理型中的 远程写回 功能写回到原始源。

主要 API 接口

GDS 会话无需安装到 Neo4j DBMS。相反,GDS 会话是按需启动的,用于执行 GDS 计算。GDS 会话有两种主要 API:GDS Python 客户端和 GDS 会话 Cypher API。

GDS Python 客户端

使用该客户端,可以对 GDS 会话执行所有操作。有关包括示例和教程在内的全面 API 概述,请参阅GDS Python 客户端手册

具体来说,GDS Python 客户端允许您

入门的好地方是教程

GDS 会话 Cypher API

本手册涵盖了 GDS 会话 Cypher API 的所有方面。Cypher API 支持远程投影、调用算法和机器学习操作以及远程写回到 AuraDB 实例。目前,它仅适用于 AuraDB,并从 Cypher 查询上下文(例如 Aura Console 中的 Query)中使用。这意味着当远程图投影运行时,会话会自动创建;当图被删除时,会话会自动删除。

在以下部分中,我们将只关注 GDS 会话 Cypher API,假设它从 AuraDB 实例中使用。

会话生命周期和配置

在 Cypher API 中,会话是隐式管理的。这意味着没有创建或删除会话的操作。相反,当远程投影运行时,会话会创建;当图被删除时,会话会删除。会话不能直接列出,但可以使用 gds.graph.list() 列出

会话大小

请求图投影时,必须指定一个强制性的 memory 参数,指示会话的大小。会话大小是分配给分析过程的最大内存量。更大的大小意味着更快的运行时间以及处理更大容量数据的能力,但它也会更昂贵。

支持的值包括:4GB8GB16GB24GB32GB48GB64GB96GB128GB192GB256GB384GB512GB

可以为您的 Aura 组织配置会话最大大小。请咨询您的组织管理员以了解您的最大大小。

AuraDB 源实例限制

GDS 会话 Cypher API 仅适用于商业关键型或虚拟专用云方案中的 AuraDB 实例。根据所使用的方案,会有不同的限制。请参阅Aura 中的图分析以查看比较。

会话过期和删除

请求图投影时,可以配置一个可选的 ttl 参数,该参数指定非活动会话过期速度。ttl 的默认值为 1 小时,最大允许值为 7 天。过期会话不能用于运行工作负载,不会产生任何费用,并将在 7 天后自动删除。它也可以通过 Aura Console UI 删除。

最长生命周期

会话的活动时间不能超过 7 天。即使会话没有因不活动而过期,它也将在创建后 7 天过期。这是一个硬性限制,无法更改。

语法

GDS 会话 Cypher API 尽可能地与 GDS 插件 API 匹配。因此,本手册中的大部分内容适用于这两种产品。通常,您可以使用本手册中的所有查询示例以及 GDS 会话 Cypher API,但要遵守本节中描述的限制。

Aura API 认证

一个关键区别是 GDS 会话 Cypher API 需要向 Aura API 进行认证。这通过在每个 Cypher 查询中调用 gds.aura.api.credentials() 函数来完成。一个简单的方法是在所有查询中使用前导 WITH 子句。

该函数不返回任何值,但会在该查询的查询上下文中注册凭据。凭据不会在任何地方持久化,并且在 Cypher 查询完成后会立即被遗忘。

由于此要求,不能使用短格式的仅 CALL 查询。有关更多详细信息,请参阅Cypher 手册

仅使用 CALL 子句调用算法
CALL gds.wcc.stream('g')

上述操作将失败,并显示错误,指示缺少对 gds.aura.api.credentials() 的调用。

语法
RETURN gds.aura.api.credentials(
  clientId: String,
  clientSecret: String
) AS credentials
表 1. 配置
名称 类型 默认值 可选 描述

clientId

字符串

不适用

Aura API 密钥对的客户端 ID。

clientSecret

字符串

不适用

Aura API 密钥对的客户端密钥。

表 2. 结果
名称 类型 描述

-

-

始终返回 null

示例

将图投影到 GDS 会话
// you can use any alias
CYPHER runtime=parallel
WITH gds.aura.api.credentials($clientId, $clientSecret) AS credentials
MATCH (n)
OPTIONAL MATCH (n)-->(m)
RETURN gds.graph.project('g', n, m, {}, {memory: '4GB'})
在流模式下调用算法
// you can use any alias
WITH gds.aura.api.credentials($clientId, $clientSecret) AS c
CALL gds.pageRank.stream('g')
YIELD nodeId, score // must specify YIELD
RETURN *

投影图

使用Cypher 投影将图投影到 GDS 会话中。请确保包含带有 Aura Graph Analytics Serverless 标签的所有附加参数。

使用 Cypher 并行运行时,在投影期间获得最佳性能。

不支持原生投影和旧版 Cypher 投影。

运行算法

GDS 会话 Cypher API 支持所有现有执行模式下的大多数算法和机器学习操作。语法与 GDS 插件相同,但增加了 WITH gds.aura.api.credentials() AS credentials 子句。

API 限制

GDS 会话 Cypher API 不支持 GDS 插件中所有可用的过程和函数。此处提到的一些可能在未来得到支持,而另一些可能永远不会得到支持。

图目录

GDS 会话 Cypher API 不支持以下图目录过程

  • gds.graph.project

  • gds.graph.project.estimate

  • gds.graph.project.cypher

  • gds.graph.project.cypher.estimate

  • gds.graph.export

  • gds.graph.export.csv

  • gds.graph.export.csv.estimate

  • gds.backup

  • gds.restore

  • gds.graph.graphProperty.drop

  • gds.graph.graphProperty.stream

机器学习

训练好的模型只能在训练它们的相同会话中使用进行预测。会话删除后,所有训练好的模型都将丢失。

GDS 会话 Cypher API 不支持以下机器学习过程

  • gds.model.publish

  • gds.model.store

  • gds.model.load

  • gds.model.delete

  • gds.alpha.linkprediction.adamicAdar

  • gds.alpha.linkprediction.commonNeighbors

  • gds.alpha.linkprediction.preferentialAttachment

  • gds.alpha.linkprediction.resourceAllocation

  • gds.alpha.linkprediction.sameCommunity

  • gds.alpha.linkprediction.totalNeighbors

  • gds.alpha.ml.splitRelationships

此外,所有 pipeline 过程都不受支持。

附加操作

GDS 会话 Cypher API 不支持以下附加操作

  • gds.license.state

  • gds.debug.arrow

  • gds.debug.sysInfo

  • gds.license.state

  • gds.userLog

  • gds.version

示例

在本节中,我们将演示如何使用 GDS 会话 Cypher API 投影图、运行一些算法并处理结果。

投影图

为了将图投影到 GDS 会话中,我们需要在数据库中拥有一些数据。

以下 Cypher 语句将在 Neo4j 数据库中创建示例图
CREATE
  (a:User {name: 'Alice', age: 23}),
  (b:User {name: 'Bridget', age: 34}),
  (c:User {name: 'Charles', age: 45}),
  (d:User {name: 'Dana', age: 56}),
  (e:User {name: 'Eve', age: 67}),
  (f:User {name: 'Fawad', age: 78}),

  (a)-[:LINK {weight: 0.5}]->(b),
  (b)-[:LINK {weight: 0.2}]->(a),
  (a)-[:LINK {weight: 4}]->(c),
  (c)-[:LINK {weight: 2}]->(e),
  (e)-[:LINK {weight: 1.1}]->(d),
  (e)-[:LINK {weight: -2}]->(f);
aura graph analytics serverless

首先,使用远程 Cypher 投影将图投影到 GDS 会话中。指定 memoryttl 参数。

使用远程 Cypher 投影将名为 'myGraph' 的图投影到新的 GDS 会话中
CYPHER runtime=parallel
WITH gds.aura.api.credentials($clientId, $clientSecret) AS credentials
MATCH (source:User)
OPTIONAL MATCH (source)-[r:LINK]->(target:User)
WITH gds.graph.project('myGraph', source, target, {
  sourceNodeProperties: source { .age },
  targetNodeProperties: target { .age },
  relationshipProperties: r { .weight }
}, {
  memory: '4GB', ttl: duration({minutes: 5})
}) AS g
RETURN g.graphName, g.nodeCount, g.relationshipCount
表 3. 结果
图名称 节点数 关系数

'myGraph'

6

6

完成后,我们现在拥有一个带投影图的 GDS 会话。如果打开 Aura Console,您应该能够在 Sessions 视图中看到列出的会话。接下来,使用 gds.graph.list() 过程列出投影图。

列出投影图
WITH gds.aura.api.credentials($clientId, $clientSecret) AS credentials
CALL gds.graph.list()
YIELD graphName, nodeCount, relationshipCount
RETURN graphName, nodeCount, relationshipCount
表 4. 结果
图名称 节点数 关系数

"myGraph"

6

6

运行算法

您可以在投影图上运行算法。例如,在示例图上以 mutate 模式运行PageRank快速随机投影。然后,流式传输 节点属性并将其写回 AuraDB 实例。

mutate 模式运行 PageRank
WITH gds.aura.api.credentials($clientId, $clientSecret) AS credentials
CALL gds.pageRank.mutate('myGraph', { mutateProperty: 'pageRank' })
YIELD ranIterations, nodePropertiesWritten
RETURN ranIterations, nodePropertiesWritten
表 5. 结果
运行迭代次数 写入的节点属性

1

6

使用突变的 pageRank 属性作为 FastRP 算法的输入。

mutate 模式运行 FastRP
WITH gds.aura.api.credentials($clientId, $clientSecret) AS credentials
CALL gds.fastRP.mutate('myGraph', {
  featureProperties: ['pageRank'],
  relationshipWeightProperty: 'weight',
  iterationWeights: [1, 1, 1],
  randomSeed: 42,
  embeddingDimension: 8,
  mutateProperty: 'fastrp'
})
YIELD nodePropertiesWritten
RETURN nodePropertiesWritten
表 6. 结果
写入的节点属性

6

现在,将节点属性流式传输回 AuraDB 实例。

流式传输节点属性
WITH gds.aura.api.credentials($clientId, $clientSecret) AS credentials
CALL gds.graph.nodeProperty.stream('myGraph', "fastrp")
YIELD nodeId, propertyValue
RETURN nodeId, propertyValue
ORDER BY nodeId
表 7. 结果
节点 ID 属性值

0

[-0.8200507164, -0.0124960952, 0.2896471024, -0.2785570323, -0.8645128608, -0.1037763357, 0.0, 0.4556654692]

1

[-0.3894904256, -0.5124961138, 0.9440460801, -0.9576280117, 0.0673641935, -1.0132695436, 0.0, 0.4451318979]

2

[-0.4223886132, 0.0, 0.3452976346, 0.190074876, -0.4223886132, 0.4223886132, 0.0, 0.0]

3

[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]

4

[-0.4223886132, 0.0, -0.6547023654, 0.190074876, -0.4223886132, 0.4223886132, 0.0, 0.0]

5

[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]

将结果写入数据库

可以使用 gds.graph.nodeProperty.write() 过程写入突变结果。有关更多详细信息,请参阅写入节点属性和标签

您还可以使用 write 算法执行模式直接写入结果。

write 模式运行 Louvain
WITH gds.aura.api.credentials($clientId, $clientSecret) AS credentials
CALL gds.louvain.write('myGraph', { writeProperty: 'louvain' })
YIELD communityCount, modularity
RETURN communityCount, modularity
表 8. 结果
社区数 模块度

2

0.3333333333333333

清理

最后,删除投影图,这也将删除 GDS 会话。

删除图 'myGraph'
WITH gds.aura.api.credentials($clientId, $clientSecret) AS credentials
CALL gds.graph.drop('myGraph')
YIELD graphName
RETURN graphName
表 9. 结果
图名称

"myGraph"

完成后,GDS 会话将不再产生任何费用。您会发现该会话不再在 Aura Console 中可见。如果您忘记删除图,会话将在配置的 ttl 时间过后自动过期。