java - 如何使用 Spring-Data JPA 保存数百万条记录

标签 java spring hibernate jpa

我有一个包含超过 100 万条记录的 csv 文件。我想对这些记录进行一些处理并将所有记录保存在数据库中。

我尝试了一些选项,例如。

  1. 将所有实体保存在一个 GO 中

    jpaepository.save(entities);

这种方法需要永远并且永远不会竞争。适用于记录数量较少的情况。

  • 一一保存所有实体

    entities.forEach(jpaRepository::save);

  • 这个方法完成了,但是需要花费大量时间,而且内存使用量也很高。

    最佳答案

    根据您的问题,我会推荐以下内容 -

    1. 创建一个读取文件的服务,例如 FileReaderService
    2. 创建一个写入一定数量的记录(例如一次 1000 条)的服务,我们将其称为 StorageService。将其注入(inject)到 FileReaderService
    3. save_N_records 方法上添加 @Transactional 注释。
    4. FileReaderService 重复调用 StorageService.save_N_records。每次调用时,请确保编写日志来监控进度。
    5. 如果可能的话,我会禁用表上的索引,这样插入速度会更快,然后在插入完成后将其重新打开。当然,这在在线系统上是不可能的,只能在离线报告系统上实现。希望这有帮助!

    关于java - 如何使用 Spring-Data JPA 保存数百万条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46237791/

    相关文章:

    java - 使用 java Google App Engine (GAE) 自动运行任务队列

    java - 在 Cucumber 步骤定义上传递多个参数

    Spring AMQP 异常处理基础知识

    spring - 使用 Spring 踩踏 websocket 和 sockJS 消息丢失

    java - 在运行时动态禁用 hibernate 验证注释?

    java - Hibernate 对象刷新未发生

    java - 使用按功能包约定将我的框架类放在哪里?

    java - 基于 CMS 的应用程序的一般架构

    java - 我如何在java中执行lchown,它可以在所有Unix风格: Linux, redhat、hp-ux、rhel-5和Solaris上工作

    java - 在 Spring Boot 中以编程方式注册 Spring Converter