【问题标题】:Neo4j labels, relationship types, and cypher matching performanceNeo4j 标签、关系类型和密码匹配性能
【发布时间】:2014-10-03 16:55:41
【问题描述】:

假设我有一个包含大量用户和其他类型节点的图表。每种类型都有一个标签,有些可能有多个标签。由于我正在定义用户及其对节点的访问权限,因此用户和节点之间存在一种关系类型: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 ALWAYS (n:`User`)-->(n:`LabelX`)?

【问题讨论】:

  • 马克刚刚写了一篇很棒的博客文章,性能并不完全相同但足够好:markhneedham.com/blog/2014/09/30/…
  • 哇!这真是个好时机。我开始研究基于此修改我的应用程序的代码,并在此过程中发现了 Neo4j.rb 中的一个错误。谢谢!

标签: neo4j cypher


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多