遍历框架

The Neo4j Traversal Framework Java API 是一种基于回调、惰性执行的方式,用于在 Java 中指定对图的期望移动。某些遍历示例可在 遍历图 中找到。

主要概念

遍历以图上的起始节点为入口,返回一组路径,代表被访问的节点及其关系。遍历通过遍历描述来定义,描述中可能包含以下元素

  • Starting node — 定义遍历的起点。

  • Pathexpander — 定义要遍历的内容,通常以关系的方向和类型来说明。

  • Uniqueness — 定义对已遍历节点和关系的限制。

  • Evaluator — 决定返回什么以及是否在当前节点后停止或继续遍历。

  • Order — 定义路径展开的顺序,例如 depth-first(深度优先)或 breadth-first(广度优先)。

graphdb traversal description

使用遍历框架

遍历框架可以在 嵌入于 Java 应用程序 中使用。它也可以在使用 用户自定义过程 扩展 Neo4j 时使用。有关示例,请参阅 使用遍历框架的用户自定义过程

遍历框架 vs Cypher

虽然遍历框架比 Cypher 查询语言 可读性差且更复杂,但它提供了一种强大的图遍历方法。这是因为遍历框架可以在遍历的每一步动态做出自定义选择,从而使过程更具表现力,并且在性能上可能优于 Cypher。

使用遍历框架相较于 Cypher 的一些优势包括

  • 遍历框架允许使用任意所需的 Java 库来帮助评估遍历。

  • 它允许在路径遍历过程中进行自定义剪枝,这可能会提升遍历性能。更多信息请参见 Evaluator(评估器)

  • 在 Cypher 中,无法指定路径展开的顺序(例如深度优先)。然而,使用遍历框架可以指定 遍历路径的顺序

  • 在 Cypher 中,只有在指定 RELATIONSHIP_GLOBAL 唯一性时才会遍历关系。而使用遍历框架可以指定 遍历路径的唯一性约束

通常建议在可能的情况下使用 Cypher。但在使用遍历框架时,请记住

  • Cypher 使用内存跟踪,可以在查询占用过多内存时中止。然而,当在遍历 API 中将 Cypher 与 Java 混用(例如在函数中)时,可能会耗尽内存。

  • 不要在另一个事务中重用遍历期间获取的对象。请改用它们的 ID 来重新获取对象。