Skip to content

Instantly share code, notes, and snippets.

@gongdo
Last active December 9, 2016 04:08
Show Gist options
  • Save gongdo/de794e88962c125dece6fbcaffeb1a4d to your computer and use it in GitHub Desktop.
Save gongdo/de794e88962c125dece6fbcaffeb1a4d to your computer and use it in GitHub Desktop.
Uniqueness

유니크 ID 만들기

목표

  • 현실적인 확률내에서 유니크한 ID 생성
  • 분산시스템에서의 유니크성 확보
  • 심지어 클라이언트에서도 ID 생성가능
  • 시간순서로 정렬(K-Order)이 되는지는 2차적인 목표

참고

방법

GUID(UUID)

장점

  • 거의 완벽한 유니크성
  • 플랫폼/언어에 관계없이 광범위하게 사용됨

단점

  • 시간에 대해 순차성이 없음
  • 길이가 다소 김(대시제외하고 32글자)

NewId

장점

  • GUID와 호환
  • 시간순서로 정렬가능

단점

  • 길이가 다소 김(대시제외하고 32글자)
  • 현재는 닷넷버전의 구현체밖에 없음
  • 중복확률이 GUID보다 높음

Snowflake 및 유사한 기법

장점

  • 짧은 길이(16글자)
  • long형과 호환(8bytes)
  • 시간순서로 정렬가능
  • 구현체가 많고 또한 구조가 단순하여 커스터마이징이 쉬움

단점

  • 중복확률이 NewId보다 높음(단, seed 설정에 따라서 다를수 있음)
  • 구현에 어느정도 커스터마이징 필요
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment