有些东西让我困惑很多我想知道如果你能帮我这个请 根据Neo4j图数据库书,节点存储文件中有4个字节包含节点关系的ID。如果节点有100个关系(并且它们都是节点在关系链中的第一个关系)neo4j如何理解选择哪个id?例如我写了Match(a:user {Name:'a') - [r:Has-skill] - >(b:skill)
想象一下,用户节点有很多关系但我们对[has_skill]关系感兴趣neo4j如何理解与这种关系有关的id?
答案 0 :(得分:0)
您所谈论的关系链与"路径"不同。一个节点没有多个链接中的第一个关系。
关系链是一个包含该节点关系的双向链表。鉴于Neo4J已经在模式中找到了第一个用户,它将执行以下步骤(或类似的东西):
HAS_SKILL
)。实际算法可能略有不同;例如它可以使用深度优先遍历而不是广度优先,或者可以以不同的方式进行优化,但最终结果是相同的。
来自图形数据库,第2版,作者:Ian Robinson,Jim Webber和Emil Eifrem,第154页:
要查找节点的关系,我们将该节点的关系指针指向其第一个关系(本例中为LIKES关系)。从这里开始,我们将遵循该特定节点的关系的双向链接列表(即,起始节点双向链表或结束节点双向链表),直到找到我们感兴趣的关系为止。 / p>
最后,@ InverseFalcon指出,对于密集相关的节点,它将以不同的方式实现,估计大约有50多个关系。此时,使用略有不同的结构,按类型和方向分组,从而降低搜索成本。