Neo4j 在大量插入后变慢
neo4j slows down after lots of inserts
我是 Blockchain2graph project 的所有者,它从比特币核心 rest API 读取数据并在 Neo4j 中将块、地址和交易作为图形对象插入。
经过一些导入后,进程变慢,直到 the memory is full。我不想使用 CSV 导入。我的问题不是性能,我的目标是在应用程序不因内存而停止的情况下插入东西(即使这需要相当多的时间)
我正在使用 spring-boot-starter-data-neo4j。
在我的代码中,我不时地尝试使 session.clear
但它似乎没有影响。重启tomcat8后,又变快了。
由于您的项目是关于大量插入的,因此我不会使用像 Spring Data Neo4j 这样的 OGM 来写入数据。
您不希望会话将您的数据保存在客户端上。
相反,使用 Cypher 直接发送您从 BlockChain API 获得的更新,作为每个请求的批处理,请参阅 my blog post for some examples(其中一些我们也在 SDN/Neo4j-OGM 下使用引擎盖)。
您仍然可以将 SDN 用于单个实体处理 (CRUD),这就是我书中 OGM 减少样板文件的好处。
但是对于具有聚合、过滤、投影和路径匹配的更复杂的读取操作,我仍然会在带注释的存储库方法上使用 Cypher,返回可以映射到 DTO 列表的行。
我是 Blockchain2graph project 的所有者,它从比特币核心 rest API 读取数据并在 Neo4j 中将块、地址和交易作为图形对象插入。
经过一些导入后,进程变慢,直到 the memory is full。我不想使用 CSV 导入。我的问题不是性能,我的目标是在应用程序不因内存而停止的情况下插入东西(即使这需要相当多的时间)
我正在使用 spring-boot-starter-data-neo4j。
在我的代码中,我不时地尝试使 session.clear
但它似乎没有影响。重启tomcat8后,又变快了。
由于您的项目是关于大量插入的,因此我不会使用像 Spring Data Neo4j 这样的 OGM 来写入数据。
您不希望会话将您的数据保存在客户端上。
相反,使用 Cypher 直接发送您从 BlockChain API 获得的更新,作为每个请求的批处理,请参阅 my blog post for some examples(其中一些我们也在 SDN/Neo4j-OGM 下使用引擎盖)。
您仍然可以将 SDN 用于单个实体处理 (CRUD),这就是我书中 OGM 减少样板文件的好处。
但是对于具有聚合、过滤、投影和路径匹配的更复杂的读取操作,我仍然会在带注释的存储库方法上使用 Cypher,返回可以映射到 DTO 列表的行。