Neo4j:在单个节点上有多个标签会带来什么性能影响?

时间:2017-09-23 15:38:28

标签: neo4j

所以我想在某处有一些文档可以讨论这个问题,但我还没有找到它。 (我不希望答案有基准,只是〜“总的来说,这就是发生的事情”)

据我了解,每个标签都会为其成员的neoID编制索引,因此向节点添加标签并查询该标签会产生性能优势。但是,如果节点上有10个标签(vs 1标签),性能如何比较? 100个标签怎么样?还是1000个标签?我想在节点上添加更多标签会带来某种惩罚吗? (除了索引占用的额外空间)

为什么我要问

假设我有一个包含:Book:Person:Organization:CommunityGroup个节点的数据库。每个都有uuid属性。

  • (:Book)-[:OWNER]->(:Person)
  • (:Book)-[:OWNER]->(:Organization)

:Person:Organization个节点可能拥有:Book个节点,但:CommunityGroup节点永远不会拥有uuid个节点。如果客户通过我的应用程序uuid为图书所有者,我可以通过几种不同的方式找到该节点

  1. 将节点与具有:Person:Organization标签的MATCH (:Book)-[:OWNER]->(n {uuid: $the_id}) WHERE n:Person OR n:Organization匹配。
    • uuid
  2. 询问客户端节点类型,并使用MATCH (:Person {uuid: $the_id})进行匹配并键入。
    • :Owner
  3. :Person:Organization节点添加MATCH (:Owner {uuid: $the_uuid})标签
    • :Owner
  4. 选项2必须是最快的。 3是总体上最好查询。 1最大限度地减少额外标签+客户工作。

    显然这个例子很小,但是如果我在所有地方创建额外的标签(如:Owner标签)会怎样。对此有性能损失吗?我可以很容易地看到单个节点获取10或20个标签,可能更多,这取决于我应用它们的自由度。 SharedPreferences prefs = getSharedPreferences("My_Prefs", MODE_PRIVATE); 标签在技术上是不必要的,因为我有找到节点所需的标签......

    思考?感谢您的任何反馈!

    注意:我找到this S.O. question on multiple label performance,但它只针对一些标签(~4),而不是10/20/100。

1 个答案:

答案 0 :(得分:2)

我正在与graphconnect的Neo4j开发人员谈论此事,他告诉我,每个节点超过5个标签后会有性能下降。因此,根据经验,每个节点使用少于5个标签。