by 커피요쿠르트d [SQLServer] SQLServer 대용량 [2014.07.17 11:31:56]
수고하십니다.
현재 상황을 간략히 설명드리면
db : sql server 2005
개발언어 : java , spring mvc
서비스 : 웹서비스
처리 로직
계단식 로직입니다. 1단계에서 처리되고 1차 db 저장
2단계에서는 1단계 자료를 가져와서 처리후 2차 db 저장.
..
이런식으로 지정한 단계까지 루프를 돕니다.
처리라하면. 외부라이브러리를 통해 결과를 받아서 이런저런 가공하고 db에 넣을 자료를 생성하는 과정입니다.
문제가 이전 단계에서 생성된 자료를 바탕으로 현재 단계에서 처리를 하므로 생성된 자료 수가 기하급수적으로 늘어납니다.
예를 들어 보면
1단계에서 아이템을 한개 받아서 처리를 통해 1차로 저장된 자료가 100개라 하면
2단계에서는 1단계에서 생성된 100개를 조회해와서 (select) 다시 같은 처리를 하므로 100*100개가 저장이 됩니다. (insert)
단계 n이 처리될 때마다 100^n 으로 자료가 증가합니다.
당연한이야기지만.. 처리해야할 건수가 많으니 시간이 오래걸리지요.
이 시간을 최대한 단축하고 싶습니다. ㅠㅠ
저장처리는 (insert into .. select . . . union all select union all .. 해서 max 2000 row )가 한번에 실행되게 배치처리되어 있습니다.
이게 외부라이브러리에서 던져주는 결과값을 이용해야하고, 이전 단계를 거친 자료를 사용해야하한다는 제약사항이 있어..
현재 로직은 변경이 불가능합니다.
그래서 드는 생각은 db 처리 시간을 최대한 줄여보자입니다.
sql server에서 자바 라이브러리를 호출 할 수 있다는 가정하에..
현재 자바에서 처리되는 로직을 sql server의 프로시저로 변환이 가능하다면 db 처리 시간이 많이 줄어들지 않을까
생각이 되었습니다.
그래서 질문입니다.
1.sql server 프로시저에서 자바라이브러리 호출이 가능할까요?
2.가능하다면 프로시저에서 많게는 100^10 (자리수 셋기도 힘드네요..) 처리가 가능할까요?
그리고.. 접근 방법부터 잘못되었다는 생각이 들기도해서요..
어차리 대량의 자료가 처리될 것이므로..
배치 처리로 가야하는게 맞을거 같다는 생각도 듭니다.
여러 의견 주시면 감사하겠습니다.
한 10단계까지 돌리고 싶은데.. 100^10 .. ㅜㅜ
아.. db를 변경할 생각은 있습니다. 오라클로는 안될거 같구요.
mysql이나 sql server 버전 업.. 은 가능할 것 같습니다.
참고로 db에 저장되는 자료는 그렇게 크지 않습니다. 칼럼 6개에 5~600자 이하 varchar 자료들입니다.
더 필요한 정보 있으시면 댓글에 말씀해주셔요.
너무 제한적인 정보로 질문을 드리는거 같기도 하네요.
그럼 부탁드립니다.