所以我想在某处有一些文档可以讨论这个问题,但我还没有找到它。 (我不希望答案有基准,只是〜“总的来说,这就是发生的事情”)
据我了解,每个标签都会为其成员的neoID
编制索引,因此向节点添加标签并查询该标签会产生性能优势。但是,如果节点上有10个标签(vs 1标签),性能如何比较? 100个标签怎么样?还是1000个标签?我想在节点上添加更多标签会带来某种惩罚吗? (除了索引占用的额外空间)
假设我有一个包含:Book
,:Person
,:Organization
和:CommunityGroup
个节点的数据库。每个都有uuid
属性。
(:Book)-[:OWNER]->(:Person)
(:Book)-[:OWNER]->(:Organization)
:Person
或:Organization
个节点可能拥有:Book
个节点,但:CommunityGroup
节点永远不会拥有uuid
个节点。如果客户通过我的应用程序uuid
为图书所有者,我可以通过几种不同的方式找到该节点
:Person
或:Organization
标签的MATCH (:Book)-[:OWNER]->(n {uuid: $the_id}) WHERE n:Person OR n:Organization
匹配。
uuid
MATCH (:Person {uuid: $the_id})
进行匹配并键入。
:Owner
:Person
和:Organization
节点添加MATCH (:Owner {uuid: $the_uuid})
标签
:Owner
选项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。
答案 0 :(得分:2)
我正在与graphconnect的Neo4j开发人员谈论此事,他告诉我,每个节点超过5个标签后会有性能下降。因此,根据经验,每个节点使用少于5个标签。