Pages

2014년 2월 21일 금요일

[SPRING] Quartz를 이용한 JOB 스케쥴링 - (1)

솔루션 개발중에 SESSION 테이블이 누적되는 부분에 대해서 어떻게 해야 할까? 하는

문제가 있었다. 

1. 하루에 SESSION 테이블에 대략 몇 건이 INSERT 되는 것일까? 대략 10만 건 잡았다.
2. 한 달(30일) 기준으로 하루 10만 건 INSERT되면 총 300만건 쌓이는 것이다. 
3. 1년이면 300만 * 12 즉 3600만건이 쌓인다. 

이를 어떻게 관리하는 것이 좋을까? 

테이블을 파티션으로 나누어야 하는것일까? 그런데 여기서 문제가 DB를 하나만 이용하는

것이 아니고 ORACLE 부터 왠만한 DB를 다 지원해야 한다는 것이다. 그래서 파티션으로

나누는 것은 포기를 했다. 

생각하다 결정을 한 것은 다음과 같다.

1. TABLE을 두 개 만든다. SESSION, SESSION2 두 테이블을 만든다.
2 . SESSION, SESSION2 두 테이블 사용주기는 1주일로 둔다. 

왜? 두 테이블을 놓고 일주일로 사용주기를 뒀는가? 간단하다. 지극히 개인적인 생각이지만

한 테이블에서 INSERT 후 일정 기간이 지나고 난 다음에 DELETE를 하려고 했다. 하지만

생각을 해보니 1주일 단위로 DELETE 되는 건수가 평균 70만건 정도 된다. 그 이상이 될수도

있는 상황이라서 두 테이블을 둔 후 TRUNCATE TABLE을 하기로 결정했다. 

결론은 이렇다. 최초 월요일 부터 일요일까지 SESSION 테이블에 먼저 INSERT가 

이루어지고 그 다음 월요일 00시00분에 SESSION2 테이블에 INSERT가 이루어 진다. 

이때 대략 00시 10분 정도에 스케줄을 실행 시켜서 SESSION 테이블을 TRUNCATE하는 

것이다. 이 방법이 옳은지는 모르겠지만 현재 이 방법을 택하고 개발이 진행 되었다. 

간단하지만 Quartz를 이용해서 JOB 스케쥴링을 하는 소스를 작성해 보겠다. 





    


댓글 없음:

댓글 쓰기