UUIDRFC 9562
UUID v7 Generator (생성기)
UUID v7을 한 번에 여러 개 생성합니다. 앞 48비트가 밀리초 타임스탬프라 문자열 정렬만으로 생성 시각 순이 됩니다. 개수와 시각, 정렬 보장을 정해 만들고 복사하거나 파일로 저장합니다.
결과
아직 생성된 결과가 없습니다
고급 옵션에서 개수를 정하고 생성을 누르면 여기에 목록이 나타납니다
UUID v7에 대하여
왜 v4 대신 v7인가
v4는 122비트가 전부 난수라 생성 순서와 값 사이에 아무 관계가 없습니다. 이 값을 데이터베이스 기본키로 쓰면 새 행이 인덱스의 임의 위치에 꽂히고, B-tree는 그때마다 페이지를 쪼갭니다. v7은 앞이 시간이라 새 값이 항상 인덱스 끝쪽에 붙습니다. 삽입이 몰리는 지점이 한곳으로 모여 캐시 적중률이 올라갑니다.
시작값과 마지막값은 어디에 쓰나
특정 밀리초에 존재할 수 있는 가장 작은 UUID와 가장 큰 UUID입니다. 랜덤 부분을 전부 0 또는 전부 1로 채워 만듭니다. 별도 타임스탬프 컬럼 없이 기본키 인덱스만으로 기간 조회가 됩니다.
- 시작값
019fadde-f095-7000-8000-000000000000 - 마지막값
019fadde-f095-7fff-bfff-ffffffffffff WHERE id BETWEEN 시작값(t1) AND 마지막값(t2)
마지막값의 bfff가 ffff가 아닌 이유는 variant 2비트가 10으로 고정이라 그 자리 최댓값이 b이기 때문입니다.
바이트 경계와 필드 경계는 다릅니다
위 이진 표기를 보면 드러납니다. 바이트 6(7a) 안에서 version과 rand_a가 갈리고, 바이트 8(9c) 안에서 variant와 rand_b가 갈립니다. hex 표기만 봐서는 보이지 않는 부분입니다.
주의할 점
- UUID에서 생성 시각을 되읽을 수 있습니다. 시점이 노출되면 곤란한 값에는 쓰지 마세요.
- 같은 밀리초에 4,096개를 넘기면 카운터가 소진되어 다음 밀리초로 넘어갑니다.
- 시스템 시계가 뒤로 돌아가면 단조 증가가 깨집니다. RFC 9562는 이 경우의 처리를 구현에 맡깁니다.
근거: RFC 9562 §5.7, §6.2