inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 배치

cursor 동작원리

해결된 질문

845

myeonjeong

작성한 질문수 2

1

안녕하세요 선생님.

https://www.inflearn.com/questions/341918

 

좋은 강의 잘 듣고있습니다! 감사합니다.

 

안녕하세요 선생님.

비슷한 고민을 하다가 이 질문을 찾아오게 되었는데요,

예를들어 1000 건의 데이터가 있고, 100건씩 데이터를 처리하려고 하더라도

실제로 SQL 자체는 단 한번 실행되고,

데이터베이스 서버에서 해당 resultSet 을 가지고있으면서

cursor 를 batch application 으로 반환하고,

cursor 를 통해서 필요시 DB server 에 실제 데이터를 요청한다고 이해했습니다. (그리고 받은걸 메모리에 올려서 작업)

 

그러면 결국 DB 서버에서는 그 많은 데이터를 전부 메모리에 올려놓고 batch 작업이 종료될 때까지 유지해야한다고 이해했는데, 혹시 제가 이해한게 맞나요?!

spring-boot spring-batch

답변 2

0

myeonjeong

image

그리고 executeInternal 을 실행하고 나면, 이런식으로 rows 를 개수만큼 가져오게 되는데

이건 실제 데이터가 아니라 (실제 데이터는 db 메모리에 전부 올라가있고)

 

그에 접근할 수 있는 자료구조를 따로 제공해줬다.... 그러므로 데이터가 아무리 많아도 메모리 이슈는 생기지 않는다.

라고 생각하면 되는걸까요?

 

답변 기다리겠습니다! 감사합니다!!

0

myeonjeong

더하여 처음 한 번 resultSet 이 만들어지고, 그것을 기반으로 계속 읽기가 진행되니

중간에 조건에 맞는 row 들이 더 추가되더라도

대상건으로 잡히지 않는 것이겠군요!

확인 부탁드립니다! 감사합니다 ㅎㅎ

1

정수원

java 에서 resultSet 은 db 의 데이터를 가지고 있는 상태가 아니라 데이터를 담기 위한 작업을 마찬 상태라 보시면 됩니다.

rs.next() 로 호출하는 순간 db 로 부터 fetchSize 만큼 데이터를 자바의 메모리로 로드하고 나서 다음 re.next() 를 호출하게 되면 db 가 아닌 자바의 메모리로부터 데이터를 참조하게 됩니다. 그리고 나서 fetchSize 만큼 데이터를 다 참조하고 나면 다시 db 로 부터 fetchSize 만큼 다시 데이터를 자바 메모리로 로드하게 됩니다.

여기서 db 에서 1000 건의 데이터를 자체 메모리에 다 올릴 것인지 아니면 일정한 크기의 버퍼만큼 올릴 것인지는 db 설정에 따라 결정될 것입니다.

다만 cursor 방식은 한번 연결된 db 커넥션이 모든 데이터를 db 로 부터 다 가져오기까지 커넥션이 열려있기 때문에 커넥션 타임아웃이 발생하지 않도록 대응이 필요합니다.

스프링 배치 버전 질문

0

122

1

소스코드가 어디에 있나요?

0

96

2

트랜잭션 예외

0

92

1

질문이 있습니다.

0

130

2

ChunkListener 에서 beforeChunk 의 실행 시점 관련 질문

0

125

2

여러 JOB 설정하는법

0

150

2

강의 자료 다른 방법 있을까요?

0

154

1

JobExecution과 JobExecutionContext와의 관계

0

186

2

특정 job만 실행

1

252

1

Batch 성능 질문

0

153

1

ItemReaderAdapter 종료

0

80

1

[ 강좌 Git 브랜치 문의 ] 섹션 9 > JdbcCursorItemReader, JpaCursorItemReader

0

179

2

Spring Batch 배포 질문

0

246

2

spring batch 버전

0

236

2

retry count 관련 질문

0

172

2

StepExecutionListener 의 afterStep 에서 return ExitStatus.FAILED 에 의한 동작에 의문이 갑니다.

0

330

2

jdbc, jpa 커서방식 조회 방식 차이 질문 (강사님께 답변 받고 싶습니다)

0

235

2

Multithread step과 AsyncItemProcessor

0

203

2

job 재실행

0

251

2

bean 생명주기 문제 도와주세요(@Scope("step"), @Autowired)

0

183

1

Multi-threaded-step과 Partitioning 차이 확인

0

175

2

jdbcCursorReader, jdbcPagingReader 질문

0

146

1

step muti-thread 질문

0

111

1

itemSteam open update close 질문

0

112

1