Ошибка ввода-вывода Fedora и ошибка 111 при многопроцессорной обработке Python - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть коллекция в mongodb 4.0.2. Я читаю эти документы с помощью итерации в python 2.7, извлекаю из них информацию и записываю информацию в виде узлов и связей в neo4j 3.4.6 на моем fedora 26 компьютере.

Вот некоторые показатели. Коллекция монго насчитывает около 70 000 документов. Ожидается, что это создаст около 1200 узлов в neo4j и 20 000 связей. Поскольку обработка данных в python (второй шаг в последовательности mongo -> python -> neo4j) занимает некоторое время, я использую python multiprocessing для ускорения выполнения задачи. Я использовал 2*cpu_count() количество процессов. Так как у меня машина четырехъядерная, начинается 8 процессов. Процессы разделяются в пуле, сначала разбивая 70000 документов монго на 8 вложенных документов, а затем обрабатывая каждый вложенный документ параллельно в каждом из 8 процессов. Между каждым запросом neo4j я установил интервал в 100 мс. dbms transaction timeout в neo4j установлено на 3 минуты.

Проблема, с которой я сталкиваюсь, заключается в том, что через некоторое время Fedora начинает выдавать ошибку ввода-вывода и не принимает никакого взаимодействия с терминалом. База данных neo4j становится недоступной, и дальнейшая запись останавливается. Наконец, ошибка 111, ошибка соединения отклоняется на каждой итерации. Я должен принудительно выключить компьютер. Что такое пропущенная оптимизация многопроцессорной системы, которая должна это исправить?

В качестве альтернативного подхода я могу преобразовать монго-документы в CSV и использовать APOC для быстрого построения графика с использованием CSV, но я хочу понять, какие упущения оптимизации мне не хватает, что создает проблемы в первом подходе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...