有些事情让我很困惑,我想知道你是否可以帮助我,请根据Neo4j图形数据库书,在节点存储文件中有4个字节包含节点关系的ID。如果节点有100个关系(它们都是关系链中节点的第一个关系),neo4j如何知道应该选择哪个id?例如,我编写了Match(a:user{Name:‘a’)-r:Has-skill>(b:skill)
假设用户节点有很多关系,但我们对has_skill关系感兴趣,neo4j如何理解哪个id与此关系相关?
发布于 2018-04-16 12:46:29
你所说的关系链不同于“路径”。一个节点不会有多个链中的第一个关系。
关系链是一个包含该节点关系的双向链表。鉴于Neo4J已经在模式中找到了第一个用户,它将执行以下步骤(或类似的步骤):
从节点记录指向包含该节点的所有关系的链表的第一个元素(这第一个元素是“链中的第一个关系”)。为链表的每个元素检查:
实际算法可能略有不同;例如,它可能使用深度优先遍历而不是广度优先遍历,或者可能以不同的方式进行优化,但最终结果是相同的。
摘自图表数据库,第2版,作者: Ian Robinson,Jim Webber和Emil Eifrem,第154页:
要查找节点的关系,我们沿着该节点的关系指针指向它的第一个关系(本例中的LIKES关系)。从这里开始,我们遵循该特定节点的关系的双向链表(即,要么是开始节点的双向链表,要么是结束节点的双向链表),直到找到我们感兴趣的关系。
最后,@InverseFalcon指出,对于密集相关的节点,通过它们在50+关系附近的估计,这将以不同的方式实现。在这一点上,使用了一种略有不同的结构,该结构按类型和方向进行分组,因此降低了搜索成本。
https://stackoverflow.com/questions/49854360
复制