首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Neo4j如何使用节点存储文件中的关系ID遍历图

Neo4j如何使用节点存储文件中的关系ID遍历图
EN

Stack Overflow用户
提问于 2018-04-16 17:51:31
回答 1查看 81关注 0票数 0

有些事情让我很困惑,我想知道你是否可以帮助我,请根据Neo4j图形数据库书,在节点存储文件中有4个字节包含节点关系的ID。如果节点有100个关系(它们都是关系链中节点的第一个关系),neo4j如何知道应该选择哪个id?例如,我编写了Match(a:user{Name:‘a’)-r:Has-skill>(b:skill)

假设用户节点有很多关系,但我们对has_skill关系感兴趣,neo4j如何理解哪个id与此关系相关?

EN

回答 1

Stack Overflow用户

发布于 2018-04-16 20:46:29

你所说的关系链不同于“路径”。一个节点不会有多个链中的第一个关系。

关系链是一个包含该节点关系的双向链表。鉴于Neo4J已经在模式中找到了第一个用户,它将执行以下步骤(或类似的步骤):

从节点记录指向包含该节点的所有关系的链表的第一个元素(这第一个元素是“链中的第一个关系”)。为链表的每个元素检查:

  • 检查是否与搜索的关系的标准匹配(在这里,它将具有与标准匹配的类型

  • ,该关系被保留以备将来使用)。

  • 检查是否匹配搜索的关系的标准(在这里,它将具有与标准匹配的类型,该关系将被保留以备将来使用)。
    • 检查是否匹配搜索的关系的标准(在这里,它将具有与标准匹配的类型,该关系被保留以备将来使用;如果不匹配,则将指针指向关系链表中的下一个元素(在“discarded.
    • Follow”中);如果已经在最后一个元素处,则退出loop.

  1. 对于通过扫描链表检索到的每个关系,跟随它们到它们所指向的节点,然后继续计算模式。

实际算法可能略有不同;例如,它可能使用深度优先遍历而不是广度优先遍历,或者可能以不同的方式进行优化,但最终结果是相同的。

摘自图表数据库,第2版,作者: Ian Robinson,Jim Webber和Emil Eifrem,第154页:

要查找节点的关系,我们沿着该节点的关系指针指向它的第一个关系(本例中的LIKES关系)。从这里开始,我们遵循该特定节点的关系的双向链表(即,要么是开始节点的双向链表,要么是结束节点的双向链表),直到找到我们感兴趣的关系。

最后,@InverseFalcon指出,对于密集相关的节点,通过它们在50+关系附近的估计,这将以不同的方式实现。在这一点上,使用了一种略有不同的结构,该结构按类型和方向进行分组,因此降低了搜索成本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49854360

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档