新遍历 api 的工作原理

how new traverse api works

现在我正在学习 neo4j 的新遍历 api,我遵循下面的 link

http://neo4j.com/docs/stable/tutorial-traversal-java-api.html

所以现在我知道如何使用唯一性、求值器等。 那就是我知道如何改变 api.

的行为

但我想知道的是它究竟是如何遍历的。

例如,我正在尝试查找节点的邻居。

neo4j 是否使用索引来查找它?
neo4j 是否保留哈希来查找邻居?

更具体地说,当我编写以下代码时。

TraversalDescription desc = database.traversalDescription().breadthFirst().evaluator( Evaluators.toDepth( 3) );

node =database.getNodeById(4601410);

Traverser traverser = desc.traverse(node);

在我的描述中,我使用了 breadthFirst。所以这意味着当我给节点遍历时,代码应该找到第一个邻居。所以 api 如何找到第一个邻居是我想知道的事情。节点中是否有指向邻居的指针?所以当我说遍历到深度 3 时,它会找到第一个邻居,然后将邻居作为递归函数中的节点等等?那么如果我们说到深度 10 那么它会很慢吗?

所以我真正想要的是如何改变 api 遍历的自然行为?

TraversalDescription为此特意提出了PathExpander - that is the component deciding which relationships will be used for the next step. Use TraversalDescription.expand()的概念。

您可以使用自己的 PathExpander 实现或使用 PathExpanders 中的预定义方法之一。

如果您只想让您的遍历遵循特定的关系类型,您可以使用 TraversalDescription.relationships() 来指定这些关系类型。

简化后,Neo4j 存储表示节点和关系的记录a.s.o。在它的商店里。每个节点都由磁盘上的一个节点记录表示,该记录包含第一个关系(如果您愿意的话,是邻居)的指针(直接偏移到关系存储中)。关系记录 link 彼此,因此获取一个节点的所有邻居将读取节点记录,它的关系指针指向该关系记录,并继续跟随这些前向指针直到该链的末尾。这是否回答了您的问题?