D/B 키값 무한 증가 문제 관련
글쓴이: jazzsir / 작성시간: 목, 2011/09/29 - 10:48오전
sqlite3 사용중입니다. 환경은 자원이 제한적인 embedded 이구요.
질문은
D/B에 키값을 자동 증가하는 식으로 넣고 있는데,
중간값이 지워지고 뒤에 채워지고 하는식으로 되면
계속 키값이 무한정 증가 되고 그러다보면 문제가 생길것 같은데요..
키값을 수시로 재정의 해야하는지... 아님 다른 방법이 있는지...
일반적으로 위 문제를 회피하기 위해서 어떻게 하는지 궁금합니다.
Forums:
저도 위의 문제로 많은 고민을 했었는데요. 중요하기도
저도 위의 문제로 많은 고민을 했었는데요. 중요하기도 합니다.
일단, 비지니스 모델에서 발생할 수 있는 최대 키의 개수를 생각해 보면,
32비트 머신에서는 정수로 4G개(40억개)까지 키를 생성할 수 있습니다.
키를 정수로 했을때 위와 같다는 것이고,
문자열(DB에서는 varchar)를 사용하다면 조합되는 키의 개수는 엄청나게 늘어납니다.
그래서 오라클에서는 테이블의 행을 구별하는 키(rowid)를 문자열 조합으로 만듭니다.
발제글은 아무래도,
키를 정수로 했을때 32비트 머신에서 40억이 넘어갈때 오버플로우 문제를 고민하신듯 하고,
이것을 해결하기 위해서 저는 아래와 같은 방법을 제안해 봅니다.
40억개의 집합은 이미 정해져 있고,
이 한도 내에서 삭제되는 키는 별도의 키보관용 테이블에
push하고 pop하는 형태로 재사용 하는 것입니다.
이렇게 하면 어느정도는 해결할 수 있을듯...
한가지더 사족을 붙이면,
사실, 한테이블에서 행의 개수가 40억개가 넘어 가는 설계는 자제하시는 것이 좋습니다.
만약 행의 개수가 40억개가 넘어 간다면,
설계를 좀 더 고민하셔서 테이블을 분할 하시는 것도 좋겠습니다.
From:
*알지비 (메일: rgbi3307(at)nate.com)
*커널연구회(http://www.kernel.bz/) 내용물들을 만들고 있음.
*((공부해서 남을 주려면 남보다 더많이 연구해야함.))
굉장히 많은 양의 레코드를 만들고 지우나요?
성능문제를 걱정해서 32bit를 사용하시나요? 그런게 아니면 그냥 64bit 쓰시죠.
성능문제라면 64bit machine을 사용하시기 바랍니다.
댓글 달기