neo4j Session.clear 多线程
neo4j Session.clear in multiple thread
当我在 Neo4j 中插入大量数据时,我遇到了 Neo4j 的内存问题。在每次大治疗后添加 session.clear()
后情况变得更好。
我打算为每个插入物制作不同的线程。我是否必须以 session.clear()
结束所有线程?会有什么后果?
session.clear()
建议在批量操作时释放内存。
分析一下会话正在做什么可能有助于理解为什么应该清除它。
假设您总共加载了 1000 个实体。在会话的每次保存调用中,它必须检查所有实体是否可能发生更改,并在需要时保留它们(因此检查属性是否更改以及对象图中的任何关系引用是否也更改)。
如果您不对这些实体执行任何操作,这会非常昂贵。
不过关于你的问题,如果会话没有在线程之间共享(也就是每个线程一个不同的会话),那么在线程中进行大量操作后清除它是安全的。
您可能想查看我对这个问题的回答,以便在批量插入期间进一步考虑性能:Why is neo4j's insert speed so low in this example?
当我在 Neo4j 中插入大量数据时,我遇到了 Neo4j 的内存问题。在每次大治疗后添加 session.clear()
后情况变得更好。
我打算为每个插入物制作不同的线程。我是否必须以 session.clear()
结束所有线程?会有什么后果?
session.clear()
建议在批量操作时释放内存。
分析一下会话正在做什么可能有助于理解为什么应该清除它。
假设您总共加载了 1000 个实体。在会话的每次保存调用中,它必须检查所有实体是否可能发生更改,并在需要时保留它们(因此检查属性是否更改以及对象图中的任何关系引用是否也更改)。
如果您不对这些实体执行任何操作,这会非常昂贵。
不过关于你的问题,如果会话没有在线程之间共享(也就是每个线程一个不同的会话),那么在线程中进行大量操作后清除它是安全的。
您可能想查看我对这个问题的回答,以便在批量插入期间进一步考虑性能:Why is neo4j's insert speed so low in this example?