본문 바로가기
ETC/System Design

Types of Time-sequential ID generator

by devson 2022. 10. 17.

일단 시작에 앞서 auto increment ID를 피하는 이유로는 How to Do UUID as Primary Keys the Right WayWhy You Should Avoid Auto-Incremented Integers를 참고하길 바란다.

 

그렇지만 DB의 auto increment ID를 사용하는건 이미 널리 쓰이고 있고 그다지 나쁜 선택이 아니다.
하지만 여러 측면을 고려하였을 때, DB의 auto increment ID를 사용하는 것은 아무래도 좋지않다는 판단을 한 경우라면 이제 ID를 어떻게 ID를 만들지가 중요해진다.

UUID v4와 같이 random한 ID의 경우 ID 충돌에 있어 큰 문제는 없지만, random한 값이기에 DB의 Primary Key로 사용하기엔 무리가 있을 수 있다.

출처: https://blog.programster.org/mysql-performance-when-using-uuid-for-primary-key

How to Do UUID as Primary Keys the Right WayUUID V4 Real Issues and How to Fix Them를 참고하길 바란다.

 
Primary Key로 사용하기 위해서는 ID는 time-sequential한 값이 좋다. 그래야 DB 성능을 크게 해치지 않는다.
이와 관련하여 Twitter의 Snowflake 방식이 있지만 추가로 다른 방식을 사용할 수 있을지에 대해 찾아보았다.

 

관련해서 GeekNews에 좋은 토픽이 있었다. - 리소스의 ID, GUID로 할까 Sequential로 할까? 
이 토픽의 댓글들 덕분에 time-sequential한 ID를 생성하는 여러 방식에 대해 알아 볼 수 있었다.
이 방식들에 대해 얕고 대략적으로 설명하자면 현재 시간을 ID의 앞부분으로 사용하고 ID의 뒷부분은 랜덤으로 생성하여 
time-sequential 하지만 충돌에 안전한 ID를 생성하는 방식이다.

 

여러 방식들에 대해 참고할 수 있는 링크를 남겨놓는다.

ksuid

ulid

Timeflake

UUID v6

 

댓글