2014-10-03 64 views
0

说我有一个庞大的用户和其他类型的节点图。每种类型都有一个标签,有些可能有多个标签。由于我正在定义用户及其对节点的访问,因此用户和节点之间存在一种关系类型:CAN_ACCESS。在其他对象之间,存在不同的关系类型,但是出于访问控制的目的,当我们从用户开始时,每件事都涉及CAN_ACCESS关系。Neo4j标签,关系类型和密码匹配性能

我从来没有使用标签来执行匹配,所以我的意图和希望是,通过匹配标签来排除我的User节点中存在一个严重使用关系类型的性能缺点。显然,这场比赛可能会变得凌乱:

MATCH (n:`User`)-[r1:`CAN_ACCESS`]->(n2) 

但我永远不会那样做。我应该这样做:

MATCH (n:`User`)-[r1:`CAN_ACCESS`]->(n2:`LabelX`) 

我的问题,则是本场比赛的目标端标签的用法是否实际上等同于具有User和任何给定的标签之间的专用关系类型。换句话说,这是否:

MATCH (n:`User`)-[r1:`CAN_ACCESS`]->(n2:`LabelX`) 

给我相同的性能,这一点:

MATCH (n:`User`)-[r1:`CAN_ACCESS_LABEL_X`]->(n2) 

如果CAN_ACCESS_LABEL_X总是去(N:`User`) - >(N:`LabelX`) ?

+1

马克刚刚写了一篇关于此的好博客文章,表现并不完全一样,但足够好:http://www.markhneedham.com/blog/2014/09/30/neo4j-genericvague-relationship-names/ – 2014-10-03 22:30:47

+0

哇!这确实是一个很好的时机。我开始研究基于此的应用程序代码,并在此过程中发现了Neo4j.rb中的一个错误。谢谢! – subvertallchris 2014-10-04 13:57:08

回答

0

正如Michael Hunger的评论所指出的,Mark Needham的博客文章here表明,当您使用专用关系类型而不是依赖标签时,性能最好。