Я начинаю работу с Neo4J 2.0.1, и я уже сталкиваюсь с проблемами производительности, которые заставляют меня думать, что мой подход неправильный. До сих пор у меня есть один тип узла (все с меткой NeoPerson) и один тип отношений (все с лейблом NeoWeight). В моей тестовой установке насчитывается около 100 000 узлов, и каждый узел имеет от 0 до 300 отношений с другими узлами. Существует индекс Neo4j2.0 в единственном поле NeoPerson, называемом profile_id (например, CREATE INDEX ON: NeoPerson (profile_id)). Глядя вверх NeoPerson по profile_id достаточно быстро:Получение связей для одного узла медленное
neo4j-sh (?)$ match (n:NeoPerson {profile_id:38}) return n;
+----------------------------+
| n |
+----------------------------+
| Node[23840]{profile_id:38} |
+----------------------------+
1 row
45 ms
Однако, когда я бросить отношения в микс, он получает довольно медленно.
neo4j-sh (?)$ match (n:NeoPerson {profile_id:38})-[e:NeoWeight]->() return n, e;
+----------------------------------------------------------------------------+
| n | e |
+----------------------------------------------------------------------------+
| Node[23840]{profile_id:38} | :NeoWeight[8178324]{value:384} |
| Node[23840]{profile_id:38} | :NeoWeight[8022460]{value:502} |
...
| Node[23840]{profile_id:38} | :NeoWeight[54914]{} |
+----------------------------------------------------------------------------+
244 rows
2409 ms
Насколько я понимаю, что обход отношения с одного узла должно быть достаточно эффективным (не то, что точка с использованием базы данных графа?), Так почему же принимает более 2 секунд для такого простого запроса на небольшой набор данных? Я не видел способа добавить индекс к отношениям, ключи которых являются исходными и/или целевыми узлами.
Был ли это первый запуск запроса или последующий запуск? Первый запуск должен загружать данные с диска. И может быть медленнее. –
Обычно вы видите улучшение 10-20 после первого запуска, если вы не разделяете более подробную информацию о своей базе данных и конфигурации с нами. –
Да, выполнение одного и того же запроса дважды подряд значительно быстрее (585 мс вместо 2409 мс). Но 2,4 секунды для такого простого запроса на небольшом наборе данных, хотя холодно? Я не могу поверить, что люди используют Neo4j в производстве, если это лучшее, что он может сделать. Что мне не хватает? –