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

jung님의 프로필 이미지
jung

작성한 질문수

스프링 배치

DB - JdbcPagingItemReader

JdbcCursorItemReader 질문 드립니다.

작성

·

53

·

수정됨

0

안녕하세요. 좋은 강의 잘 듣고 있습니다.

조금 헷갈리는 부분이 있는데

JdbcCursorItemReader 를 사용하면서 chunk size를 10으로 설정해서 100개의 데이터를 처리한다면

메모리에는 데이터가 최대 10개가 올라가는건가요?

아니면 100개까지 올라가는건가요?

몇백만건의 데이터를 처리할 때 사용가능한건지 궁금합니다.

 

그리고 커넥션을 한번 맺으면 끝까지 물고 있다고 이해했는데

몇백만건 처리를 할때 3시간이 걸린다면 실무에서 타임아웃도 3시간 이상으로 설정을 하나요?

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

Jung님, JdbcCursorItemReader에 대한 질문 주셔서 감사합니다.

JdbcCursorItemReader를 사용할 때 chunk size를 10으로 설정한다면 한 번에 처리되는 데이터는 최대 10개입니다. 즉, 메모리에는 한 번에 최대 10개의 데이터만 올라갑니다. 100개의 데이터를 처리하려면 이 프로세스가 10번 반복됩니다.

몇백만 건의 데이터 처리는 JdbcCursorItemReader의 사용으로 충분히 가능합니다. 이 경우, 메모리 효율성이 중요한데, chunk size를 적절히 설정하여 메모리 사용량을 관리할 수 있습니다.

데이터베이스와의 연결 관련하여, 일반적으로 데이터베이스 커넥션은 오픈 상태를 유지하며, 작업이 진행됩니다. 이로 인한 메모리 누수를 방지하기 위해선, 처리가 완료된 후 정확히 리소스를 해제해야 합니다. 스트림을 사용할 때는 try-with-resource 구문을 사용하여 자동으로 리소스가 해제되도록 하는 것이 좋습니다.

실무에서 몇백만 건의 데이터를 처리하는데 3시간 이상 걸린다면, 타임아웃 설정은 실제 작업 시간과 환경을 고려해 적절히 조정해야 합니다. 타임아웃을 너무 짧게 설정하면 데이터 처리 중에 연결이 끊길 위험이 있고, 너무 길게 설정하면 다른 문제가 발생할 수 있습니다. 따라서, 작업의 특성과 요구사항에 맞게 타임아웃 값을 설정하는 것이 중요합니다.

이 정보가 Jung님의 궁금증 해소에 도움이 되길 바랍니다.

jung님의 프로필 이미지
jung

작성한 질문수

질문하기