Как уменьшить время работы и использование памяти алгоритмом Лувена в графике Neo4j? - PullRequest
0 голосов
/ 04 февраля 2020

Это мои данные: Данные Neo4j

Это CQL:

"call algo.louvain.stream('','',{weightProperty: 'weight'}) YIELD nodeId,community return algo.getNodeById(nodeId).mno as name ,community","/mno-rel.csv",{});

Это конфигурация neo4j:

  • dbms.memory.heap.initial_size = 71440m
  • dbms.memory.heap.max_size = 71440m
  • dbms.memory.pagecache.size = 20g

Neo4j версия: neo4j-community-3.5.8

Когда я запускаю описанный выше алгоритм, это займет у меня 5 часов и займет более 70 г памяти.

Пожалуйста, помогите мне, как уменьшить объем памяти и время. Я очень ценю это: D

==================================== ===========================================

Ответ на вопрос logisima:

Общий размер магазина: 60,71 ГиБ

Процессор (ы): 40

Всего используется свободный доступный общий буфер / кэш

Память: 125G 114G 1,4G 337M 9,7G 9,8G

debug.log 20-02-05 23: 52: 54.946 + 0000 WARN [onki c .VmPauseMonitorComponent] Обнаружена виртуальная пауза остановки виртуальной машины: {pauseTime = 3882, gcTime = 21, gcCount = 1}

2020-02-05 23: 53: 05.327 + 0000 INFO [onkipProcedures] [al go -1] Лувен 0% раунд 3

2020-02-05 23: 53: 15.327 + 0000 INFO [onkipProcedures] [al go -2] Louvain 77% раунд 3

2020-02-05 23: 53: 25.385 + 0000 INFO [ onkipProcedures] [al go -3] Лувен 10% раунд 4

2020-02-05 23: 53: 35.378 + 0000 INFO [onkipProcedures] [al go -1] Лувен 90% раунд 4

2020-02-05 23: 53: 45.379 + 0000 INFO [onkipProcedures] [al go -4] Лувен 26% раунд 5

20 20-02-05 23: 53: 59.480 + 0000 INFO [onkipProcedures] [neo4j.BoltWorker-4 [bolt] [/10.3.99.111:49607]] Лувен 100% уровень: 7 сообществ: 7689984 q: 0.9808712031807056

2020-02-05 23: 54: 03.543 + 0000 WARN [onki c .VmPauseMonitorComponent] Обнаружена пауза остановки виртуальной машины VM: {pauseTime = 197, gcTime = 202, gcCount = 1}

2020-02-05 23: 54: 07.130 + 0000 WARN [onki c .VmPauseMonitorComponent] Обнаружена пауза остановки мира в виртуальной машине: {pauseTime = 184, gcTime = 243, gcCount = 1}

2020-02-05 23: 54: 21.578 + 0000 INFO [onkipProcedures] [al go -2] Louvain 0% раунд 1

2020-02-05 23: 54: 23.528 + 0000 WARN [onki c .VmPauseMonitorComponent] Обнаружена пауза остановки виртуальной машины: {pauseTime = 366, gcTime = 380, gcCount = 1}

2020-02-05 23: 54: 26.352 + 0000 WARN [onki c .VmPauseMonitorComponent] Обнаружена пауза остановки виртуальной машины: {pauseTime = 121, gcTime = 217, gcCount = 1}

2020-02-05 23: 54: 31.579 + 0000 INFO [onkipProcedures] [ al go -1] Louvain 80% раунд 1

2020-0 2-05 23: 54: 40.056 + 0000 WARN [onki c .VmPauseMonitorComponent] Обнаружена пауза остановки мира для виртуальной машины: {pauseTime = 5693, gcTime = 0, gcCount = 0}

2020-02 -05 23: 54: 41.580 + 0000 INFO [onkipProcedures] [al go -2] Louvain 98% раунд 1

2020-02-05 23: 54: 47.314 + 0000 INFO [onkipProcedures] [neo4j .BoltWorker-4 [bolt] [/10.3.99.111:49607]] Louvain 100% уровень: 8 сообществ: 7689984 q: -1.0

2020-02-05 23: 55: 11.177 + 0000 WARN [onki c .VmPauseMonitorComponent] Обнаружена виртуальная пауза остановки виртуальной машины: {pauseTime = 5269, gcTime = 0, gcCount = 0}

1 Ответ

0 голосов
/ 04 февраля 2020

Вы делаете лувен на всем вашем графике, ie. на все типы вашего узла и отношения.

Я не уверен, что это хорошая идея, потому что у вас нет однородного графика, и поэтому обычно такой результат не имеет значения (зависит от данных и варианта использования).

Вот почему на графике go имеется система для создания прогнозируемого графика, если это необходимо.

Для оптимизации вы можете ответить на эти вопросы:

  • Что такое размер (в Гб) вашей базы данных (:sysinfo в браузере)
  • Сколько у вас CPU / Core?
  • Сколько у вас оперативной памяти?
  • Есть ли что-то в debug.log

Приветствия

...