【发布时间】:2012-12-17 16:22:39
【问题描述】:
简而言之,我的问题是我是否可以修改 Neo4j 使用的遍历逻辑——在可达性计算期间,如何控制哪些边被遍历,哪些不被遍历。
完整说明:
我正在考虑从我们当前的数据库迁移到 neo4j,我想知道 neo4j 是否适合以下任务:
我们有大约 1000 万个简单节点的大型图 - 它们的属性只有一个 id。
我们也有 3 种边缘 - “标准”、“打开”和“关闭”。 "opening" 和 "closeing" 也有一个 "color" 属性,所以它们是匹配的。每个“开”边都有一个匹配的“闭”边。例如,有一个开边颜色为“3”,所以也有一个闭边颜色相同。
我们需要解决遍历规则相当简单的两个节点之间的可达性问题: 您可以根据需要通过标准边缘,您可以根据需要通过开放边缘,同时保持堆栈中访问的“开放”边缘的顺序但是(这是棘手的部分)当您到达具有多个“关闭”边缘,您必须通过与遇到的最后一个“打开”边缘匹配的关闭边缘,然后从堆栈中弹出该“打开”边缘。
例如:
a -[标准]->B-[打开颜色:3]->C-[标准]->D-[关闭颜色:3]->E
还有
D-[关闭颜色:4]->F
请注意,D 有两个“闭合”边缘,颜色不同。
根据上面定义的规则,A 可以访问 E,因为颜色堆栈的顶部有 [3]。
但是,A 无法访问 F。
neo4j 可以配置成这样的图遍历逻辑吗? 谢谢!!
【问题讨论】:
-
查看文档中的 neo4j 遍历框架:docs.neo4j.org/chunked/milestone/tutorial-traversal.html 它具有回调选项以遵循哪些关系,还允许您对这些关系进行排序,您可以使用遍历状态对象保留本地一堆开/关关系。
标签: graph neo4j reachability graph-traversal