我有一个包含超过 100 万条记录的 csv 文件。我想对这些记录进行一些处理并将所有记录保存在数据库中。
我尝试了一些选项,例如。
将所有实体保存在一个 GO 中
jpaepository.save(entities);
这种方法需要永远并且永远不会竞争。适用于记录数量较少的情况。
一一保存所有实体
entities.forEach(jpaRepository::save);
这个方法完成了,但是需要花费大量时间,而且内存使用量也很高。
最佳答案
根据您的问题,我会推荐以下内容 -
- 创建一个读取文件的服务,例如
FileReaderService
- 创建一个写入一定数量的记录(例如一次 1000 条)的服务,我们将其称为
StorageService
。将其注入(inject)到FileReaderService
- 在
save_N_records
方法上添加@Transactional
注释。 - 从
FileReaderService
重复调用StorageService.save_N_records
。每次调用时,请确保编写日志来监控进度。 - 如果可能的话,我会禁用表上的索引,这样插入速度会更快,然后在插入完成后将其重新打开。当然,这在在线系统上是不可能的,只能在离线报告系统上实现。希望这有帮助!
关于java - 如何使用 Spring-Data JPA 保存数百万条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46237791/