Neo4j标签,关系类型和密码匹配性能

时间:2014-10-03 16:55:42

标签: neo4j cypher

假设我有一个用户和其他类型节点的大量图表。每种类型都有一个标签,有些可能有多个标签。由于我定义了用户及其对节点的访问权限,因此用户和节点之间存在一种关系类型:CAN_ACCESS。在其他对象之间,存在不同的关系类型,但是出于访问控制的目的,当我们从用户开始时,一切都涉及CAN_ACCESS关系。

我从不在不使用标签的情况下进行匹配,所以我的意图和希望是,通过匹配标签,可以否定从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 个答案:

答案 0 :(得分:0)

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