neo4j 对大型数据库的简单查询
neo4j simple query on large database
谁能给我解释一下:
在Neo4j website上建议在搜索时使用节点标签
然而,当我在大型数据库(200 万个节点)上执行此操作时:
MATCH p = (n:Foo)-[r:Bar]->(m:Foo)<-[s:Bar]-(o:Foo) RETURN p LIMIT 1
它会导致可怕的广度优先搜索,该搜索会比较 billon 对象,并且该函数永远不会 returns。
另一方面,无标签等效项在不到一秒内完成。
MATCH p = (n)-[r:Bar]->(m)<-[s:Bar]-(o) RETURN p LIMIT 1
✿
有什么方法可以让标签版本执行相同类型的搜索吗?
这将取决于您的数据,但您可以尝试将该查询分解成多个部分,努力获得最终结果。
MATCH (m:Foo)
WHERE SIZE( (m)<-[:Bar]-(:Foo) ) > 1
WITH m LIMIT 1
MATCH p = (n:Foo)-[r:Bar]->(m)<-[s:Bar]-(o:Foo)
RETURN p LIMIT 1
如果我们从模式中的中心 :Foo 节点开始,而不是它现在正在做的事情,那么规划器是否会以不同的方式执行查询,这可能也是值得检查的,它从模式的每个可能的末端节点开始扩展然后运行 在中间查找节点的散列连接。
MATCH (m:Foo)
WITH m
MATCH p = (n:Foo)-[r:Bar]->(m)<-[s:Bar]-(o:Foo)
RETURN p LIMIT 1
谁能给我解释一下:
在Neo4j website上建议在搜索时使用节点标签
然而,当我在大型数据库(200 万个节点)上执行此操作时:
MATCH p = (n:Foo)-[r:Bar]->(m:Foo)<-[s:Bar]-(o:Foo) RETURN p LIMIT 1
它会导致可怕的广度优先搜索,该搜索会比较 billon 对象,并且该函数永远不会 returns。
另一方面,无标签等效项在不到一秒内完成。
MATCH p = (n)-[r:Bar]->(m)<-[s:Bar]-(o) RETURN p LIMIT 1
✿
有什么方法可以让标签版本执行相同类型的搜索吗?
这将取决于您的数据,但您可以尝试将该查询分解成多个部分,努力获得最终结果。
MATCH (m:Foo)
WHERE SIZE( (m)<-[:Bar]-(:Foo) ) > 1
WITH m LIMIT 1
MATCH p = (n:Foo)-[r:Bar]->(m)<-[s:Bar]-(o:Foo)
RETURN p LIMIT 1
如果我们从模式中的中心 :Foo 节点开始,而不是它现在正在做的事情,那么规划器是否会以不同的方式执行查询,这可能也是值得检查的,它从模式的每个可能的末端节点开始扩展然后运行 在中间查找节点的散列连接。
MATCH (m:Foo)
WITH m
MATCH p = (n:Foo)-[r:Bar]->(m)<-[s:Bar]-(o:Foo)
RETURN p LIMIT 1