2013-01-03 55 views
2

我的问题简而言之就是我能否修改Neo4j使用的遍历逻辑 - 在伸展性计算过程中如何控制哪些边被遍历,哪些不是。Neo4j - 为图遍历添加逻辑

全面介绍:

我正在考虑从我们目前的数据库迁移到Neo4j的,我想知道如果Neo4j的是一个非常适合以下任务:

我们有大图约10M简单节点 - 他们的属性只是一个单一的ID。
我们还有3种边缘 - “标准”,“开放”和“关闭”。 “开放”和“关闭”也有一个“颜色”属性,所以它们是匹配的。每个“开放”边缘只有一个匹配的“关闭”边缘,例如,有一个开口边缘的颜色为“3”,因此还有一个关闭边缘的颜色相同。两个节点的遍历规则相当简单: 你可以随心所欲地穿过标准边,你可以随心所欲地通过开放边,同时保持堆栈中访问过的“开放”边的顺序但是(这是棘手的部分)当你来到一个有几个“关闭”边的交叉点时,必须穿过与最后遇到的“开放”边相匹配的关闭边,然后从堆栈中弹出该“开放”边。

例如:

a - [标准] - > B- [打开颜色:3] - > C- [标准] - > D- [关闭颜色:3] - > E
还有
D- [Close color: 4] - > F

请注意,D有两个“关闭”边缘,颜色不同。 通过上面定义的规则,E可以通过A到达,因为颜色堆栈顶部有[3]。
但是,F无法通过A.

可以将neo4j配置为这样的图遍历逻辑吗? 谢谢!

+2

看看文档中的neo4j遍历框架:http://docs.neo4j.org/chunked/milestone/tutorial-traversal.html它有回调的选项,关联关系遵循,还允许您订购这些关系,通过遍历状态对象,你可以保持你的本地堆栈的开启/关闭关系。 –

回答

0

这可以通过实现自己的PathExpander并传递给TraversalDescription来实现。正如Michael Hunger所指出的那样:BranchState可以用来优化扩展器,这样就不必检查每个扩展的完整路径,而是对每个遍历分支进行一些简化(不可改变的想法)。扩展器可以将修改状态传递给每个下一步。

不幸的是,neo4j手册缺乏使用分支状态的好例子。尽管这听起来很棒!