Neo4j查询速度很慢

时间:2018-04-25 15:00:55

标签: neo4j cypher cypher-3.1

我使用以下标签设置了Neo4j 3.3.5数据库:

  • 标签:30K
  • 专家:304K
  • 出版物:28M

标签和出版物之间存在1.2B关系。和出版物和专家之间的455K关系。

我已经在Mac(16G - Java 9)和Thinkpad(32G - Ubuntu Server Java 8)上进行了测试。两者都是一样的:非常慢。我在磁盘上的数据库是~50G。

标签名称上只有一个索引。这是我用过的唯一标准。

以下查询需要8秒钟:

git merge

查询的EXPLAIN是:

MATCH (expert:Expert)-[:PUBLISHED]->(publication:Publication)-[:HAS_TAG]->(tag:Tag)
USING INDEX tag:Tag(name)
WHERE tag.name IN ["Enzymes", "Metabolism", "Peptides"]
WITH expert, count(DISTINCT tag) AS relevantNumberOfTags, count(DISTINCT publication) AS relevantNumberOfPublications
WHERE relevantNumberOfTags = 3
RETURN expert.name, relevantNumberOfPublications
ORDER BY relevantNumberOfPublications DESC
LIMIT 40;

如果我使用尺寸而不是使用计数,我将不会有相关的出版物。我不知道如何优化此查询。返回结果需要8秒钟。所以我不知道这是否正常,因为我没有足够的RAM。例如。

1 个答案:

答案 0 :(得分:0)

根据您的查询,您正在扫描所有关系,因为您的关系类型是动态的。

例如,如果你这样做,它会非常快(Neo4j从统计数据库中获取计数):MATCH ()-[:ACTED_IN]->() RETURN count(*)

如果您有APOC并希望获得有关数据库的统计信息,建议您使用此过程:CALL apoc.meta.stats yield labelCount, relTypeCount, propertyKeyCount, nodeCount, relCount, labels, relTypes, stats