-
2021.08.29 기록장TIL 2021. 8. 28. 22:48
ToDo
- 토이 프로젝트
- 책 읽기
Done
- 토이 프로젝트
Weekly goal
- 책 읽기
그나마 성능 최적화
jpa를 사용하다 보니 편한 점이 많지만 그만큼 잘 알고 사용해야 한다.
n+1문제라던가..
이번에 최적화를 하면서 사용한 방법은
fetch join과 default batch size를 늘려주는 방법이다.
전자는 긁어올 때 join 해서 가지고 오고, 후자는 프록시에 접근할 때 in쿼리를 통해 한번에 가지고 온다.
그러다 가끔 모든 정보를 가진 entity를 가지고 오고 싶을 때가 있다.
이럴 경우 모두 fetch 조인을 해서 가지고 올 수 없다.
multiple bag exception이 나기 때문이다.
하이버네이트는 일대다를 가지고 올 때 중복이 제거돼서(distint사용 시) 가지고 온다.
DB의 반환은 중복이 들어있다는 이야기이다. 근데 리스트이니 순서를 보장해야 하면서
리스트의 리스트의 순서까지 보장할 수는 없기에 예외가 발생한다.
해결법은 멤버의 자료구조를 순서를 보장하지 않는 set으로 변경하던가, 멤버까지만 페치 조인으로 읽고 다음은 in쿼리로 한번 더 나가는 것이다.
https://jojoldu.tistory.com/414
Spring Batch JPA에서 N+1 문제 해결
안녕하세요? 이번 시간엔 Spring batch에서 N+1 문제 해결을 진행해보려고 합니다. 모든 코드는 Github에 있기 때문에 함께 보시면 더 이해하기 쉬우실 것 같습니다. (공부한 내용을 정리하는 Github와
jojoldu.tistory.com
여기까지는 select관련이고
insert시나 update시에도 bulk insert를 사용할 수 있다.
본인이 자주 사용하는 generatedvalue의 identity는 save 할 때 id값을 다시 가져와야 하므로 flush를 한다.
근데 bulk insert는 한 번에 모아서 보내기 때문에 정상 작동하지 않는다.
사용하기 위해서는 generatedvalue를 변경해야 한다.
bulk insert 사용법은 간단히 perperties에 항목을 추가하면 된다.
https://bottom-to-top.tistory.com/51
Spring Data Jpa Bulk Insert 하기
나는 내가 모르는 기술을 만나면 반갑기도 하지만 엄청 겁을 먹어버리는데 처음 맡은 업무에서 파트장님이 '이 부분을 JPA 를 이용해서 bulk insert 하도록 변경해주시면 됩니다!' 하셨을 때 살짝 식
bottom-to-top.tistory.com
auto increment의 bulk insert에 관해
https://jojoldu.tistory.com/558
(MySQL) Auto Increment에서 TypeSafe Bulk Insert 진행하기 (feat.EntityQL, JPA)
여러 글에서 언급하고 있지만, JPA환경에서 키 생성 전략을 Auto Increment로 할 경우 BulkInsert가 지원되지 않습니다. Spring Batch Item Writer 성능 비교 MySQL 환경의 스프링부트에 하이버네이트 배치 설정..
jojoldu.tistory.com
'TIL' 카테고리의 다른 글
2021.09.02 기록장 (0) 2021.09.01 2021.08.30~09.01 기록장 (0) 2021.08.29 2021.08.27~28 기록장 (0) 2021.08.26 2021.08.26 기록장 (0) 2021.08.25 2021.08.24~25 기록장 (0) 2021.08.23