문제가 있었다.
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 스케쥴링을 하는 소스를 작성해 보겠다.
댓글 없음:
댓글 쓰기