DB 대용량 조회

김경태·2024년 3월 19일

약 80만건의 sql 조회 시 java.lang.OutOfMemoryError: Java heap space가 발생하였다.

조회 결과를 자바 리스트 객체에 담아서 데이터 처리를 하는것이 문제라고 판단하여, 메모리 소모를 줄이면서 대용량 데이터 조회 방법을 찾던 중 Cursor 를 이용하는 방법을 찾았다.

반환된 ResultSet의 특정 행에 대한 참조를 조작할 수 있다.

Cursor<T>Iterable<T>를 확장하기 때문에 for문에서 foreach처럼 작성할 수 있다.

Closable 인터페이스도 확장하기 때문에 try문에 쓰거나 close()로 닫아야 한다.

그리고 반드시 트랜잭션 내에 있어야 한다.

Cursor를 사용하면 모든 데이터가 메모리에 적재된 상태가 아니라도 데이터를 소비할 수 있다. Cursor 로 반환된 데이터는 iteration을 반복할 수 있는 상태가 되면 Cursor를 반환하여 이를 소비할 수 있게된다.

profile
잊지 않기 위해 기록

0개의 댓글