ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 채번
    카테고리 없음 2017. 5. 13. 01:00



    채번


    꾸준한 Insert가 발생하는 테이블에서 Key가 되는 일련번호를 할당하기 위한 다양한 방법들이 있다. 보편적으로 사용되는 몇가지 기법들에 대해 정리해보고자 한다. 





    채번테이블 이용 


    장점

    1) 중복에러 없음

    2) 순차적 데이터 입력가능

    3) ( max값을 구해서 +1 ) 방법보다 lock이 덜 걸린다. 


    단점

    1) 잠금현상 유발

    2) 성능저하

    3) 관리항목 증가


    채번 테이블이 성능 저하를 불러오는 이유

    1) update 채번테이블 set 채번 = value

    2) insert 대상 테이블 values(채번값)

    3) commit 

    위 트랜잭션 동안 다른 트랜잭션들이 대기상태에 있게 되기 때문이다. 


    사용자 수가 많은 업무 테이블을 lock을 걸기 보다는, 채번 테이블을 별도로 두어 상대적으로 사용자 수가 적은 채번 테이블을 lock을 거는 방식을 사용한다. 





    테이블에 최대값 적용


    장점

    1) 빠른 성능

    2) 순차적 데이터 입력 가능

    3) 관리 항목 증가 없음


    단점

    1) 중복에러 가능


    중복에러의 원인

    - 동시에 처리하는 트랜잭션의 양이 많아질 경우 가끔식 중복 에러가 유발될 수 있다. 

    해당 테이블에서 데이터를 처리하는 모든 사용자가 동시에 처리하는 경우에 중복에러가 발생 될 수 있다.

    ( insert into max(col) +1 이라는 쿼리가 동시에 실행될 경우에 발생한다. )

    채번시 구분코드 같은 값과 같이 PK로 구성 ( 구분코드 + (max(col) + 1 ) 하게 하여 중복에러를 회피를 할 수 있다.




    시퀀스 오브젝트 ( Oracle DB 이용시 ) 


    장점 

    1) 빠른 성능

    2) 중복에러 없음

    3) 잠금현상 없음

    단점

    1) 순차적 데이터 입력 불가능

    2) 관리항목 증가


    시퀀스 오브젝트는 읽기만 하면 증가하는 특징을 가지고 있다. 그래서 가끔 이빨이 빠진것처럼 중간이 비는 경우가 발생된다. 

    => 순차적 데이터 입력 불가능.


    MySQL에는 시퀀스란 오브젝트가 따로 존재하지 않는다. 대신 테이블별 특정 컬럼에 auto_increment 라는 옵션을 사용하여 채번을 관리할 수 있다. 



    AUTO_INCREMENT


    장점 

    - 성능이 빠름

    - 사용하기 편함


    단점

    - 키에 반드시 속해 있어야 함

    - 테이블 의존적임( 여러 테이블에서 동시사용 불가)

    - 롤백시 빈 번호 발생 

    - 체계를 부여하기 불편





    결론


    채번의 방식에는 논리적으로 생각할 수 있는 여러 전략들이 있다. 어떤 채번방식을 사용할지에 대한 선택은 사용할 대상 테이블의 Connection빈도와 Logic의 구성에 따라 달라질수 있다.  









Designed by Tistory.