通过py2neo进行多处理和Neo4J插入/更新

2024-04-25 02:27:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我从事的一个项目需要通过py2neo将大量信息快速播放到Neo4J中,我在尝试使用Python的多处理库来加快进程时遇到了一个障碍

总的来说,我们所做的是双重的,这两个部分是同时发生的:

第1部分:

  • 在一对节点(a->;B)之间创建关系
  • 创建另一个节点,该节点与前一对(C->;A,C->;B)中的每一个都有一个关系
  • 将所有3个节点及其关系推入Neo4j
  • 将节点C的ID推送到卡夫卡主题

第2部分:

  • 通过python的多处理创建N个“线程”,所有这些线程都会打开它们自己的kafka使用者
  • 使用者阅读主题,并执行可能更新关系/节点或创建其他关系/节点的代码

出现的问题发生在第2部分,特别是在更新或创建关系或节点时。py2neo正在抛出一个py2neo.database.TransientError,根据文档,它是:

The database cannot service the request right now, retrying later might yield a successful outcome.

我已经尝试添加一个安全检查,该检查将重新尝试事务X次,并将其重新推送到kafka主题,以便在X次尝试失败后另一个线程尝试,但最终结果仍然不正确

当涉及到多线程/多处理时,我非常无知,所以我觉得我最初的研究工作已经严重偏离了基础,我浪费了很多周期试图纠正这一点——任何方向或见解都是非常值得赞赏的

如有必要,可以提供其他信息--不确定我可能遗漏了什么

谢谢


Tags: kafka项目gt信息主题节点关系使用者
1条回答
网友
1楼 · 发布于 2024-04-25 02:27:20

我认为问题在于您试图写入被其他查询阻止的节点/关系。这独立于py2neo,在使用另一个库/框架进行并行写入时,您应该会遇到类似的问题。请参见此处:https://neo4j.com/docs/java-reference/4.0/transaction-management/locking/

在这种情况下,py2neo错误和文档没有多大帮助

重试X次可能适用于较小的工作负载,您可以预期写锁会很快释放。但是,如果您不断地在图形的相同部分写入数据,则无法预测行为。有些写操作可能会永远卡在循环中

可能的解决方案

  • 拆分读/写任务,只有一个进程写入Neo4j
  • 以避免对锁定节点进行并行写入的方式预处理数据

相关问题 更多 >