Агрегирование запросов на миллионы узлов

Я пытаюсь запросить ~ 8 миллионов узлов в базе данных neo4j. Я могу делать запросы, которые достаточно быстро попадают в индекс для точных совпадений, но есть ли эффективный способ делать скопления?

MATCH (r:Resident) RETURN r.forename, count(r.forename) ORDER BY count(r.forename)

Этот запрос просто сидит там, пока я не перезапущу сервер. Я читал руководства по производительности, и я смотрю vm_stat, и, похоже, он быстро исчерпал страницы. Я попытался настроить настройки кучи памяти /JVM на разные вещи, но я не уверен, что полностью знаю, что я делаю;) У меня есть MacBook Air емкостью 8 ГБ с накопителем SSD, если это полезно для подсказки настройки. Кроме того, здесь моя статистика по моей базе данных из webadmin:

10,236,226 nodes

56,280,161 properties

10,190,430 relationships
2 relationship types

14,535 MB database disk usage
1 ответ

Я вставил 8M-узлы всего лишь с одним пропеллером и получил этот запрос до ~ 20 с без изменения настроек по умолчанию (после разогрева кеша - первый раз за 90 секунд), что сопоставимо с другими базами данных, такими как postgres (которые я также тестировал),

Некоторые вещи, которые вы могли бы попытаться сделать:

  • увеличьте размеры на соответствующих настройках mmio файлов (в соответствии с размерами файлов в data/graph.db/) в conf/neo4j.properties (вверху)
  • увеличить размер кеша узла в neo4j.properties
  • увеличить кучу init/max в neo4j-wrapper.conf
  • убедитесь, что у вас осталось достаточно ОЗУ

licensed under cc by-sa 3.0 with attribution.