运行算法

所有算法均以 Neo4j 过程(procedures)的形式提供。可以通过 Neo4j Browser、cypher-shell 直接从 Cypher 调用,也可以使用所选语言的 Neo4j 驱动程序从客户端代码中调用。

关于运行算法的语法详细指南,请参阅语法概述一节。简而言之,算法使用 stream(流式)、stats(统计)、mutate(变异)或 write(写入)这四种执行模式之一运行,本章将详细介绍这些模式。

通过终止执行过程调用的 Cypher 事务,可以取消任何正在进行的算法。有关如何使用事务的更多信息,请参阅事务处理

Stream(流式模式)

stream 模式将算法计算的结果以 Cypher 结果行的形式返回。这类似于标准 Cypher 读取查询的运行方式。

返回的数据可以是节点 ID 和节点的计算值(如 Page Rank 得分或 WCC 组件 ID),或者是两个节点 ID 和节点对的计算值(如节点相似度得分)。

如果图非常大,stream 模式的计算结果也会非常大。在 Cypher 查询中使用 ORDER BYLIMIT 子句对于支持“前 N 名”类型的用例非常有用。

Stats(统计模式)

stats 模式返回算法计算的统计结果,如计数或百分位分布。计算的统计摘要以单个 Cypher 结果行返回。使用 stats 模式时,无法获得算法的直接结果。此模式构成了 mutatewrite 执行模式的基础,但不会尝试进行任何修改或更新。

Mutate(变异模式)

mutate 模式将算法计算结果写回投影图(projected graph)。注意,指定的 mutateProperty 值在投影图中必须尚不存在。这使得可以在同一个投影图上运行多种算法,而无需在算法执行之间将结果写入 Neo4j。

此执行模式在以下三种场景中特别有用:

  • 算法可以依赖先前算法的结果,而无需写入 Neo4j。

  • 算法结果可以统一写入(请参阅写入节点属性写入关系)。

  • 算法结果可以通过 Cypher 查询,而完全不需要写入 Neo4j(请参阅读取图)。

计算的统计摘要以类似于 stats 模式的方式返回。变异后的数据可以是节点属性(如 Page Rank 得分)、新关系(如节点相似度)或关系属性。

Write(写入模式)

write 模式会将算法计算结果写回 Neo4j 数据库。这类似于标准 Cypher 写入查询的运行方式。返回的计算统计摘要类似于 stats 模式。这是唯一尝试对 Neo4j 数据库进行修改的执行模式。

写入的数据可以是节点属性(如 Page Rank 得分)、新关系(如节点相似度)或关系属性。对于算法结果会被不同查询多次检查的用例,write 模式非常有用,因为计算结果完全由库处理。

为了让 write 模式计算的结果被另一个算法使用,必须从更新后的 Neo4j 数据库中投影出一个新的图。

通用配置参数

所有算法都允许通过一组配置参数来调整其运行时特性。虽然某些参数是特定于算法的,但许多参数在算法和执行模式之间是通用的。

要了解更多关于特定算法的参数,并查看某算法是否支持特定参数,请查阅该算法的特定文档页面。
最常用的配置参数列表:
concurrency(并发度) - 整数

控制算法执行时的并行度。

该值默认设置为 4。在 GDS 会话中,默认值为可用处理器的数量。

有关并发设置和限制的更多详细信息,请参阅系统要求的 CPU 部分

nodeLabels(节点标签) - 字符串列表

如果运行算法的图是使用多个节点标签投影的,则此参数可用于仅选择投影标签的子集。算法将仅考虑具有任何选定标签的节点。

relationshipTypes(关系类型) - 字符串列表

如果运行算法的图是使用多个关系类型投影的,则此参数可用于仅选择投影类型的子集。算法将仅考虑具有任何选定类型的关系。

nodeWeightProperty(节点权重属性) - 字符串

在支持节点权重的算法中,此参数定义包含权重的节点属性。

relationshipWeightProperty(关系权重属性) - 字符串

在支持关系权重的算法中,此参数定义包含权重的关系属性。指定的属性必须存在于指定图的所有指定关系类型上。值必须是数字,且某些算法可能有额外的价值限制,例如要求仅使用正权重。

maxIterations(最大迭代次数) - 整数

对于迭代算法,此参数控制最大迭代次数。

tolerance(容差) - 浮点数

许多迭代算法接受容差参数。它控制两次迭代之间的最小增量。如果增量小于容差值,则认为算法已收敛并停止。

seedProperty(种子属性) - 字符串

某些算法可以增量计算。这意味着即使图发生了变化,也可以考虑先前执行的结果。seedProperty 参数定义包含种子值的节点属性。种子设定可以加快计算和写入时间。

writeProperty(写入属性) - 字符串

write 模式下,此参数设置写入结果的节点或关系属性的名称。如果该属性已存在,现有值将被覆盖。

writeConcurrency(写入并发度) - 整数

write 模式下,此参数控制写入操作的并行度。默认值为 concurrency

jobId(作业 ID) - 字符串

可以提供待启动作业的 ID,以便更轻松地通过例如 GDS 的日志记录功能进行跟踪。

logProgress(进度日志) - 布尔值

配置参数,允许在运行过程时开启/关闭百分比日志记录。默认为开启(on)。