Neo4j:哪个更快,索引节点属性或关系属性?

时间:2015-07-21 23:27:14

标签: neo4j spring-data-neo4j

什么是更快/更好的方式来建模,搜索具有索引属性的节点,或者具有一个具有大量ChildOf关系的单个ROOT节点,每个节点具有等于index属性的关系属性并从ROOT开始搜索遍历具有正确关系属性的关系?假设所寻找的密钥是唯一的。

2 个答案:

答案 0 :(得分:2)

我的理解是,当您在label.property组合上声明索引时,当前版本的Neo4j(2.2.3)使用Neo4j的内置索引功能(从2.x版开始)在谓词中使用。对于关系属性,索引不使用较新的索引方案。您只能对关系属性使用旧的旧版索引,而这种索引的速度并不快。

请参阅此page上的说明。

答案 1 :(得分:1)

我认为这是思考这个问题的错误方法;您应该以对域更自然的方式对数据建模。

很难回答哪个会更快,因为您还没有指定索引将包含多少有效值,节点总数等等。在任何情况下,如果您尝试表达某种语义关系,例如ChildOf,您几乎肯定会更好地处理节点和关系。您应该考虑将一个节点的ID存储为另一个节点的属性值,以作为要避免的主要反模式。

如果另一方面,该属性是说,一个人的性别,M / F,你有1,000,000人,那么你最终得到两个"索引节点",每个有500,000关系,这不是一个好主意。

一般来说,neo4j设置为快速遍历关系,所以一般来说,你最好不要利用关系。但是有很多例外,这取决于你的域的语义,以及你的属性值的基数,所以YMMV。