티스토리 뷰

📖 Real MySQL 책 내용 발췌...

 

스트리밍 방식

서버 쪽에서 처리해야 할 데이터가 얼마나 될지에 관계없이 조건에 일치하는 레코드가 검색될 때마다 바로바로 클라이언트로 전송해주는 방식. 클라는 쿼리 요청 후 곧바로 첫번째 레코드를 전달 받음. 마지막 레코드를 받는 시점은 알 수 없음. 클라이언트는 바로 데이터 가공 시작할 수 있음.

레코드 수에 상관 없이 빠른 응답 시간 보장 가능.

 

 

💡 클라이언트 도구, API에 따라 스트리밍 처리 방식이 다를 수 있음

JDBC => mysql 서버는 레코드를 읽자마자 클라이언트로 그 결과를 전달할 것이지만, JDBC가 mysql 서버로부터 받는 레코드를 일단 자체적인 버퍼에 모두 담아 두고, 마지막 레코드가 전달되면 그 때서야 비로소 클라이언트 어플리케이션에 반환함.

즉, mysql 서버는 스트리밍 방식으로 처리해서 반환하지만 클라이언트의 JDBC 라이브러리가 버퍼링을 함.

( 불필요한 네트워크 요청이 최소화되기 때문에 전체 throughput이 좋아서 이 방식을 채택하는 것이라고 함)

 

default 설정이 그렇다는 거고 767p 참고하면 JDBC에서도 스트리밍 방식으로 가져올 수도 있는 듯?

- Statement.setFetchSize(Integer.MIN_VALUE) 설정 => mysql서버에서 결과 레코드가 아닌 ResultSet이라는 핸들러를 내려주면, 클라이언트 단의 ResultSet.next() 함수 호출 될때마다 한 건씩 클라이언트로 내려보냄 (statement 수준의 옵션)

- 서버 커서. mysql 서버에 결과 셋에 상응하는 크기의 임시 테이블 생성. ( 커넥션 생성할 때 JDBC url 옵션에 설정 )

 

 

 

버퍼링 방식

order by, group by 같은 처리는 쿼리 결과가 스트리밍 되는 것을 불가능하게 함.

우선 스토리지에서 일치하는 모든 레코드를 가져온 후, mysql 서버에서 정렬 & 그루핑을 마친 후 (일괄 가공) 클라이언트에 보내야 하기 때문.

이 후처리를 하는 동안 client는 계속 기다려야 함. 응답 속도가 느려짐.

'시리즈 > Stream Processing' 카테고리의 다른 글

이벤트 스트림 parallel processing (kafka, kinesis, axon)  (1) 2023.11.19
Kinesis Lease  (1) 2023.11.19
kafka rebalancing  (1) 2023.11.19
iterable, iterator 그리고 generator  (0) 2022.08.08
iterator 패턴  (0) 2022.07.31
댓글
공지사항
최근에 올라온 글