如何解决如何在 Neo4j 中的 Neo4jRepository 上为“使用周期提交”提供自动提交事务?
目标:
每天以编程方式将 2000 万条记录从 CSV 文件重复导入 Neo4j。
环境:
- Neo 4.2.3,企业版。
- Spring Boot v2.4.2
初始情况:
- 使用 Spring Data Neo4j (SDN) 和 spring-boot-starter-data-neo4j。
- 通过
Neo4jRepository
(DAO) 的自定义查询导入数据集:
@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
注释中,我可以指定 Propagation
和 Isolation
等功能,但我看不到为自定义查询定义自动提交事务的方法。
待解决问题:
如何使用上述自定义查询中的 Periodic Commit
进行 CSV 导入?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。