Я проводил некоторые тесты между Neo4J Community 3.3.3, Enterprise 3.3.9 и Enterprise 3.5.17.
К моему удивлению, чем новее версия, тем больше времени требуется для обработки запросов ,
И да, я проверял, что все индексы (как внутренние, так и APO C по всем параметрам, которые я использую для поиска) были на месте, когда я переносил БД. А для версии 3.5 я даже обновил индексы lucene до исходных, как и предлагалось.
Вот мои результаты для следующих запросов, которые дают около 12000 результатов каждый (около 500000 дБ)
PROFILE MATCH (u:User{uid:'16c01100-aa92-11e3-a3f6-35e25c9775ff'}),
(u)<-[:BY]-(ctx:Context)
WITH COLLECT (DISTINCT ctx.uid) as contexts
WITH 'context:('+apoc.text.join(contexts,' ')+')' AS query
CALL apoc.index.relationships('BY',query)
YIELD start, rel
WHERE 'Statement' IN LABELS(start)
RETURN DISTINCT start, rel;
3.3.3 сообщество: 3500 мс (1000 мс последовательных загрузок)
3.3.9 предприятие: 1850 мс (1350 мс)
3.5.17 предприятие: 3500 мс (1500 мс)
и затем для этого вида запроса:
PROFILE MATCH (u:User{uid:'16c01100-aa92-11e3-a3f6-35e25c9775ff'}),
(u)<-[rel:BY]-(s:Statement)
RETURN distinct s, rel;
3.3.3 сообщество: 1500 мс (1000 мс последовательных нагрузок)
3.3.9 предприятие: 3100 мс (1300 мс)
3.5.17 предприятие: 4000 мс (2800 мс)
Я также заметил, что собственные индексы отношений намного медленнее, чем индексы apo c.
Например, для двух запросов:
APO C :
CALL apoc.index.relationships('IN','user:16c01100-aa92-11e3-a3f6-35e25c9775ff')
YIELD start,end RETURN DISTINCT start, end;
против новых собственных индексов Neo4J:
CALL db.index.fulltext.queryRelationships('IN','user:16c01100-aa92-11e3-a3f6-35e25c9775ff') YIELD relationship WITH DISTINCT relationship, startNode(relationship) AS start, endNode(relationship) AS end RETURN start, end;
Индекс родных отношений в два (!) Раза медленнее.
Почему предприятие медленнее сообщества версия?
А как можно улучшить скорость?