遍历框架

Neo4j 遍历框架 Java API 是一种基于回调、延迟执行的方式,用于在 Java 中指定图中的所需移动。一些遍历示例可以在遍历图中找到。

主要概念

遍历以图上的起始节点为起点,并返回一组表示已访问节点及其关系的路径。遍历由遍历描述定义,其中可能包含以下元素

  • 起始节点 — 定义遍历的起点。

  • 路径扩展器 — 定义要遍历的内容,通常是关系方向和类型。

  • 唯一性 — 定义图上先前遍历的节点和关系的限制。

  • 评估器 — 决定返回什么以及是否停止或继续遍历当前位置之外的路径。

  • 顺序 — 定义路径扩展的顺序,例如 深度优先广度优先

graphdb traversal description

使用遍历框架

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

遍历框架 vs Cypher

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

与 Cypher 相比,使用遍历框架的一些优点包括

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

  • 它允许在路径遍历期间进行自定义剪枝,这可能会提高遍历的性能。有关更多信息,请参阅评估器

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

  • 使用 Cypher 时,只有当指定 RELATIONSHIP_GLOBAL 唯一性时,关系才会被遍历。通过使用遍历框架,可以指定遍历路径上的唯一性约束

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

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

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

© . All rights reserved.