oracle 선착순용 sequence

less than 1 minute read

오라클 시퀀스 설명

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정도로 할 수도 있겠지만, 딱딱 맞아야한다면 시퀀스 사용이 필수다.

  • 단점
  • 시퀀스 관리가 어럽다.
    장애라도 발생할 경우, 테이블만으로 했을 경우는 테이블만 관리하면 되지만,
    시퀀스도 같이 쓸경우
    서비스중지+테이블관리+시퀀스 관리
    를 동시에 해야한다.(서비스 중지 안하면 시퀀스 관리가 안된다. 계속 시퀀스를 사용해서 값이 증가될테니깐)

—–=———–


🔗original-link

Updated: