Open kwonslog opened 4 weeks ago
연관되어 있는 엔티티가 ToOne 인 경우 패치 조인을 사용하여 한번에 가져온다.
연관되어 있는 엔티티가 ToMany 인 경우
- 페이징이 필요 하면 ToOne 관계는 패치 조인으로 처리하고 ToMany 관계는 @BatchSize 를 사용한다. (패치 조인과 페이징을 같이 사용 할때 엔티티의 관계가 복잡한 경우 JPA는 모든 데이터를 메모리에 로드하여 페이징 처리를 할 수 있다. 성능이슈발생)
- 페이징이 필요 없으면 distinct + 패치 조인을 사용한다.
- https://inma.tistory.com/165
- https://velog.io/@imcool2551/JPA-%EC%84%B1%EB%8A%A5-%EC%B5%9C%EC%A0%81%ED%99%94
jpa를 이용한 batch insert 와 jdbc 를 이용한 방법 중에서 성능은 jdbc를 사용하는 것이 더 좋다. 성능비교1,성능비교2
jpa는 영속성 관리를 통해 실제 쿼리가 발생하기 때문에 단순히 대량의 데이터를 insert 할때는 불리한 점이 있다.
jpa에서 @Id 생성 전략이 IDENTITY이면 batch insert 를 사용 할 수 없다. 결국 돌고 돌아 JdbcTemplate 를 사용하게 된다.관련링크
jpa에서 batch insert 하기 위해 설정해야 하는 부분들이 있다. 그 중 batchSize 값을 지정해야 한다.flush, clear 처리를 통해 쿼리를 실행하는데 batchSize 만큼 처리하기 때문이다.관련링크
대량의 데이터를 빠르게 insert 해야 한다면 JdbcTemplate을 사용하자.
즉시 로딩과 지연 로딩
지연 로딩
N + 1 문제
2차 캐시
처리 순서
캐시 관리