Neo4j 3.5-在12B关系图上仅搜索关系非常慢-如何提高性能?

时间:2018-12-28 15:47:18

标签: performance neo4j relationship

在250M节点,12B rel图中,我有大约12,000种不同的关系类型。

我有时希望运行一个查询,例如: 匹配(n)-[r]-(m),其中type(r)=“ located_in”返回n,r,m限制为10;

以返回具有located_in关系的所有内容。 这非常慢-在具有大量内存和为此DB优化的Java内存设置的大型系统上,上述过程要花费数小时。

我需要某种关系索引还是查询不佳?

谢谢。

2 个答案:

答案 0 :(得分:1)

您可以通过在节点和关系上添加标签来显着提高查询性能,从而显着减少要搜索的相关节点和关系的数量。通过仅返回真正需要的属性而不是整个节点,可以进一步提高性能。

MATCH (n:TypeA)-[r:LOCATED_IN]->(m:TypeB) RETURN n.attributeA, r, m.attributeB LIMIT 10;

答案 1 :(得分:1)

查看查询的说明,您会注意到这是在执行AllNodesScan来查找您的起始节点,因此它与图形中的所有节点匹配,并扩展了图形中的所有关系。

正如ThirstForKnowledge所说,在图形中添加标签并在查询中使用标签会将其更改为NodeByLabelScan,因此它将仅访问具有给定标签的所有节点。

Neo4j不支持架构索引中的关系,尽管Neo4j 3.5.x允许您创建全文索引,该索引可用于为特定类型的关系建立属性索引。这可能有助于您的查找,但是您尚未显示希望获得这种关系的特定属性。