微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 Neo4j 中的 Neo4jRepository 上为“使用周期提交”提供自动提交事务?

如何解决如何在 Neo4j 中的 Neo4jRepository 上为“使用周期提交”提供自动提交事务?

目标:

每天以编程方式将 2000 万条记录从 CSV 文件重复导入 Neo4j。

环境:

  • Neo 4.2.3,企业版。
  • Spring Boot v2.4.2

初始情况:


@Repository
public interface ImportDataDAO extends Neo4jRepository<Molecule,Long> {
  @Transactional
  @Query("USING PERIODIC COMMIT 500\n" +
      "CALL apoc.load.csv( $url,{mapping: $mapping} ) yield map AS row\n" +
      "MERGE (molecule:Molecule {moleculeId: row.moleculeId})\n" +
      "  ON CREATE SET molecule = row\n")
  void importData(
      @Param("url") String url,@Param("mapping") Map<String,Map<String,Object>> mapping
  );
}
  • 为避免内存不足错误,请使用 Using Periodic Commit 500
  • 产生的错误org.neo4j.driver.exceptions.ClientException: Executing queries that use periodic commit in an open transaction is not possible.

讨论:

Periodic Commit 是少数需要自动提交事务的函数之一,但是通过 Spring via @Transactional 只提供了一个普通的函数。在 Neo4j 浏览器中,我可以在 :auto 前面加上 Using Periodic Commit,导入将成功执行。在 @Transactional 注释中,我可以指定 PropagationIsolation功能,但我看不到为自定义查询定义自动提交事务的方法

解决问题:

如何使用上述自定义查询中的 Periodic Commit 进行 CSV 导入?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。