遍历框架

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

主要概念

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

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

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

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

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

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

graphdb traversal description

使用遍历框架

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

遍历框架与 Cypher

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

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

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

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

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

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

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

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

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