oracle 선착순용 sequence
CREATE SEQUENCE BMT_TEST2
INCREMENT BY
1
START WITH 1
MINVALUE 1
MAXVALUE
3000
NOCYCLE
NOORDER
NOCACHE
——=———-
- CREATE SEQUENCE BMT_TEST2 : BMT_TEST2라는 시퀀스를 만든다.
- INCREMENT BY 1 : 1씩 증가시킨다.
- START WITH 1 : 1부터 시작한다
- MINVALUE 1 : 최소값은 1이다.(1부터 시작하니깐, 그닥 의미는…
- MAXVALUE 3000 : 최대 3000까지 증가. 무한대일 경우 보통 9999999999999 라고 적어주겠지…
- NOCYCLE : 값을 돌려쓰지 않는다.(즉, MAXVALUE값을 초과할려고하면 에러남)
- NOORDER : 순서를 보장하지 않는다.(성능 때문이지만, NOCACHE를 해서 그닥 효과는 없다.)
- NOCACHE : 캐시하지 않는다. 즉, 요청할 때 시퀀스의 값을 가져온다.
- 이렇게 만들 경우 1~3000까지만 시퀜스가 발급됨, 그외로 발급을 시도할 경우 에러!
- 물론 MAXVALUE는 최대로 두고, 시퀀스로 만들어진 값으로 체크해도 별 차이는 없다.
-
PHP등에서
if($seq > 3000){ exit(‘초과’);}
처럼 - 장점
- 시퀀스는 완벽하게 순차적으로 값이 나온다.
-
물론 매번 값을 체크하므로 성능상에 문제가 될 수 있지만, DB 테이블에서 count로 현재 상황을 알아보는 SELECT하는 것 보다는 훨씬 가볍다.(엄청나게 차이나더라)
- 완벽하게 최대치를 제할 할 수 있다.
-
물론 느슨한 선착순일 경우 count정도로 할 수도 있겠지만, 딱딱 맞아야한다면 시퀀스 사용이 필수다.
- 단점
- 시퀀스 관리가 어럽다.
장애라도 발생할 경우, 테이블만으로 했을 경우는 테이블만 관리하면 되지만,
시퀀스도 같이 쓸경우
서비스중지+테이블관리+시퀀스 관리
를 동시에 해야한다.(서비스 중지 안하면 시퀀스 관리가 안된다. 계속 시퀀스를 사용해서 값이 증가될테니깐)
—–=———–