컨트룰 단에서 동시에 여러개의 트랜잭션을 보내지는 못하는가요?
- 작성자 :
- 오*환
- 작성일 :
- 2014-10-08 07:39:56
- 조회수 :
- 732
- 구분 :
- 실행환경
- 진행상태 :
- 완료
Q
안녕하세요 ^^
기존에 쿼리가 너무 느린게 있습니다. 약 30분이 걸리네요... 데이터도 많고.. SAP쪽 떙겨오는 부분도 있어서 느립니다... 쿼리도 엄청 길구요...^^ DBA가 튜닝은 다 하여서.. DB쪽에는 더 이상 손볼수가 없는 단계입니다... 또한.. 뷰나 M뷰 이런것도 안되는 상태이구요...
그래서 30분짜리 쿼리를 여러개를 나눠서 와스 단에서 데이터를 취합을 해보자는 겁니다... UNION 걸린 놈들을... 분산해서 동시에 실행을 해서... 나온 결과를 취합하자는겁니다.. 30분짜리를 5개로 나누면.. 약 10분 이내로... 다 취합이 되겠다는 이론인데....
일반적으로 스프링 자체가 쓰레드 인데... 그쪽에서 DB질의 하는 부분을 역시 비동기식이나 쿼리 질의가 가능하게끔 가능한가요...?
지금은 무조건 순차적으로 아이바티스로 넘어가고 그 다음 쿼리 또 실행되고.. 그렇게 되는데...
찾아보니깐.. @ASYNC 라는 어노테이션이 존재하던데요... 이 부분을 사용하면 비동기 방식으로.. 여러개의 아이바티스 호출을 동시에 날릴수 있는건지요...?
이 부분에 대한 문의를 구합니다...
그럼 감사합니다...
기존에 쿼리가 너무 느린게 있습니다. 약 30분이 걸리네요... 데이터도 많고.. SAP쪽 떙겨오는 부분도 있어서 느립니다... 쿼리도 엄청 길구요...^^ DBA가 튜닝은 다 하여서.. DB쪽에는 더 이상 손볼수가 없는 단계입니다... 또한.. 뷰나 M뷰 이런것도 안되는 상태이구요...
그래서 30분짜리 쿼리를 여러개를 나눠서 와스 단에서 데이터를 취합을 해보자는 겁니다... UNION 걸린 놈들을... 분산해서 동시에 실행을 해서... 나온 결과를 취합하자는겁니다.. 30분짜리를 5개로 나누면.. 약 10분 이내로... 다 취합이 되겠다는 이론인데....
일반적으로 스프링 자체가 쓰레드 인데... 그쪽에서 DB질의 하는 부분을 역시 비동기식이나 쿼리 질의가 가능하게끔 가능한가요...?
지금은 무조건 순차적으로 아이바티스로 넘어가고 그 다음 쿼리 또 실행되고.. 그렇게 되는데...
찾아보니깐.. @ASYNC 라는 어노테이션이 존재하던데요... 이 부분을 사용하면 비동기 방식으로.. 여러개의 아이바티스 호출을 동시에 날릴수 있는건지요...?
이 부분에 대한 문의를 구합니다...
그럼 감사합니다...
A
안녕하세요. 오세환님.
우선 @Async를 사용하시면 서비스 layer 부분에서 말씀하신 것 처럼 비동기적으로 호출될 수 있기 때문에, Controller에서 여려 개의 Service를 비동기적으로 호출하실 수 있습니다.
추가적으로, 조회된 데이터를 취합하신다고 하신 것 처럼 결과를 받아와야 하는 경우에 대해서는 java.utik.concurrent.Future 타입으로 리턴을 받으셔야 하며, 이런 경우 Controller는 호출한 서비스들을 대상으로 isDone() 메소드를 통해 반복적으로 완료여부룰 확인하셔서 결과를 받아오셔야 합니다.
그럼, 즐거운 하루되십시오.
감사합니다.
우선 @Async를 사용하시면 서비스 layer 부분에서 말씀하신 것 처럼 비동기적으로 호출될 수 있기 때문에, Controller에서 여려 개의 Service를 비동기적으로 호출하실 수 있습니다.
추가적으로, 조회된 데이터를 취합하신다고 하신 것 처럼 결과를 받아와야 하는 경우에 대해서는 java.utik.concurrent.Future 타입으로 리턴을 받으셔야 하며, 이런 경우 Controller는 호출한 서비스들을 대상으로 isDone() 메소드를 통해 반복적으로 완료여부룰 확인하셔서 결과를 받아오셔야 합니다.
그럼, 즐거운 하루되십시오.
감사합니다.