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