728x90

몇 가지 방법은 다음과 같다.

  • Entity Manager를 이용한 벌크 insert: Entity Manager를 사용하여 데이터를 한 번에 여러 개의 엔티티로 삽입합니다.
  • Named Query를 이용한 벌크 insert: JPA Named Query를 사용하여 여러 개의 엔티티를 삽입합니다.
  • Spring Batch를 이용한 벌크 insert: Spring Batch를 사용하여 대량의 데이터를 처리하고 insert합니다.
  • JPA Batch Insertion API를 이용한 벌크 insert: JPA Batch Insertion API를 사용하여 대량의 데이터를 처리하고 insert합니다.

시간은 데이터베이스와 환경 설정에 따라 다르다고 하지만 가장 효율적이라는 JPA Batch Insertion API를 사용한 방법을 한번 알아보자.

JPA Batch Insertion API 장점.

  • JPA Batch Insertion API는 일괄 처리 방식을 사용하여 대량의 데이터를 처리합니다. 이를 통해 일반적인 방식보다 더 빠른 처리 속도를 보입니다.
  • JPA Batch Insertion API는 데이터를 처리할 때 JDBC의 addBatch()와 executeBatch() 메서드를 사용합니다. 이는 데이터베이스 쿼리 수행 속도를 높일 수 있습니다.
  • JPA Batch Insertion API는 영속성 컨텍스트를 플러시하지 않습니다. 이로 인해 영속성 컨텍스트에서 관리되는 객체의 수가 줄어들어 성능을 향상시킵니다.

예시 코드

@Entity
@Table(name = "employee")
public class Employee {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "first_name")
    private String firstName;

    @Column(name = "last_name")
    private String lastName;

    @Column(name = "salary")
    private Double salary;

    // 생성자, Getter/Setter 메서드 생략
}

application.yml

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/example_db?characterEncoding=UTF-8&serverTimezone=UTC
    username: [username]
    password: [password]
  jpa:
    properties:
      hibernate:
        jdbc.batch_size: 50
        order_inserts: true
        order_updates: true
@Repository
public class EmployeeRepository {

    @PersistenceContext
    private EntityManager entityManager;

    public void saveAll(List<Employee> employees) {
        Session session = entityManager.unwrap(Session.class);
        session.setJdbcBatchSize(50); // 설정 파일에서 설정한 값과 같음.

        for (int i = 0; i < employees.size(); i++) {
            session.persist(employees.get(i));
            if (i % 50 == 0 || i == employees.size() - 1) {
                session.flush();
                session.clear();
            }
        }
    }
}

위 코드에서 JPA Batch Insertion API를 사용하여 대량의 데이터를 처리하는 방법은 다음과 같습니다:

  • EntityManager를 통해 Session 객체를 가져옵니다.
  • Session.setJdbcBatchSize() 메서드를 사용하여 배치 크기를 설정합니다. 이 값은 application.yml 파일에서 설정한 hibernate.jdbc.batch_size 값과 같아야 합니다.
  • Session.persist() 메서드를 사용하여 데이터를 삽입합니다.
  • 일정한 배치 크기(위 예시에서는 50)에 도달하거나 마지막 데이터까지 삽입한 후, Session.flush()와 Session.clear() 메서드를 사용하여 데이터를 플러시하고 영속성 컨텍스트를 클리어합니다.

위 코드는 대량의 데이터를 처리하는 방법 중 하나로, 배치 크기와 영속성 컨텍스트 관리를 통해 성능을 최적화합니다. 또한 설정 파일에서 JDBC 배치 크기를 지정하여 더욱 성능을 향상시킬 수 있습니다.

결론으로

JPA Batch Insertion API를 사용하여 대량의 데이터를 처리하는 것이 가장 효율적입니다. 이 방법을 사용하면 JDBC 배치 삽입을 수행할 때와 같이 대량의 데이터를 한 번에 처리하여 더욱 성능을 향상시킬 수 있습니다.

따라서 대량의 데이터를 처리해야 하는 경우 이 방법을 사용하는 것이 좋을것 같네요~!


내저장소 바로가기 luxury515

+ Recent posts