Я настроил базу данных Neo4j 3.3.5 со следующими метками:
- Метка: 30K
- Эксперт: 304K
- Публикация: 28M
Между тегами и публикациями существует 1,2B взаимосвязь.И 455K отношений между публикациями и экспертами.
Я провел тесты на Mac (16G - Java 9) и Thinkpad (32G - Ubuntu Server Java 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 секунд, чтобы вернуть результат.Так что я не знаю, нормально ли это, потому что мне не хватило бы оперативной памяти, например.