【发布时间】:2021-01-29 15:47:36
【问题描述】:
我有一个相当大的图表(18 亿个节点和大致相同数量的关系),我正在执行以下查询:
MATCH (n:Article)
WHERE n.id IN $pmids
MATCH (n)-[:HAS_MENTION]->(m:Mention)
WITH n, collect(m) as mentions
RETURN n.id as pmid, mentions
ORDER BY pmid
其中 $pmids 是字符串列表,例如["1234", "4567"] 这个列表的长度在 100-500 之间变化。
我目前将数据保存在 neo4j docker 社区实例中,并进行了以下配置修改:NEO4J_dbms_memory_pagecache_size=32G,NEO4J_dbms_memory_heap_max__size=32G。已为 Article.id 创建索引。
此查询的运行速度很慢(大约 5 秒),我想优化以加快运行速度。作为工作的一部分,我可以访问 neo4j 企业,因此一种方法是将这些数据作为 neo4j 企业帐户的一部分提取,我可以在其中调整高级配置设置。
一般来说,是否有人对我如何提高性能有任何提示,无论是优化密码查询本身、增加工作人员还是 neo4j.conf 中的其他设置?
提前致谢。
对于任何感兴趣的人 - 我也在 neo4j forums 中提出了这个问题,并且已经有一些有趣的优化建议(尤其是围绕“类型提示”来触发向后索引,并使用模式理解而不是 collect()
【问题讨论】: