我在mongodb 4.0.2
中有一个收藏集。我正在python 2.7
计算机上通过迭代读取这些文档,从中提取信息,并将信息作为节点和关系写在neo4j 3.4.6
中。
以下是一些指标。 mongo集合包含大约70,000个文档。预计这将在neo4j和20,000个关系中创建约1200个节点。由于python中的数据处理(mongo中的第二步-> python-> neo4j序列)需要一些时间,因此我使用python fedora 26
来使任务更快。我使用了multiprocessing
个进程。由于我的机器是四核机器,因此需要启动8个进程。通过首先将70,000个mongo文档拆分为8个子文档,然后在这8个流程的每一个中并行处理每个子文档,将进程划分为池。在每个neo4j查询之间,我设置了100毫秒的间隔。 neo4j中的2*cpu_count()
设置为3分钟。
我面临的问题是,一段时间后,Fedora开始引发I / O错误,并且不接受任何终端交互。 neo4j数据库将变得不可访问,并且任何进一步的写入都将停止。最后,在每次迭代时都引发错误111,拒绝连接错误。我必须强制关闭计算机。我缺少什么可以解决此问题的多处理优化?
作为一种替代方法,我可以将mongo文档转换为CSV并使用APOC使用CSV快速创建图形,但是我想了解在第一种方法中会产生问题的优化点。