我使用以下标签建立了一个Neo4j 3.3.5数据库:
标签和出版物之间有1.2B的关系。455 k出版物与专家之间的关系。
我在Mac (16G-Java 9)和Thinkpad (32G-UbuntuServerJava 8)上做了测试。两者都是一样的:非常慢。我的数据库在磁盘上是~50G。
标签名上只有一个索引。这是我唯一用过的标准。
以下查询耗时8秒:
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;对该查询的解释是:
+-------------------+----------------+-----------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Operator | Estimated Rows | Variables | Other |
+-------------------+----------------+-----------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| +ProduceResults | 40 | anon[311], anon[329], anon[335], relevantNumberOfPublications, expert, expert.name, ... | |
| | +----------------+-----------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| +Projection | 40 | expert.name, relevantNumberOfPublications -- anon[311], anon[329], anon[335], ... | {expert.name : , relevantNumberOfPublications : } |
| | +----------------+-----------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| +Top | 40 | anon[311], anon[329], anon[335], relevantNumberOfPublications, expert, relevantNumberOfTags | anon[335]; 40 |
| | +----------------+-----------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| +Projection | 3243 | anon[329], anon[335] -- anon[311], relevantNumberOfPublications, expert, relevantNumberOfTags | { : expert.name, : relevantNumberOfPublications@255} |
| | +----------------+-----------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| +Filter | 3243 | anon[311], relevantNumberOfPublications, expert, relevantNumberOfTags | anon[311] |
| | +----------------+-----------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| +Projection | 4324 | anon[311] -- relevantNumberOfPublications, expert, relevantNumberOfTags | {expert : expert, relevantNumberOfTags : relevantNumberOfTags, relevantNumberOfPublications@255 : relevantNumberOfPublications@255, : relevantNumberOfTags = { AUTOINT1}} |
| | +----------------+-----------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| +EagerAggregation | 4324 | relevantNumberOfPublications, relevantNumberOfTags -- expert | expert |
| | +----------------+-----------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| +F ilter | 18695308 | anon[22], anon[62], expert, publication, tag | tag.name IN { AUTOLIST0}; tag:Tag |
| | +----------------+-----------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| +Expand(All) | 20141244 | anon[62], tag -- anon[22], expert, publication | (publication)-[:HAS_TAG]->(tag) |
| | +----------------+-----------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| +Filter | 454092 | anon[22], expert, publication | publication:Publication |
| | +----------------+-----------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| +Expand(All) | 454092 | anon[22], publication -- expert | (expert)-[:PUBLISHED]->(publication) |
| | +----------------+-----------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| +NodeByLabelScan | 304114 | expert | :Expert |
+-------------------+----------------+-----------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+如果我使用大小,而不是使用计数,我将不会有相关的出版物。我不知道如何优化这个查询。返回结果需要8秒。因此,我不知道这是否正常,因为我将没有足够的内存,例如。
发布于 2018-04-25 15:51:23
使用查询时,您正在扫描所有关系,因为关系的类型是动态的。
例如,如果您这样做,它将非常快(Neo4j从它的stats数据库中获取计数):MATCH ()-[:ACTED_IN]->() RETURN count(*)
如果您有APOC,并且希望获得有关数据库的一些统计信息,我建议您使用以下过程:CALL apoc.meta.stats yield labelCount, relTypeCount, propertyKeyCount, nodeCount, relCount, labels, relTypes, stats
https://stackoverflow.com/questions/50025520
复制相似问题