我试图了解 Neo4j 的有效使用模式,特别是参考高度节点。为了说明我在说什么,我的User
节点具有我已建模为节点的属性。所以我的表中有一些关系,例如
(:User)-[:HAS_ATTRIB]->(:AgeCategory)
等等等等。问题是其中一些AgeCategory
节点的度数非常高,在 100k 左右,查询如
MATCH (u:User)-->(:AgeCategory)<--(v:User), (u)-->(:FavoriteLanguage)<--(v)
WHERE u.uid = "AAA111" AND v.uid <> u.uid
RETURN v.uid
(匹配与 共享相同年龄类别和最喜欢语言的所有用户AAA111
)非常非常慢,因为您必须为FavoriteLanguage
链表中的每个元素运行一次AgeCategory
链表(或者至少我是这样理解的)。
我认为这个查询需要几分钟才能解决我做错了什么这一事实很清楚,但我很好奇处理这样的查询的正确程序是什么。我应该单独从每个查询中提取匹配的用户并将它们与内存中的哈希进行比较吗?有没有办法在节点上的关系上放置索引?对于模式开始,这甚至是一个好主意吗?