인프런 커뮤니티 질문&답변

JIN님의 프로필 이미지
JIN

작성한 질문수

자바 ORM 표준 JPA 프로그래밍 - 기본편

영속성 컨텍스트 2

em.persist에서 쓰기 지연 SQL 저장소의 성능에 관한 질문이 있습니다.

작성

·

338

0

=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오) 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예

[질문 내용]
영속성 컨텍스트 2 강의에 12분쯤 나오는 그림을 보면서 든 생각입니다.

예를 들어 회원 가입이나 게시글 및 댓글 올리기 같은 경우에는 insert가 하나씩 들어갈 것 같아 1차 캐시나 쓰기 지연 SQL 저장소에 차곡차곡 쌓이는 일이 없을 것 같은데요. 만약 한 트랜잭션 안에서 대량의 데이터를 select 해서 insert 하는 경우, 그런 데이터의 양이 1만건, 10만건을 넘어간다고 하면 1차 캐시 및 쓰기 지연 SQL 저장소에 10만건을 쌓아놓고 커밋할 때 DB에 차례대로 한 줄 씩 저장이 될 것 같습니다. 그럴 때 메모리가 터진다거나, 속도가 느려진다거나 과부하가 걸려 성능 제한이 걸리는 경우가 있을 것 같은데 이런 경우를 대비해서 따로 처리해야 하는 로직이나 개념이 있다면 알고 싶습니다!

답변 3

0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. JIN님

JPA 책 15.4.3 배치 처리를 참고해보시면 도움이 되실거에요^^

감사합니다.

0

JIN님의 프로필 이미지
JIN
질문자

구글링을 하다 보니 강의 뒷부분에 배치 처리하는 부분이 나오는군요..!! 강의 완주하고 다시 질문하러 오겠습니다

0

JIN님의 프로필 이미지
JIN
질문자

예를 들어 100만건이 들어있는 데이터를 limit을 두지 않고 List<Table> result = em.createQuery("select t from table t", Table.class).getResultList();

이런 식으로 사용하는 건 JPA라도 성능에 많이 좋지 않을 것으로 예상됩니다. 만약 전체 데이터가 꼭 필요한 경우라면? limit 을 두고 분산 처리를 무조건 하는 건지... 보통의 경우 실무에서는 어떤 식으로 해결하는지도 궁금합니다!!

JIN님의 프로필 이미지
JIN

작성한 질문수

질문하기